1 in [1, 2] //true
"foo" in ["foo", "bar"] //false
1 in [1] //false - ? what's going on here?
in
运算符不检查元素是否在数组中(如Python或JS array的indexOf
),而是检查对象是否具有给定名称的属性。
您希望在这里使用indexOf
,因为这实际上是检查该值是否包含在数组中。这将适用于数字和字符串,但不总是对象(您必须提供完全相同的对象,而不是等效的对象)。
在示例#1中,具有两个元素的数组具有一个名为1
的元素(数组中的第二个元素)。在示例#3中,具有一个元素的数组没有。
由于数组元素是有编号的,因此在任何数组中都没有foo
元素。
如果您要使用:
var data = ["foo", "bar"];
data.foo = "baz";
则CCD_ 6将返回真。
that in foo
测试是否存在名为的属性,而不是是否存在值为与之匹配的属性。
CCD_ 8与CCD_。CCD_ 10存在,所以CCD_。
CCD_ 12与CCD_。x[1]
不存在,因此1 in x
为false。
您正在寻找indexOf
方法。
["foo", "bar"].indexOf("foo") >= 0
in
运算符检查数组上是否存在给定的键,这意味着:
1 in [1, 2] // Checks if arr[1] exists
"foo" in ["foo", "bar"] // Checks if arr['foo'] exists
1 in [1] // Checks again if arr[1] exists
请记住,数组的键默认为数字索引,因此[1, 2]
和['foo', 'bar']
包含0
和1
键,而[1]
仅包含0
键。
如果您想检查数组是否包含给定的值,您应该适当地使用Array#indexOf
方法:
[1, 2].indexOf(1) !== -1 // true
["foo", "bar"].indexOf("foo") !== -1 // true
[1].indexOf(1) // true
您可能需要阅读有关in
运算符的MDN文档。
这是用于循环关联数组的"for in",就像这个
for( i in myArray ) {
// Do something with myArray[ i ];
}
如果"y"有一个KEY x而不是VALUE x 的元素,则"in"指令("x in y")为真
如果你想测试阵列中数据的存在
if( myArray.indexOf( "foo" ) > -1 ) {
// "foo" is there
}