En sağlam cevap (yani, en az hataya neden olurken yapmaya çalıştığınız şeyin amacını yakalayan):
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'te Object.prototype'e bir şeyler eklemediğiniz bir tür kural vardır , çünkü çeşitli kütüphanelerdeki numaralandırmaları kırabilir. Bununla birlikte, Object'e yöntem eklemek genellikle güvenlidir.
İşte 2016 itibariyle bir güncelleme ve ES5 ve ötesinin yaygın dağıtımı . IE9 + ve diğer tüm modern ES5 + tarayıcıları Object.keys()
için yukarıdaki kodun olması için kullanabilirsiniz :
var size = Object.keys(myObj).length;
Object.keys()
Şu anda yerleşik olduğundan , mevcut herhangi bir prototipi değiştirmek zorunda değildir .
Düzenleme : Nesneler, Object.key yöntemi ile döndürülemeyen sembolik özelliklere sahip olabilir. Yani cevap onlardan bahsetmeden eksik olurdu.
Nesne özellikleri için benzersiz tanımlayıcılar oluşturmak üzere dile sembol tipi eklendi. Symbol tipinin ana yararı üzerine yazmaların önlenmesidir.
Object.keys
veya Object.getOwnPropertyNames
sembolik özellikler için çalışmaz. Onları iade etmek için kullanmanız gerekir 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