使用“in”关键字检查 0 始终返回 true
Using 'in' keyword to check for 0 always returns true?
采用以下代码段:
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
不是数组的一部分。亲眼看看:小提琴
为什么会这样?
我能想到的一个可能的解决方案是,在某些情况下(==
vs ===
0
被评估为false
,但是当false
作为参数传递时,不满足条件,这对我来说没有任何意义——我很困惑。
在本例中,您返回了数组中存在索引,但不包含值。请参阅运算符中的此文档。我认为您必须使用 indexOf 函数验证数组的值。
您想使用该[].indexOf(elem)
(doc) 并检查-1
是否不在数组中。 这个问题中还提到了其他一些方法如何检查数组是否包含 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。 尝试使用空数组[]
"
in"正在按键检查。你有testArr[0],所以你可以得到alert("in")。
也就是说,如果你使用 check(0)~check(4) 将是 alert("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>")
}
来自 in
运算符的 prop 参数将搜索属性或检查索引是否存在。
从文档中:
prop:表示属性名称或属性名称的字符串或数值表达式 数组索引。
从其中一个例子来看:
必须指定索引号,而不是该索引处的值。
如果您这样做:
<script>
var trees = new Array("redwood", "bay", "cedar", "oak", "maple");
'length' in trees // returns true because length is a property.
</script>
因此,在您的情况下,您正在询问check
函数是否存在索引 0。
相关文章:
- 对于loop.if-仅在经过所有间隔后返回true
- 如果函数返回True,则显示Javascript按钮
- Javascript If else 只返回 TRUE 或只返回 FALSE
- 过滤器返回true或false
- 我对“;返回true"嵌套函数内部;t工作
- 如何在成功输入时使“返回TRUE”
- 检查一个元素是否有一个类与另一个类总是返回true
- JavaScript函数未返回true
- 如果URL中有任何字符串变体匹配,则返回true
- 如何使以下函数返回true或false
- 使用“in”关键字检查 0 始终返回 true
- hasOwnProperty 在对照父对象属性进行检查时返回 true
- 为什么 isNaN 总是返回 true
- _.数组中的每个查找值都返回 true 或 false.使用下划线 JS
- 错误地返回true
- 为什么asp:LinkButton服务器端事件没有'当clientClick返回true时,t激发
- 阻止表单提交 javascript 为什么有一个明显的错误语句返回 true
- Node js命令器args返回true而不是值
- 如何将html表单与php链接,以便在例如单击按钮时返回true
- 从OnClientClick调用函数时,在JavaScript中返回true