ECMAScript 2016 新增功能

发布:elantion 日期:2018-07-11 阅读:1380 评论:0

由于之前ES6功能太多,TC39委员会历经艰难,用了6年才发布正式版。为了避免已经定稿的新功能一直被拖延发布,让ECMAScript新功能尽快普及,此后,委员会希望每个版本只增加小量的功能,每年都能发布一版。所以,ES7在这个套路下只新增了两个功能:

  1. Array.prototype.includes
  2. Exponentiation operator( ** )

Array.prototype.includes

这个新增的函数类似原有的indexOf,只是在原来的基础上改善了逻辑,让查找数组内元素更加符合预期。

['a', 'b', 'c'].includes('a')
// true
['a', 'b', 'c'].includes('d')
// false

与indexOf非常相似,下面两行代码几乎是一样的:

arr.includes(x);
arr.indexOf(x) >= 0;

最大的不同是在查找NaN结果上,includes更加符合预期:

[NaN].includes(NaN);
// true
[NaN].indexOf(NaN);
// -1

很多人不知道,其实JavaScript是有两个零的,一个是正零+0,一个是负零-0,这是由于计算精度的问题而产生的。由于JavaScript不希望大家去区分这两个零,在绝大部分情况下都是相等的,例如:+0 === -0,但indexOf却可以区分这两个零,includes不区分:

[1, -0].indexOf(-0);
// 1
[1, -0].includes(+0);
// true

TypeArray都有includes函数:

let tarr = Uint8Array.of(12, 5, 3);
console.log(tarr.includes(5)); // true

想了解更多相关信息请阅读以下链接:
TC39 Proposel: https://github.com/tc39/Array.prototype.includes/

Exponentiation Operator( ** )

之前求幕是需要Math.pow函数,现在有了**操作符,写起来会更加优雅直观。

6 ** 2;
// 36

跟使用Math.pow函数是一样的:

Math.pow(6, 2);
// 36

跟求合、乘法等操作符的写法是一样的:

let squared = 3 ** 2; // 9

let num = 3;
num **= 2;
console.log(num); // 9

总结

这个版本没有激动人心的新功能,这两个新增的功能对大部分人都是无关痛痒,只是改进JavaScript原本设计的问题。能看到JavaScript持续改善和进步,还是让人觉得很高兴的,加油TC39。