Самый надежный ответ (то есть, который отражает намерение того, что вы пытаетесь сделать, вызывая при этом наименьшее количество ошибок):
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 есть своего рода соглашение, что вы не добавляете вещи в Object.prototype , потому что он может нарушать перечисления в различных библиотеках. Однако добавление методов в Object обычно безопасно.
Вот обновление от 2016 года и широкое развертывание ES5 и более поздних версий . Для IE9 + и всех других современных браузеров с поддержкой ES5 + вы можете использовать следующий Object.keys()
код:
var size = Object.keys(myObj).length;
Это не должно изменять любой существующий прототип, так Object.keys()
как теперь встроен.
Редактировать : Объекты могут иметь символические свойства, которые нельзя вернуть с помощью метода Object.key. Таким образом, ответ будет неполным без упоминания их.
Тип символа был добавлен в язык для создания уникальных идентификаторов свойств объекта. Основным преимуществом типа Symbol является предотвращение перезаписи.
Object.keys
или Object.getOwnPropertyNames
не работает для символических свойств. Чтобы вернуть их вам нужно использовать 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