在Javascript中str.charAt(5)vs str [5]

时间:2013-10-27 16:20:08

标签: javascript performance

为什么str[3]版本显然要慢得多?

var str = 'Hello';

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

http://jsperf.com/charat-ck

编辑:对我来说,str[3]的{​​{1}}速度要慢80%。

1 个答案:

答案 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"

然而,当所有读取都在入境时,它可以执行相同的操作。