NodeJS中in运算符与includes方法的作用及区别是什么
两个表达式的执行逻辑
1. 'a' in ['a', 'b']
in是JavaScript的原生运算符,核心作用是 判断指定的属性名是否存在于目标对象或其原型链上。- 数组在JS中本质是特殊的对象,它的可枚举自有属性是数字字符串格式的索引(比如上述数组的属性名是
'0'、'1'),还有自带的length属性,以及原型链上的push、includes等方法属性。 - 该语句判断的是字符串
'a'是否是数组的属性名,显然不是,因此返回false。如果改成0 in ['a', 'b']就会返回true,因为0会被转为字符串'0',是数组的合法索引属性。
2. ['a','b'].includes('a')
includes是Array.prototype上挂载的实例方法,核心作用是 判断数组的元素列表中是否包含指定的参数值。- 内部会使用
SameValueZero规则做等值比较,对NaN的识别友好:[NaN].includes(NaN)会返回true,这点和===判断逻辑不同。 - 该语句判断的是数组存储的元素值里有没有
'a',显然存在,因此返回true。
二者核心区别
- 作用目标完全不同:
in针对的是对象的 属性名(键),includes针对的是数组的 元素值。 - 适用场景不同:
in可以用来判断数组是否有某个索引、是否包含某个原型/自有属性;includes仅用来判断数组存储的元素值是否匹配目标。 - 容易混淆的示例参考:
const arr = [2, 3] console.log(2 in arr) // 输出false,因为数组的索引只有0和1,不存在属性名2 console.log(arr.includes(2)) // 输出true,因为数组的元素值包含2
内容的提问来源于stack exchange,提问作者yuvalm2
相关产品推荐
相关产品推荐

