我正在構建一個jsperf來說明訪問嵌套對象成員所花費的時間,我發現這個奇怪的現象。出於某種原因,對於第四個嵌套對象成員,測試運行速度比第五個速度慢得多。我已經在Chrome和Firefox中嘗試了這一點,並且獲得了相同的結果。爲什麼第四個嵌套值的訪問速度比第五個要慢?
任何想法,爲什麼這會發生?
我正在構建一個jsperf來說明訪問嵌套對象成員所花費的時間,我發現這個奇怪的現象。出於某種原因,對於第四個嵌套對象成員,測試運行速度比第五個速度慢得多。我已經在Chrome和Firefox中嘗試了這一點,並且獲得了相同的結果。爲什麼第四個嵌套值的訪問速度比第五個要慢?
任何想法,爲什麼這會發生?
你的對象是這樣的,我的評論說:
var obj = {
"one": {
"two": {
"three": {
"four": {
"five": {
"value": 0
}
/* MISSING "value": 0 */
},
"value": 0
},
"value": 0
},
"value": 0
},
"value": 0
};
};
"four"
鍵上的對象沒有"value"
鍵,但是,顯然JavaScript引擎必須做額外的工作來處理這種情況:錯過對象的鍵查找,錯過在對象的原型Object
上查找關鍵字,返回undefined
,然後在將1
添加到undefined
時計算NaN
。
問題是obj.one.two.three.four
沒有value
屬性。在這種情況下,JavaScript會遍歷原型鏈,尋找缺失的屬性,然後再將NaN
指定爲sum
。
我修復了你的測試。你沒有'四'的價值領域。我還在測試中添加了寫入過程以獲得更好的值; here you got the fixed jsperf test