如果一个字符串不是一个对象,我如何能够使用内置的方法?
在JavaScript中,当你在原始字符串、数字或其他原始值上访问属性时,JavaScript引擎会假设你已经将其转换为等效的对象,然后查找该属性。所以例如:
var str = "hi"; var upper = str.toUpperCase();
JavaScript引擎会将这段代码视为这样写(为了访问`toUpperCase`属性):
var str = "hi"; var upper = new String(str).toUpperCase();
在ES5之前,规范中确实说JavaScript引擎会在那里创建一个字符串对象,然后调用属性。从ES5开始,这种情况略有改变(因为在严格模式下,`this`可能具有非对象值),但本质上概念仍然相同。
补充一点:这被称为"boxing",这是在Java中的术语。这个术语在ECMAScript规范中没有出现,也不常在JavaScript圈子中使用。可能因人而异。