在下面的代码段后,为什么使用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;
答案 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