【发布时间】:2013-06-19 19:42:16
【问题描述】:
取自MDN
字符串字面量(用双引号或单引号表示)和字符串 从非构造函数上下文中的 String 调用返回(即,没有 使用 new 关键字)是原始字符串。 JavaScript 自动 将原语转换为 String 对象,以便可以使用 原始字符串的字符串对象方法。在上下文中 方法将在原始字符串或属性查找上调用 发生时,JavaScript 将自动包装字符串原语并 调用方法或执行属性查找。
所以,我认为(逻辑上)对字符串原语的操作(方法调用)应该比对字符串对象的操作慢,因为在将method 应用于字符串之前,任何字符串原语都会转换为字符串对象(额外的工作)。
但在这个test case 中,结果却相反。 code block-1 比 code block-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);
}
结果因浏览器而异,但 code block-1 总是更快。谁能解释一下,为什么 code block-1 比 code block-2 快。
【问题讨论】:
-
使用
new String引入了另一个透明层的Object 包裹。typeof new String(); //"object" -
'0123456789'.charAt(i)呢? -
@YuriyGalanter,这不是问题,但我在问为什么
code block-1更快? -
字符串对象在现实生活中相对很少见,因此解释器优化字符串文字也就不足为奇了。如今,您的代码不仅仅是解释,还有许多优化层发生在幕后。
-
这很奇怪:revision 2
标签: javascript string object