1、Array.prototype.includes(value : any) : boolean
# 例如:
> ['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
# 类型数组也将有一个方法includes():
let tarr = Uint8Array.of(12, 5, 3);
console.log(tarr.includes(5)); // true
常见问题
为什么调用includes而不用contains?
后者是最初的选择,但是破坏了网络上的代码(MooTools添加了这个方法Array.prototype)。
为什么调用方法includes不是has?
has用于keys(Map.prototype.has),includes用于elements(String.prototype.includes)。集合的元素可以被看作是键和值,这就是为什么有Set.prototype.has(和否includes)。
2、Exponentiation Operator(求冥运算)
在ES6/2015ES,你能使用Math.pow创建一个短的递归箭头函数
calculateExponent = (base, exponent) => base*((--exponent>1)?calculateExponent(base, exponent):base)
console.log(calculateExponent(7,12) === Math.pow(7,12)) // true
console.log(calculateExponent(2,7) === Math.pow(2,7)) // true
现在在ES7 /ES2016,以数学向导的开发者可以使用更短的语法:
let a = 7 ** 12
let b = 2 ** 7
console.log(a === Math.pow(7,12)) // true
console.log(b === Math.pow(2,7)) // true
# 或者
let a = 7
a **= 12
let b = 2
b **= 7
console.log(a === Math.pow(7,12)) // true
console.log(b === Math.pow(2,7)) // true