es7新增语法详解

322 阅读2分钟

前言

es7新增语法详解。

一.includes()方法

1.includes是什么?

includes(value,index) 方法用来检测一个数组是否包含一个指定的值,value为要查找的值,index 为表示从索引 index开始查找,默认为0,如果是负值,表示从末尾开始往前 |index| 索引开始往后查找。

2.基本语法

['小红','小绿','小紫'].includes('小红') // --true
['小红','小绿','小紫'].includes('大红') // --false
['小红','小绿','小紫'].includes('小绿',1) // 从索引开始--true
['小红','小绿','小紫'].includes('小红',1) // 从索引开始--false

3.和es6中的indexOf比较

(1) 返回类型不同

includes返回布尔值,找到返回true,未找到返回false; indexOf返回索引值,找到返回对应索引值,未找到返回-1。

(2) 等效用法

适用于数组去重的判断场景使用。

['小红','小绿','小紫'].includes('小红') //--true
['小红','小绿','小紫'].indexOf('小红')>-1 //--true
(3) 区别用法

includes能识别NaN,indexOf不能识别NaN

["a", "b", NaN, "d"].includes(NaN) // true
["a", "b", NaN, "d"].includes(NaN) // -1

判断稀疏数组结果不同,indexOf 认为稀疏数组省略掉的值是不存在的,但 includes认为是undefined

[,,].indexOf(undefined) // -1
[,,].includes(undefined) // true

4.注意点

(1) 查找字符串时区分大小写
["a", "b", "c", "d"].includes("A") // false
(2) 无法判断复杂的类型,比如二维数组,对象数组等
[["a", "b"], "c", "d"].includes(["a", "b"]) // false

因为 includes() 方法在比较对象时使用的是严格相等运算符(===),而不是按对象属性逐个匹配的方式。 如果想要检查数组中是否包含某个对象,可以使用**some()**方法,如下:

let users = [
  { name: '小红', age: 23 },
  { name: '小绿', age: 25 },
  { name: '小紫', age: 35 }
]
let obj = { name: '小绿', age: 25 }
let isObjIncluded = obj.some(u => u.name === user.name && u.age === user.age)

console.log(isObjIncluded); //true
(3) 如果数组中有多个相同的元素,includes()方法只会返回第一个匹配到的元素。
(4) includes() 方法并不兼容所有的浏览器。如果需要在不支持此方法的浏览器中使用该方法,可以使用以下 polyfill 代替实现。

查询兼容的网站

在这里插入图片描述

注意:红色代表不支持,绿色代表支持。结果发现所有的IE浏览器版本都不兼容。

5.总结

对于想知道一个数组是否包含某个值时,建议优先使用includes()方法; 对于想知道一个值在数组中的位置时,只能使用indexOf()方法。 个人在项目中比较多使用到是用于数组去重,如果对浏览器兼容性有要求的话,建议自己原创一个原始方法。

二.幂运算符

在 ES7 中引入指数运算符「**」,用来实现幂运算,功能与 Math.pow 结果相同。

比如我们想实现2的n次方:

console.log(2 ** n); // 输出2的n次方结果

转载请注明原作者 不喜勿喷,欢迎补充~~