includes能直接判断数组是否包含某值,返回布尔值;对基本类型用严格相等语义,但可正确识别NaN;不支持对象/数组引用比较;支持fromIndex参数(含负数);稀疏数组中hole不等于undefined。

includes 能直接判断数组里有没有某个值吗
能,includes 就是干这个的——它返回 true 或 false,不找下标、不查次数,只回答“有没有”。比 indexOf !== -1 直观,也比 some(x => x === target) 少写一堆括号和箭头。
用 includes 判断基本类型值要注意什么
对 string、number、boolean 这类基本类型,includes 用的是严格相等(===)语义,但有个例外:它能正确识别 NaN,而 === 不能。
-
[NaN].includes(NaN)→true(✅ 正确) -
NaN === NaN→false(❌ 原生行为) - 字符串区分大小写:
['a', 'B'].includes('b')→false - 对象或数组不行:
[{x:1}].includes({x:1})→false,因为引用不同
includes 的第二个参数 fromIndex 怎么用
它指定从哪个索引开始往后搜,默认是 0。传负数时,会从末尾往前算位置(类似 slice),但搜索方向仍是向前(即从该位置到数组末尾)。
-
[1,2,3,2,4].includes(2, 2)→true(从索引 2 开始找,找到后面的2) -
[1,2,3,2,4].includes(2, -2)→true(-2对应索引 3,从那里开始搜到末尾,刚好是2) -
[1,2,3].includes(1, 1)→false(从索引 1 开始,跳过了第一个1)
includes 在稀疏数组或有 hole 的数组里表现如何
它会把空位(hole)当作 undefined 处理,但不会匹配你传进去的 undefined ——除非那个位置显式存了 undefined。
-
[1, , 3].includes(undefined)→false(中间是 hole,不是值) -
[1, undefined, 3].includes(undefined)→true(显式赋值了) -
new Array(3).includes(undefined)→false(全是 hole,没值)
这点容易误判,尤其从后端拿到带空字段的数组时,得先确认是 null、undefined 还是 hole。

















