Depuis le nœud REPL chose,
> d = {}
{}
> d === {}
false
> d == {}
false
Étant donné que j'ai un dictionnaire vide, comment puis-je m'assurer qu'il s'agit d'un dictionnaire vide?
function isEmpty(obj) {
return Object.keys(obj).length === 0;
}
Vous pouvez étendre Object.prototype
avec cette méthode isEmpty
pour vérifier si un objet n'a pas de propriétés propres:
Object.prototype.isEmpty = function() {
for (var prop in this) if (this.hasOwnProperty(prop)) return false;
return true;
};
Que diriez-vous d'utiliser jQuery?
$.isEmptyObject(d)
Puisqu'elle n'a aucun attribut, une boucle for
n'aura rien à répéter. Pour donner du crédit là où c'est dû, j'ai trouvé cette suggestion ici .
function isEmpty(ob){
for(var i in ob){ return false;}
return true;
}
isEmpty({a:1}) // false
isEmpty({}) // true
C'est ce que jQuery utilise, fonctionne très bien. Bien que cela nécessite le script jQuery pour utiliser isEmptyObject .
isEmptyObject: function( obj ) {
for ( var name in obj ) {
return false;
}
return true;
}
//Example
var temp = {};
$.isEmptyObject(temp); // returns True
temp ['a'] = 'some data';
$.isEmptyObject(temp); // returns False
Si l'inclusion de jQuery n'est pas une option, créez simplement une fonction javascript pur distincte.
function isEmptyObject( obj ) {
for ( var name in obj ) {
return false;
}
return true;
}
//Example
var temp = {};
isEmptyObject(temp); // returns True
temp ['b'] = 'some data';
isEmptyObject(temp); // returns False
Je suis loin d'être un spécialiste de JavaScript, mais les éléments suivants fonctionnent-ils?
if (Object.getOwnPropertyNames(d).length == 0) {
// object is empty
}
Il a l'avantage d'être un appel de fonction pur d'une ligne.
var SomeDictionary = {};
if(jQuery.isEmptyObject(SomeDictionary))
// Write some code for dictionary is empty condition
else
// Write some code for dictionary not empty condition
Cela fonctionne bien.
Il faudrait vérifier qu'il était de type 'objet' comme ceci:
(typeof(d) === 'object')
Et puis implémentez une fonction courte de 'taille' pour vérifier qu'elle est vide, comme mentionné ici .
Si les performances ne sont pas prises en compte, il s'agit d'une méthode simple facile à retenir:
JSON.stringify(obj) === '{}'
De toute évidence, vous ne voulez pas, cependant, être en train de stringifier de gros objets dans une boucle.
Si vous essayez ceci sur Node.js, utilisez cet extrait, basé sur ce code ici
Object.defineProperty(Object.prototype, "isEmpty", {
enumerable: false,
value: function() {
for (var prop in this) if (this.hasOwnProperty(prop)) return false;
return true;
}
}
);