JavaScript中in操作符检查数组元素存在性的异常问题咨询
问题解释:为什么
2 in [2,3,4,5]返回true,3 in [3,4,5]返回false JavaScript里的in操作符不是用来检查数组元素是否存在的,它的作用是判断某个值是否是对象的属性名(对应数组来说,就是检查是否是数组的索引)。
具体分析:
- 对于
[2,3,4,5],数组的索引是0、1、2、3。当你执行2 in [2,3,4,5]时,数字2会被自动转为字符串"2",操作符实际检查的是数组是否有索引为"2"的属性。这个数组确实存在索引2(对应元素是4),所以返回true——这和数组里的元素2没有任何关系。 - 对于
[3,4,5],数组的索引是0、1、2。执行3 in [3,4,5]时,检查的是数组是否有索引"3",显然这个数组最大索引是2,不存在索引3,所以返回false——同样和数组里的元素3无关。
正确检查数组元素是否存在的方法:
如果要判断数组中是否包含某个元素值,应该用includes()方法:
[3,4,5].includes(3); // 返回true
或者兼容旧环境的indexOf():
[3,4,5].indexOf(3) !== -1; // 返回true
内容的提问来源于stack exchange,提问作者Aissam Ma
相关产品推荐
相关产品推荐

