字符串 toString() 方法调用

为什么基本类型可以直接调用方法

问题

为什么 '1'.toString() 不会报错?字符串是基本类型,为什么可以调用方法?

解答

当对基本类型调用方法时,JavaScript 会自动进行装箱操作,创建一个临时的包装对象,调用完方法后立即销毁。

'1'.toString() 为例,实际执行过程:

var s = new Object('1');
s.toString();
s = null;

这个过程分为三步:

第一步:创建包装对象

创建 Object 类实例(注意不是 String 构造函数)。由于 Symbol 和 BigInt 的出现,对它们调用 new 会报错,ES6 规范不建议用 new 来创建基本类型的包装类。

第二步:调用方法

在临时对象上调用 toString() 方法。

第三步:销毁对象

方法执行完毕后,立即销毁这个临时实例。

这个机制体现了基本包装类型的特性。基本包装类型属于基本数据类型,包括 Boolean、Number 和 String。

关键点

  • JavaScript 会自动将基本类型转换为对应的包装对象(装箱)
  • 包装对象在方法调用后立即销毁,不会持久存在
  • 基本包装类型包括 Boolean、Number 和 String
  • ES6 不建议使用 new 创建基本类型包装类(Symbol 和 BigInt 会报错)