为什么数组中的数字有效,而数组中的字符串无效
Why does number in Array work, but not String in Array?
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
}
相关文章:
- 高亮显示与数组字符串一起使用时文本插件中断
- 从数组/字符串中删除所有小数和单个数字
- 使用Javascript regex替换“index”数组字符串
- 如何将复选框中的选中值收集为 javascript 数组/字符串
- 将数组数组字符串转换为 Javascript 数组数组的优雅方法
- 如何将数组字符串转换为数组
- 通过数组字符串访问JavaScript对象中的值
- Javascript数组字符串作为图像键
- Chrome和Firefox正在检索字符,而不是javascript中的数组字符串
- 如何在 JavaScript 函数中从 PHP end 传递数组字符串作为参数
- Jquery 如何检查数组字符串值是否在文本区域中
- 如何转换数组字符串
- JS数组字符串将名称修补到数组(对象)
- 在Javascript中从数组字符串中查找单个或多个值
- 如何将java数组字符串分配给javascript数组字符串
- 如何在javascript中将子数组字符串的数组转换为子数组的数组?
- 如何将字符串中的特殊值放入数组字符串
- 如何在JavaScript中给出RouteUrl中的数组字符串
- 在javascript的for循环中设置数组's字符串元素的长度为一个变量
- 如何从“数组字符串”中获取键值在javascript