La réponse la plus robuste (c'est-à-dire qui capture l'intention de ce que vous essayez de faire tout en causant le moins de bogues) serait:
Object.size = function(obj) {
var size = 0, key;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
}
return size;
};
// Get the size of an object
var size = Object.size(myObj);
Il y a une sorte de convention en JavaScript selon laquelle vous n'ajoutez rien à Object.prototype , car cela peut casser les énumérations dans diverses bibliothèques. Cependant, ajouter des méthodes à Object est généralement sûr.
Voici une mise à jour à partir de 2016 et un déploiement généralisé d'ES5 et au-delà. Pour IE9 + et tous les autres navigateurs modernes ES5 +, vous pouvez utiliser Object.keys()
le code ci-dessus comme suit:
var size = Object.keys(myObj).length;
Cela ne doit modifier aucun prototype existant car il Object.keys()
est maintenant intégré.
Edit : les objets peuvent avoir des propriétés symboliques qui ne peuvent pas être retournées via la méthode Object.key. La réponse serait donc incomplète sans les mentionner.
Le type de symbole a été ajouté au langage pour créer des identificateurs uniques pour les propriétés des objets. Le principal avantage du type Symbol est la prévention des écrasements.
Object.keys
ou Object.getOwnPropertyNames
ne fonctionne pas pour les propriétés symboliques. Pour les retourner, vous devez utiliser Object.getOwnPropertySymbols
.
var person = {
[Symbol('name')]: 'John Doe',
[Symbol('age')]: 33,
"occupation": "Programmer"
};
const propOwn = Object.getOwnPropertyNames(person);
console.log(propOwn.length); // 1
let propSymb = Object.getOwnPropertySymbols(person);
console.log(propSymb.length); // 2