为什么[Array]中的[] .constructor返回false

时间:2018-06-03 09:30:46

标签: javascript

为什么在这里使用in构造:

[].constructor in [Array]

返回false,但

[].constructor == Array

返回true

2 个答案:

答案 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 

了解更多

in operator MDN