采取以下代码:
var testArr = [1, 2, 3, 4, 5];
function check(num) {
if (num !== undefined) {
if (num in testArr) {
alert("in");
} else {
alert("not in");
}
}
}
使用check()
函数,我尝试检查给定参数是否属于testArr
数组。
一般情况下,只有在检查0
满足条件时,该函数才能正常工作,尽管0
不是数组的一部分。亲眼看看:Fiddle
为什么会这样?
我能想到的一个可能的解决方案是0
在某些情况下(false
vs ==
)被评估为===
,但在传递false
时作为论点,条件没有得到满足,这对我没有任何意义 - 我很困惑。
答案 0 :(得分:2)
在这种情况下,您返回索引存在于数组中但不存在值。请参阅此文档in operator。我认为你必须使用indexOf函数验证数组的值。
答案 1 :(得分:1)
您想使用[].indexOf(elem)
(doc)并检查-1
是否不在数组中。此问题中还提到了一些其他方法How do I check if an array includes an object in JavaScript?
您的代码将更新如下:
var testArr = [1, 2, 3, 4, 5];
function check(num) {
if (num !== undefined) {
if (testArr.indexOf(num) != -1) {
alert("in");
} else {
alert("not in");
}
}
}
in
运算符搜索键,0
将是任何非空数组中的有效索引。对于所有数组,in
都不会返回true。尝试使用空数组[]
答案 2 :(得分:1)
“in”正在按键检查。 你有testArr [0]所以你可以得到警报(“in”)。
也就是说,如果你使用check(0)~check(4)将会发出警报(“in”), 其他将是警报(“不在”),如check(5)。
var testArr = [1, 2, 3, 4, 5];
function check(num) {
if (num in testArr) {
return "check(" + i + ") = in ";
} else {
return "check(" + i + ") = not in ";
}
}
for (var i = 0; i <= 6; i++) {
document.write(check(i) + "<br>")
}
答案 3 :(得分:0)
来自in
运算符的prop参数将搜索属性或检查索引是否存在。
来自文档:
prop:表示属性名称或的字符串或数字表达式 数组索引。
从其中一个例子中可以看出:
您必须指定索引号,而不是该索引处的值。
如果你这样做:
<script>
var trees = new Array("redwood", "bay", "cedar", "oak", "maple");
'length' in trees // returns true because length is a property.
</script>
因此,在您的情况下,如果索引0存在,则询问check
函数。