Jawaban yang paling kuat (yaitu yang menangkap maksud dari apa yang Anda coba lakukan sambil menyebabkan bug paling sedikit) adalah:
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);
Ada semacam konvensi dalam JavaScript yang Anda tidak menambahkan hal-hal ke Object.prototype , karena itu dapat merusak enumerasi di berbagai perpustakaan. Menambahkan metode ke Objek biasanya aman.
Berikut ini adalah pembaruan pada 2016 dan penyebaran luas ES5 dan seterusnya. Untuk IE9 + dan semua browser yang mampu ES5 + modern lainnya, Anda dapat menggunakan Object.keys()
kode di atas menjadi:
var size = Object.keys(myObj).length;
Ini tidak harus memodifikasi prototipe yang ada karena Object.keys()
sekarang sudah ada di dalamnya .
Sunting : Objek dapat memiliki sifat simbolis yang tidak dapat dikembalikan melalui metode Object.key. Jadi jawabannya tidak lengkap tanpa menyebutkannya.
Jenis simbol ditambahkan ke bahasa untuk membuat pengidentifikasi unik untuk properti objek. Manfaat utama dari tipe Symbol adalah pencegahan overwrites.
Object.keys
atau Object.getOwnPropertyNames
tidak berfungsi untuk properti simbolik. Untuk mengembalikannya, Anda harus menggunakan 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