取自MDN
字符串文字(用双引号或单引号表示)和从非构造函数上下文中的String调用返回的字符串(即,不使用new关键字)是原始字符串.JavaScript会自动将基元转换为String对象,因此可以对原始字符串使用String对象方法.在要在原始字符串上调用方法或发生属性查找的上下文中,JavaScript将自动包装字符串原语并调用方法或执行属性查找.
因此,我认为(逻辑上)字符串基元上的操作(方法调用)应该比字符串对象上的操作慢,因为任何字符串基元method在应用于字符串之前都会转换为字符串对象(额外工作).
但在这个测试案例中,结果却相反.所述码块1的运行速度比较快的块-2代码,两个代码块在下面给出:
代码块-1:
var s = '0123456789';
for (var i = 0; i < s.length; i++) {
s.charAt(i);
}
Run Code Online (Sandbox Code Playgroud)
代码块-2:
var s = new String('0123456789');
for (var i = 0; i < s.length; i++) {
s.charAt(i);
}
Run Code Online (Sandbox Code Playgroud)
结果在浏览器中有所不同,但代码块-1总是更快.任何人都可以解释一下,为什么代码块-1比代码块-2快.