为什么在这里使用in
构造:
[].constructor in [Array]
返回false
,但
[].constructor == Array
返回true
答案 0 :(得分:1)
in
运算符检查密钥是否存在,而不是值:
如果指定的属性位于指定的对象或其原型链中,则返回true。 MDN
'key' in ['key']
将返回false
,而:
0 in ['key']
将返回true
要检查该值是否存在,您可以使用includes()
方法:
[Array].includes([].constructor)
将返回true
答案 1 :(得分:1)
如果指定的属性位于指定的对象或其原型链中, in 运算符将返回true。不是值,它会检查数组中的属性,例如数组中的索引(数字)属性是否从0开始 所以,如果我们回到你的例子
如果我们检查数组是否有prop 0,则返回true,如果我们检查它有prop 1则返回false,因为该数组只有一个带索引的元素 0
let arr = [Array]
console.log(0 in arr ) ; // true
console.log(1 in arr) ; // false
让我们看另一个例子
let obj = {
constructorArray : Array
}
console.log('constructorArray' in obj); // true
console.log(obj.constructorArray === [].constructor) ; // true
console.log(Array in obj) ; // false
了解更多