← 返回目录

Array.prototype.includes / 指数操作符

一、Array.prototype.includes

判断"数组里有没有这个元素",有就 true,没有就 false。

1. 基本对比

以前 · indexOf 绕一圈 现在 · includes 直接问
let arr = [1, 2, 3, 4, 5];
console.log(arr.indexOf(1) !== -1);
// true(indexOf 找不到返回 -1,要 != -1 判断)
let arr = [1, 2, 3, 4, 5];
console.log(arr.includes(1));
// true(直接给布尔值)
console.log(arr.includes(9));
// false

includes 就是直接问"有没有",返回 true / false;以前得用 indexOf 找下标再判断,绕一圈。

2. 对 NaN 更友好

以前 · indexOf 找不到 NaN 现在 · includes 能找到
console.log([NaN].indexOf(NaN));
// -1(找不到)
console.log([NaN].includes(NaN));
// true(能找到)

indexOf 用 === 比较,NaN 和谁都不相等,所以找不到;includes 能正确处理 NaN。

二、指数操作符 **

就是"几次方"。以前要写 Math.pow,现在直接写 **,和加减乘除一样是个运算符。

1. 基本对比

以前 · Math.pow 现在 · **
console.log(Math.pow(2, 10));
// 1024(2 的 10 次方)
console.log(Math.pow(3, 3));
// 27(3 的 3 次方)
console.log(2 ** 10);
// 1024
console.log(3 ** 3);
// 27

2 ** 10 就是 2 的 10 次方,和 Math.pow(2, 10) 结果一样,写起来短。

2. 其他写法

console.log(2 ** 0.5);
// 1.414...(平方根,2 的 0.5 次方)

let x = 3;
x **= 2;          // 等价于 x = x ** 2
console.log(x);
// 9
	

**= 是"自己等于自己的几次方",和 += 一个套路。

一句话:includes 是"数组里有没有",** 是乘方运算符,都让代码更短、更直白。