2011-09-03 59 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似乎没有区分这两者。