6

为什么str[3]版本这么慢,显然?

var str = 'Hello';

str.charAt(3);
str[3];

http://jsperf.com/charat-ck

编辑:对我来说,str[3]Chrome 28.0.1500.71 Ubuntu 13.04.

4

1 回答 1

4

稍微调整一下基准:http: //jsperf.com/charat-ck/4

不要使用像这样的常量和无操作代码,因为它很容易被消除,然后你就没有测量你认为你正在测量的东西。

接下来考虑即使我们有无限智能的 JIT,这些操作也有不同的语义:

当你叫出charAt界时会发生什么?只需返回空字符串。

当你叫出[]界时会发生什么?将原型链从 String 遍历到 Object 并undefined在最终找不到时返回:

String.prototype[3] = "hi";
var string = "asd";
string.charAt(3); //""
string[3]; //"hi"

但是,当所有读取都在边界内时,它确实可以执行相同的操作。

于 2013-10-27T20:35:34.190 回答