取自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);
}
代码块2:
var s = new String('0123456789');
for (var i = 0; i < s.length; i++) {
s.charAt(i);
}
结果因浏览器而异,但代码块 1总是更快。谁能解释一下,为什么code block-1比code block-2快。