ECMAScript 2016 新特性
1. JavaScript 指数运算 (**) 和 指数运算符 (**=)
在 ES7 中引入了指数运算符,具有与 Math.pow(..)
等效的计算结果
a ** b 指数运算符,它与 Math.pow(a, b)
相同
// x ** y
let squared = 2 ** 2
// same as: 2 * 2
let cubed = 2 ** 3
// same as: 2 * 2 * 2
我们看下幂操作符的基本使用:
const squared = 3 ** 2; // 9
let num = 3;
num **= 2;
console.log(num); // 9
function dist(x, y) {
return Math.sqrt(x**2 + y**2);
}
幂操作符的优先级是非常高的, ** > * > +
> 2**2 * 2
8
> 2 ** (2*2)
16
2. JavaScript Array includes()
includes()
函数用来判断一个数组是否包含一个指定的值
includes
查找一个值是否在数组中includes
还可以接收两个参数- 第一个表示要查找的值
- 第二个表示从数组第 N 个元素开始查找
[1, 2, 3].includes(3) //true
['a', 'b', 'c'].includes('d') //false
[1, 2, 3].includes(3, 2) // true
[1, 2, 3].includes(3, 3) // false
[1, 2, 3].includes(3, -1) // true
[1, 2, NaN].includes(NaN) // true
> ['a', 'b', 'c'].includes('a') // true
> ['a', 'b', 'c'].includes('d') // false
看一下 includes
的定义:
Array.prototype.includes(value : any) : boolean
数组 includes()
方法,用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回 true, 否则返回 false
if (arr.indexOf(el) !== -1) {
...
}
// 等价于
if (arr.includes(el)) {
...
}
他们的区别在于, includes
可以查找 NaN
, 而 indexOf 不能:
> [NaN].includes(NaN)
true
> [NaN].indexOf(NaN)
-1
另外 include
是不区分 +0
和 -0
的:
> [-0].includes(+0)
true
如何比较?
assert([1, 2, 3].includes(2) === true);
assert([1, 2, 3].includes(4) === false);
assert([1, 2, NaN].includes(NaN) === true); // 证明不是通过 == 或者 ===
assert([1, 2, -0].includes(+0) === true); // 证明不是通过Object.is() SameValue
assert([1, 2, +0].includes(-0) === true);
assert(["a", "b", "c"].includes("a") === true);
assert(["a", "b", "c"].includes("a", 1) === false);
题外话
includes()
的出现, 大大优化了 array.indexof(element) !== -1
的判断数据 是否存在的直观方式
方法 | 功能 |
---|---|
some | 判断是否有一个元素符合条件 |
every | 判断是否所有元素符合条件 |
findIndex | 查找符合条件的第一个元素下标 |
find | 查找符合条件的第一个元素 |