Najbardziej niezawodną odpowiedzią (tj. Która uchwyci zamiar tego, co próbujesz zrobić, powodując jak najmniej błędów), byłoby:
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);
JavaScript zawiera pewną konwencję, według której nie dodajesz elementów do Object.prototype , ponieważ może on przerywać wyliczenia w różnych bibliotekach. Jednak dodawanie metod do Object jest zwykle bezpieczne.
Oto aktualizacja z 2016 r. I powszechne wdrożenie ES5 i późniejszych wersji. W przypadku IE9 + i wszystkich innych współczesnych przeglądarek obsługujących ES5 + możesz użyć Object.keys()
powyższego kodu:
var size = Object.keys(myObj).length;
Nie musi to modyfikować żadnego istniejącego prototypu, ponieważ Object.keys()
jest teraz wbudowany.
Edycja : Obiekty mogą mieć właściwości symboliczne, których nie można zwrócić za pomocą metody Object.key. Zatem odpowiedź byłaby niepełna bez wspominania o nich.
Typ języka został dodany do języka, aby utworzyć unikalne identyfikatory właściwości obiektu. Główną zaletą typu Symbol jest zapobieganie nadpisywaniu.
Object.keys
lub Object.getOwnPropertyNames
nie działa dla właściwości symbolicznych. Aby je zwrócić, musisz użyć 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