3

在《面向 Web 开发人员的专业 Javascript 》一书中,我读到 JavaScript 在尝试访问原始对象的属性和方法时会在内部使用原始包装器。这是否意味着每次我尝试访问字符串原语的长度属性时,都会重新计算值?我的直觉告诉我,由于字符串是固定的,因此它们的长度值存储在某个地方并且只能由包装器访问,但我宁愿确定。

4

2 回答 2

5

By specification, yes (§11.2.1, §8.7.1, §9.9, §15.5.5).

Still that does not mean an actual implementation will create string objects in the memory, this is surely optimized.

于 2012-10-23T17:48:48.103 回答
3

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

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

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

如果您担心性能,请不要担心。很少有必须使用原始包装对象的情况,而且它们的性能似乎比仅使用原始值慢几个数量级(请参阅test)。让解释器关心优化。

于 2012-10-23T17:06:40.583 回答