1 in [1, 2] //true
"foo" in ["foo", "bar"] //false
1 in [1] //false - ? what's going on here?
答案 0 :(得分:4)
in
运算符不检查元素是否在数组中(如Python或JS数组的indexOf
),它检查对象是否具有属性名字。
您希望在此处使用indexOf
,因为它实际上会检查该值是否包含在数组中。这将适用于数字和字符串,但不总是对象(您必须提供完全相同的对象,而不是相同的对象)。
在示例#1中,具有两个元素的数组具有名为1
的元素(数组中的第二个元素)。在示例#3中,具有一个元素的数组不会。
由于数组元素已编号,因此任何数组中都没有foo
元素。
如果您要使用:
var data = ["foo", "bar"];
data.foo = "baz";
然后"foo" in data
将返回true。
答案 1 :(得分:2)
that in foo
测试是否存在名为的属性,而不是存在值与之匹配的属性。
x = [1, 2]
与x = []; x[0] = 1; x[1] = 2
相同。存在x[1]
,因此1 in x
为真。
x = ["foo", "bar"]
与x = []; x[0] = "foo"; x[1] = "bar"
相同。 x[1]
不存在,因此1 in x
为假。
您正在寻找indexOf
方法。
["foo", "bar"].indexOf("foo") >= 0
答案 2 :(得分:2)
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
您可能需要阅读MDN docs about the in
operator。
答案 3 :(得分:2)
是用于循环关联数组的“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
}