为什么JavaScript原始类型可以调用toString()方法?
问题解答
这个现象是JavaScript内置的临时包装对象机制导致的,具体逻辑如下:
- JavaScript 中
number/string/boolean/symbol/bigint这五类原始类型,都有对应的内置构造函数(也就是包装类:Number/String/Boolean/Symbol/BigInt)。原始类型本身确实只存值、没有任何属性和方法,所有的方法调用都是引擎通过临时创建包装类实例完成的。 - 当你执行
num.toString()时,JS 引擎会自动完成三个步骤:- 以当前
num的原始值4为基础,创建一个对应Number包装类的临时实例对象 - 调用这个临时对象上的
toString()方法,得到返回值字符串"4" - 立即销毁这个临时对象,整个过程对开发者完全透明
- 以当前
你可以用下面的代码验证临时对象“用完即销毁”的特性:
let num = 4; num.abc = 123; // 给临时创建的Number对象添加属性,添加完成后临时对象立即销毁 console.log(num.abc); // 输出 undefined,本次访问会新建另一个临时Number对象,不存在abc属性
注意:如果主动用
new Number(4)语法创建的是永久存在的包装类对象,不属于临时对象范畴,不会自动销毁,和原始值的存储逻辑完全不同。
内容的提问来源于stack exchange,提问作者Mysa Mysa
相关产品推荐
相关产品推荐

