2 回答

TA貢獻1829條經(jīng)驗 獲得超13個贊
然后我們檢索值obj.keyY,那么它是否在那些對象鍵上一一查找以找到keyY?
這取決于實現(xiàn),但即使在舊的 JavaScript 引擎中,答案是否定的,它比那要高效得多。對象屬性訪問是一個非常常見的操作,因此 JavaScript 引擎積極優(yōu)化它,并且在這樣做時非常復雜。
在現(xiàn)代 JavaScript 引擎中,對象通常被優(yōu)化為即時生成的類機器代碼,因此屬性查找速度快得令人眼花繚亂。如果由于某種原因它們沒有被優(yōu)化(可能只是不經(jīng)常使用),通常會使用像哈希表這樣的結(jié)構(gòu),因此查找仍然比線性訪問(查看每個屬性)要好得多。
具有大量屬性或隨時間變化的屬性的對象可能不如具有更合理數(shù)量的屬性的對象優(yōu)化得好。但它們至少會被優(yōu)化(在任何模糊現(xiàn)代的事物中)到哈希表級別的訪問時間。(FWIW:對于隨著時間的推移具有不同屬性的對象,首先使用 a 可能會更好Map
。)
雖然在學術(shù)上很有趣,但在編寫代碼時不要擔心這一點,直到/除非你遇到性能問題,你追蹤到緩慢的屬性訪問。(這是我在 ~20 年的 JavaScript 編碼中從未有過的。:-))

TA貢獻1805條經(jīng)驗 獲得超9個贊
小基準:
//setup..
for(var obj = {}, i =0; i<1000000; obj['key'+i] = i++);
var a;
//find 1
console.time(1);
a = obj.key1;
console.timeEnd(1);
//find last
console.time(2);
a = obj.key999999;
console.timeEnd(2);
如您所見,它不是一個一個地查找
添加回答
舉報