Найбільш надійною відповіддю (тобто, що фіксує наміри того, що ви намагаєтеся зробити, викликаючи найменше помилок) буде:
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