跳到主要内容

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查找符合条件的第一个元素