Skip to content

装箱机制

js
const a = 1
console.log(a.__proto__ === Number.prototype) // true
console.log(a instanceof Number) // false

在JavaScript中,const a = 1定义了一个原始类型的数字

  • 装箱机制(Boxing):当你尝试访问原始类型的属性或方法(__proto__)时,JavaScript引擎会自动将其临时包装成对应的包装对象(即Number对象)
  • 原型链连接:这个临时包装对象的原型指向Number.prototype,因此,a.__proto__实际上访问的是这个临时对象的原型,结果为true

instanceof 运算符的工作原理时检查构造函数的prototype属性是否出现在某个对象的原型链上

  • a是一个原始数字1,它本身并不是一个对象
  • instanceof的规则:根据ECMAScript规范,如果instanceof左侧的操作数不是对象(Object),它会直接返回false
  • 对比:如果你使用const b = new Number(1)创建一个数字对象,那么b instanceof Number会返回true