为什么数组中的数字有效,而数组中的字符串无效

Why does number in Array work, but not String in Array?

本文关键字:数组 字符串 无效 数字 为什么 有效      更新时间:2023-09-26
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']包含01键,而[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
}