JavaScript 中的字符串基元和字符串对象有什么区别?
摘自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总是更快。任何人都可以解释一下,为什么代码块-1比代码块-2快。