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
上面的通过构造函数和字面量这两种方式分别定义了两个变量.
这是在mdn中查到的instanceof的解释.这样的话既然最后两行都是true,那就说明Boolean.prototype既出现在falseObject的原型链上,也出现在了falseValue的原型链上,那为什么第四行是false呢?我想不明白,有大佬帮忙解答一下嘛
falseValue
不是Object
。instanceof
会先判断falseValue
是否是Object
。如果不是,直接返回false
。falseValue.__proto__
:falseValue
不是Object
,它也没有属性。为了可以.__proto__
,这里会从falseValue
临时创建一个Object
。这个临时创建的Object
才有.__proto__
属性。而它的__proto__
属性是Boolean.prototype
。