Standart Nesne uygulaması ( ES5.1 Nesne İç Özellikleri ve Yöntemleri ), Object
anahtar / özellik sayısını izlemek için a gerektirmez Object
.
İşte en yaygın kullanılan alternatifler:
1. ECMAScript'in Object.keys ()
Object.keys(obj).length;
Geçici bir dizi hesaplamak için tuşlar üzerinde dahili olarak yineleyerek çalışır ve uzunluğunu döndürür.
- Artıları - Okunabilir ve temiz sözdizimi. Yerel destek yoksa bir dolgu dışında kütüphane veya özel kod gerekmez
- Dezavantajları - Dizinin oluşturulması nedeniyle bellek ek yükü.
2. Kütüphane tabanlı çözümler
Bu konunun başka yerlerinde birçok kütüphane tabanlı örnek, kendi kütüphaneleri bağlamında yararlı deyimlerdir. Bununla birlikte, performans bakış açısından, mükemmel bir kütüphane olmayan kodla karşılaştırıldığında kazanılacak hiçbir şey yoktur, çünkü tüm bu kütüphane yöntemleri aslında bir for-loop veya ES5'i Object.keys
(yerel veya shimmed) kapsamaktadır.
3. Bir for-loop'u optimize etme
Bu tür bir for- loop'un en yavaş kısmı.hasOwnProperty()
, fonksiyon çağrısı yükü nedeniyle genellikle çağrıdır. Bu yüzden sadece bir JSON nesnesinin giriş sayısını istediğimde, .hasOwnProperty()
hiçbir kodun ne kadar genişlemediğini bildiğimde aramayı atlıyorum Object.prototype
.
Aksi takdirde, kodunuz k
local ( var k
) yapılarak ++count
ve postfix yerine önek artış operatörü ( ) kullanılarak çok az optimize edilebilir .
var count = 0;
for (var k in myobj) if (myobj.hasOwnProperty(k)) ++count;
Başka bir fikir, hasOwnProperty
yöntemin önbelleğe alınmasına dayanır :
var hasOwn = Object.prototype.hasOwnProperty;
var count = 0;
for (var k in myobj) if (hasOwn.call(myobj, k)) ++count;
Bunun belirli bir ortamda daha hızlı olup olmadığı bir kıyaslama meselesidir. Yine de çok sınırlı bir performans artışı beklenebilir.