Javascript IN操作不能使用一个项目数组

时间:2016-08-11 19:24:46

标签: javascript arrays compare

在下面的代码段后,为什么使用IN操作时一个位置的数组无法正常工作

您可以看到 2项操作正常运行

  • 为什么会这样?
  • 解决方法是什么?



// helper function
function showResult(result) {
  document.querySelector('#result').innerHTML += result+'<br/>';
}

var a = ["1"]
var b = "1"

showResult(b in a);
//false

var a = ["1","2"]
var b = "1"

showResult(b in a);
//true
&#13;
<div id="result"></div>
&#13;
&#13;
&#13;

3 个答案:

答案 0 :(得分:5)

这不是in的用途。 in 用于搜索数组中的元素。它用于搜索对象以获取

示例:

var x = {a: 1, b: 2};
console.log('a' in x); // true

您的第二个示例有效,因为数组(对象)a包含一个名为1的密钥。

答案 1 :(得分:3)

in operator检查对象是否有键,而不是值。您的第二个案例会返回true,因为任何包含两个元素的数组都包含键'0''1''1'也恰好是该数组中的值并不重要; '1' in ['foo', 'bar']也是如此。

要测试元素是否在数组中,您应该使用Array.prototype.indexOf或现代引擎Array.prototype.includes。您可以使用其中任何一个链接中的polyfill来获得所有引擎中对该方法的支持:

// Most engines (IE 9+)
showResult( a.indexOf( b ) >= 0 );

// Modern engines only:
showResult( a.includes( b ) );

答案 2 :(得分:1)

第一个结果是false,因为a没有索引1,而a的第二个版本有该索引。

in运算符不是肯定值,而是属性(键)。

混淆可能是因为CoffeeScript 使用in来搜索值。 See here如何将其转换为indexOf