为什么str[3]
版本这么慢,显然?
var str = 'Hello';
str.charAt(3);
str[3];
编辑:对我来说,str[3]
在Chrome 28.0.1500.71 Ubuntu 13.04
.
为什么str[3]
版本这么慢,显然?
var str = 'Hello';
str.charAt(3);
str[3];
编辑:对我来说,str[3]
在Chrome 28.0.1500.71 Ubuntu 13.04
.
稍微调整一下基准:http: //jsperf.com/charat-ck/4
不要使用像这样的常量和无操作代码,因为它很容易被消除,然后你就没有测量你认为你正在测量的东西。
接下来考虑即使我们有无限智能的 JIT,这些操作也有不同的语义:
当你叫出charAt
界时会发生什么?只需返回空字符串。
当你叫出[]
界时会发生什么?将原型链从 String 遍历到 Object 并undefined
在最终找不到时返回:
String.prototype[3] = "hi";
var string = "asd";
string.charAt(3); //""
string[3]; //"hi"
但是,当所有读取都在边界内时,它确实可以执行相同的操作。