instance和原型的一个问题

新手上路,请多包涵
let falseObject = new Boolean(false);
let falseValue = false;
console.log(falseObject instanceof Boolean); // true
console.log(falseValue instanceof Boolean); // false

console.log(falseObject.__proto__ === Boolean.prototype);   //true
console.log(falseValue.__proto__ === Boolean.prototype);    //true

上面的通过构造函数和字面量这两种方式分别定义了两个变量.
cfb7730d848340e74a8739e87e57d4a.png
这是在mdn中查到的instanceof的解释.这样的话既然最后两行都是true,那就说明Boolean.prototype既出现在falseObject的原型链上,也出现在了falseValue的原型链上,那为什么第四行是false呢?我想不明白,有大佬帮忙解答一下嘛

阅读 840
1 个回答

falseValue 不是 Object

instanceof 会先判断 falseValue 是否是 Object 。如果不是,直接返回 false

falseValue.__proto__falseValue 不是 Object,它也没有属性。为了可以.__proto__ ,这里会从 falseValue 临时创建一个 Object。这个临时创建的 Object 才有 .__proto__ 属性。而它的 __proto__ 属性是 Boolean.prototype

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题