ES7的两个新特性
2017-11-29 本文已影响67人
人类进化又没带我
1.Array.prototype.includes (由 Domenic Denicola 和 Rick Waldron 提议的 ECMAScript 2016 新特性 )
2.求幂运算符(**)
概述
> ['a', 'b', 'c'].includes('a')
true
> ['a', 'b', 'c'].includes('d')
false
数组方法 includes
数组方法 includes 有以下签名:
Array.prototype.includes(value : any) : boolean
如果某个数组中包含 value 这个元素,则返回true,否则为false。
> ['a', 'b', 'c'].includes('a')
true
> ['a', 'b', 'c'].includes('d')
false
includes 方法与 indexOf 相似 – 以下两个表达式几乎是等效的
arr.includes(x)
arr.indexOf(x) >= 0
主要的区别在于 includes() 可以查找 NaN,而 indexOf() 不能:
> [NaN].includes(NaN)
true
> [NaN].indexOf(NaN)
-1
includes
不区分+0
和 -0
( 这是几乎所有的JavaScript都是如此工作的):
> [-0].includes(+0)
true
TypedArray 同样有 includes() 方法:
let tarr = Uint8Array.of(12, 5, 3);
console.log(tarr.includes(5)); // true
常见问题
- **为什么这个方法叫做
includes
而不是contains
? 后者(即:contains
)是最初的选择,但是这将破坏了网上现有的代码( 例如:MooTools 将此方法添加到了 Array.prototype 中)。 - 为什么这个方法叫做
includes
而不是has
?
因为has
已被用作关键字了(Map.prototype.has
,includes
用于元素(String.prototype.includes
)。集合的元素既可以被看作是键和也可以被看作值,这就是为什么有一个Set.prototype.has
(而不是includes
)。 -
ES6 方法
String.prototype.includes
适用于字符串,而不是字符。那么对于Array.prototype.includes
方法而言,是不是存在不一致问题?**如果数组的includes
方法和字符串的includes
方法工作机制一样,它应该接受数组,而不是单个元素。但是两个includes
方法与indexOf
方法的例子保持一致;作为一般情况,字符被视为特殊情况和任意长度的字符串。
求幂运算符(**)是由 Rick Waldron 提议的一个 ECMAScript 2016 (ES 7) 新特性。
概述
6 ** 2
36
用于求幂的中缀运算符
**
是一个用于求幂的中缀运算符:
x ** y
下面的代码产生相同的结果:
Math.pow(x, y)
示例:
let squared = 3 ** 2; // 9
let num = 3;
num **= 2;
console.log(num); // 9
青团社招聘:
招聘岗位:高级前端开发工程师P5及以上
坐标杭州市余杭区文一西路1380号金之源大厦11层
简历投递到:hr@qtshe.com || haochen@qtshe.com
职位描述:
1、建设工具、提炼组件、抽象框架,促进前端工程化、服务化,持续提升研发效率,保障线上产品质量
2、构建H5/PC应用基础设施,主导建设前端各种发布/监控等平台,指导落实解决方案
3、持续优化前端页面性能,维护前端代码规范,钻研各种前沿技术和创新交互,增强用户体验、开拓前端能力边界