點運算符比下標符號更快嗎?Javascript性能考慮。點運算符比下標符號更快嗎?
var obj = {x: '5'};
obj.x = 'some value';
obj['x'] = 'some value';
點運算符比下標符號更快嗎?Javascript性能考慮。點運算符比下標符號更快嗎?
var obj = {x: '5'};
obj.x = 'some value';
obj['x'] = 'some value';
沒有什麼令人難以置信的擔憂。通過window
或eval
處理變量的速度明顯較慢。
你忘了寫變量訪問速度慢10倍! ('obj [x]'= ...)這可能是因爲JIT編譯器可以預先搜索字符串,如果它是一個常量,所以它變成與點符號「等價」,但如果字符串在變量中JIT無法對其進行優化,因此必須在運行時進行。 – xanatos
在提供的測試中存在這種情況.. –
這也許是過時的信息,但它是影響至少較老版本的Safari瀏覽器的聲明。 從O'Reilly的Writing Efficient JavaScript:
對於大多數瀏覽器,所以實際上使用點 符號爲對象屬性訪問(data.count)和括號符號 (數據[「計數」])之間沒有差別。 Safari除外,其中括號表示法 明顯低於點表示法。即使對於使用Nitro JavaScript引擎的Safari 4和更高版本, 也是如此。
看起來像http://jsperf.com/已被撤下 - 它說Website Disabled
,但使用來自Qt4的嵌入式WebKit引擎,它看起來像,這種說法是真實的,使用這個測試:
var t = new Date().getTime();
var x = { c: 123 };
for (var i = 0; i < 5000000; i++)
x['c'] += 2;
document.write((new Date().getTime() - t) + '; value ' + x.c);
var t = new Date().getTime();
var x = { c: 123 };
for (var i = 0; i < 5000000; i++)
x.c += 2;
document.write((new Date().getTime() - t) + '; value ' + x.c);
使用x['c']
需要約4秒,而x.c
運行約3秒鐘。 目前的Firefox和Chrome似乎沒有區分這兩者。
這將有助於將此代碼與其他代碼相關聯,然後考慮與其他代碼的比率的處罰。如果某些功能實際上被認爲是不自然的慢,它通常會從語言中刪除(例如'with'被棄用) – William
對象表示法應該是{x:'5'}。試圖編輯,但引擎說編輯至少必須是6個字符:/ –