ES6-数组的扩展-数组实例的includes()

Array.prototype.includes 方法返回一个布尔值,表示某个数组是否包含给定的值,与字符串的 includes 方法类似。ES6引入了该方法。

 

[1, 2, 3].includes(2)     // true
[1, 2, 3].includes(4)     // false
[1, 2, NaN].includes(NaN) // true

该方法的第二个参数表示搜索的起始位置,默认为0.如果第二个参数为负数,则表示倒数的位置,如果这是它大于数组长度(比如第二个参数为-4,但数组长度为3),则会重置为从0开始。

 

 

[1, 2, 3].includes(3, 3);  // false
[1, 2, 3].includes(3, -1); // true

没有改方法之前我们通常使用数组的 indexOf 方法,检查是否包含某个值。

 

 

if (arr.indexOf(el) !== -1) {
  // ...
}

indexOf 方法有两个缺点,一是不够语义化,它的含义是找到参数值的第一个出现位置,所以要去比较是否不等于-1,表达起来不够直观。二是,它内部使用严格相等运算符(===)进行判断,这会导致对 NaN 的误判。

 

 

[NaN].indexOf(NaN)
// -1

includes 使用的是不一样的判断算法,就没有这个问题。

 

 

[NaN].includes(NaN)
// true

下面代码用来检查当前环境是否支持该方法,如果不支持,部署一个简易的替代版本。

 

 

const contains = (() =>
  Array.prototype.includes
    ? (arr, value) => arr.includes(value)
    : (arr, value) => arr.some(el => el === value)
)();
contains(['foo', 'bar'], 'baz'); // => false

另外,Map 和 Set 数据结构有一个 has 方法,需要注意与 includes 区分。

 

 

  • Map 结构的 has 放,是用来查找键名的,比如 Map.prototype.has(key),WeakMap.prototype.has(key),Reflect.has(target,propertykey)。
  • Set 结构的 has 方法,是用来查找值的,比如 Set.prototype.has(value),WeakSet.prototype.has(value)。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值