2011-09-03 62 views
5

點運算符比下標符號更快嗎?Javascript性能考慮。點運算符比下標符號更快嗎?

var obj = {x: '5'}; 
obj.x = 'some value'; 
obj['x'] = 'some value'; 
+0

這將有助於將此代碼與其他代碼相關聯,然後考慮與其他代碼的比率的處罰。如果某些功能實際上被認爲是不自然的慢,它通常會從語言中刪除(例如'with'被棄用) – William

+0

對象表示法應該是{x:'5'}。試圖編輯,但引擎說編輯至少必須是6個字符:/ –

回答

6

沒有什麼令人難以置信的擔憂。通過windoweval處理變量的速度明顯較慢。

http://jsperf.com/dot-vs-square-bracket/5

+0

你忘了寫變量訪問速度慢10倍! ('obj [x]'= ...)這可能是因爲JIT編譯器可以預先搜索字符串,如果它是一個常量,所以它變成與點符號「等價」,但如果字符串在變量中JIT無法對其進行優化,因此必須在運行時進行。 – xanatos

+0

在提供的測試中存在這種情況.. –

2

這也許是過時的信息,但它是影響至少較老版本的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似乎沒有區分這兩者。