字符串 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 会报错)
目录