跳到主要内容

相比于 ES6 的重大变革,ES7 只引进了两个主要新特性和一些小的改进。

一、 数组 includes() 方法

Array.prototype.includes() 用于判断数组是否包含某个指定的元素,返回布尔值 (true/false ),解决了传统的 indexOf() 的局限性

  • array.includes(valueToFind, fromIndex)
    • valueToFind:要查找的元素
    • fromIndex:开始查找的下表,默认值为 0
  • indexOf() 的区别
    • indexOf() 返回元素的索引,includes() 直接返回布尔值,在仅简单判定数组中是否包含某元素下语义更清晰
    • includes() 能正确识别 NaN (而 indexOf()NaN 会返回 -1,因为 NaN !== NaN
    • includes()+0-0 视为相等

二、 指数运算符(exponentiation operator)

引入 ** 运算符,用于实现幂运算,代替传统的 Math.pow() 方法,语法更简单。

语法为:基数 ** 指数

console.log(2 ** 3); // 8
console.log(2 ** 3); // 8
console.log(2 ** 3); // 8
console.log(2 ** 3); // 8

console.log(2 ** (3 ** 2)); // 512(Javascript 的计算是从右到左)

let a = 2;
a **= 3;
console.log(a); // 8
  • Math.pow(基数, 指数) 功能一致,但写法更简单
  • 支持结合律: a ** b ** c 等价于 a ** (b ** c)
  • 支持赋值运算符结合:**=

三、 其他

ES2016 还包含一些对规范的细微调整和澄清,主要面向 JavaScript 引擎的实现者,对开发者影响较小:

  • Function.prototype.toString() 进行了标准化,要求返回函数的完成源码(包括注释和空格)
  • Array.prototype.sort() 的稳定性进行了规范(不同的引擎实现区域一致)
  • 修正了一些边远情况的语法和语义的定义