取自MDN
字符串文字(用双引号或单引号引起来)和非构造函数上下文中从字符串调用返回的字符串(即,不使用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快。
'0123456789'.charAt(i)
呢?
code block-1
更快?
new String
引入了对象包装的另一个透明层。typeof new String(); //"object"