JavaScript中的原始包装行为

时间:2012-10-23 17:00:16

标签: javascript ecma262

Web开发者专业Javascript 一书中,我读到了在尝试访问原始对象的属性和方法时,JavaScript内部使用了原始包装器。这是否意味着每次我尝试访问字符串原语上的length属性时,都会重新计算该值?我的直觉告诉我,因为字符串是固定的,所以它们的长度值存储在某处,只能由包装器访问,但我更确定。

2 个答案:

答案 0 :(得分:5)

根据规范,是(§11.2.1§8.7.1§9.9§15.5.5)。

但这并不意味着实际的实现会在内存中创建字符串对象,这肯定是优化的。

答案 1 :(得分:3)

我认为这是真的,当您尝试访问原始的属性时,会动态创建原始包装器,如下所示:

"foo".length; // behaves as new String('foo').length

不仅在您尝试访问该属性时计算length,而且还创建了一个全新的对象(该对象实际上包含该属性)。然后立即丢弃包装。

如果你担心表现,不要。在必须使用原始包装器对象的情况下很少见,并且它们的性能似乎比使用原始值慢几个数量级(参见test)。让口译员关心优化。