如果字符串不是对象,我怎么能使用内置方法?

Hay*_*den 3 javascript javascript-objects

在JavaScript中创建对象时,可以从可以使用的Object原型继承属性.

但是字符串是原始类型,因此没有原型.那么,如果没有原型,字符串可以继承那些方法,我怎么能在字符串上使用substr()和repeat()等方法呢?

例如,当我创建一个新数组并将其分配给变量时,我将变量名称键入控制台,并列出了Array原型,我可以访问我可以使用的方法.但是如果我创建一个字符串并将字符串分配给变量,那么我将变量键入控制台,没有附加原型.

那有意义吗?

T.J*_*der 8

当您访问原始字符串,数字或其他原语的属性时,JavaScript引擎就像您将其转换为等效对象一样,然后查找该属性.例如:

var str = "hi";
var upper = str.toUpperCase();
Run Code Online (Sandbox Code Playgroud)

JavaScript引擎就好像代码是这样编写的(为了访问toUpperCase属性):

var str = "hi";
var upper = new String(str).toUpperCase();
Run Code Online (Sandbox Code Playgroud)

在ES5之前,规范说JavaScript引擎实际上在那里创建了一个字符串对象,然后调用该属性.从ES5开始略有改变(因为在严格模式下,它可能this具有非对象值),但实质上这个概念仍然是相同的.