点运算符比下标符号更快吗?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个字符:/ –