为何JavaScript中使用in运算符判断数组元素存在返回false?
问题分析与解决
嘿,我来帮你搞清楚这个问题~首先咱们先看你这段代码:
var codeList = [ "ok", "error" ] var msg = { "status": "ok" } console.log(msg.status in codeList) // 返回false
你觉得这个结果不符合预期,但其实这才是正确的行为,不管在Chrome还是iPad上运行,正常情况下都应该返回false——可能你在iPad上的测试场景有特殊情况,或者误解了in操作符的作用?
为什么会返回false?
in操作符的作用是检查**对象的属性名(或者数组的索引)**是否存在,而不是检查数组里的元素值。对于数组codeList来说,它的属性名是0、1(对应数组的索引),而不是"ok"、"error"这些元素值。所以"ok" in codeList相当于检查数组有没有名为"ok"的属性,自然返回false。
正确的检查方式
如果你想判断数组里是否包含某个值,应该用这些方法:
- 现代浏览器推荐用
includes():console.log(codeList.includes(msg.status)) // 返回true - 兼容旧环境可以用
indexOf():console.log(codeList.indexOf(msg.status) !== -1) // 返回true
这样就能得到你想要的判断结果啦~
内容的提问来源于stack exchange,提问作者imgg
相关产品推荐
相关产品推荐

