中的JavaScript运行不带有一个项目的阵列
下面的代码片段波纹管,为什么用一个位置的数组无法正常工作工作?中的JavaScript运行不带有一个项目的阵列
您可以看到,与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
<div id="result"></div>
检查对象是否有键而不是值。你的第二个情况返回true
,因为任何具有两个元素的数组都有键'0'
和'1'
。不要紧,'1'
也恰好是该数组中的值; '1' in ['foo', 'bar']
也是如此。
要测试一个元素是否在一个数组中,您应该使用Array.prototype.indexOf或在现代引擎Array.prototype.includes中。您可以使用填充工具无论从这些链接以获取所有引擎方法支持:
// Most engines (IE 9+)
showResult(a.indexOf(b) >= 0);
// Modern engines only:
showResult(a.includes(b));
谢谢你的回答!得到它了! –
@AlvaroJoao不客气 – Paulpro
这不是什么in
是。 in
是而不是用于在数组中搜索元素。它用于搜索对象的密钥。
实施例:
var x = {a: 1, b: 2};
console.log('a' in x); // true
你的第二示例工作,因为该阵列(对象)a
包含一个称为1
键。
感谢您的答案,然后解决方法是什么? –
@AlvaroJoao'myArray.indexOf(value)> -1'会做你想做的事情 – blex
第一个结果是false
,因为a
没有索引1,而第二个版本的a
有该索引。
in
运算符不是关于确定值,而是属性(键)。
该混淆可能是因为CoffeeScript 确实为使用in
来搜索值。 See here如何将它转换为indexOf
虽然我们的话题,你应该阅读有关'用[这个问题] for..in'( http://stackoverflow.com/q/500504/5743988)如果你以前没有。这是一个常见的陷阱。 – 4castle
@ 4castle感谢您提出这个问题!我现在就读它! –