Самый надежный ответ (то есть, который отражает намерение того, что вы пытаетесь сделать, вызывая при этом наименьшее количество ошибок), будет:
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