ECMAScript 2016 新增功能
发布:elantion 日期:2018-07-11 阅读:1975 评论:0
由于之前ES6功能太多,TC39委员会历经艰难,用了6年才发布正式版。为了避免已经定稿的新功能一直被拖延发布,让ECMAScript新功能尽快普及,此后,委员会希望每个版本只增加小量的功能,每年都能发布一版。所以,ES7在这个套路下只新增了两个功能:
- Array.prototype.includes
- 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。