如果一个字符串不是一个对象,我如何能够使用内置的方法?

15 浏览
0 Comments

如果一个字符串不是一个对象,我如何能够使用内置的方法?

在JavaScript中创建对象时,你可以利用Object原型所继承的属性。但是字符串是一种原始类型,因此没有原型。那么在没有原型的情况下,我如何能够使用诸如substr()和repeat()之类的方法呢?

例如,当我创建一个新数组并将其赋值给一个变量时,我在控制台中输入变量名,就会列出Array原型,我可以使用其中的方法。但是如果我创建一个字符串并将其赋值给一个变量,然后在控制台中输入变量,它没有附加原型。

这样说清楚了吗?

0
0 Comments

在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圈子中使用。可能因人而异。

0