为什么str[3]
版本显然要慢得多?
var str = 'Hello';
str.charAt(3);
str[3];
编辑:对我来说,str[3]
的{{1}}速度要慢80%。
答案 0 :(得分: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"
然而,当所有读取都在入境时,它可以执行相同的操作。