有了可选链式调用 ,你只要这样写就可以做同样的事情:

let nestedProp = obj?.first?.second;

如果obj或obj.first是null/undefined,表达式将会短路计算直接返回undefined。

三、空位合并操作符

我们在开发过程中,经常会遇到这样场景:变量如果是空值,则就使用默认值,我们是这样实现的:

let c = a ? a : b // 方式1

let c = a || b // 方式2

这两种方式有个明显的弊端,它都会覆盖所有的假值,如(0, ‘’, false),这些值可能是在某些情况下有效的输入。

为了解决这个问题,有人提议创建一个“nullish”合并运算符,用 ?? 表示。有了它,我们仅在第一项为 null 或 undefined 时设置默认值。

let c = a ?? b;

// 等价于let c = a !== undefined && a !== null ? a : b;

例如有以下代码:

const x = null;

const y = x ?? 500;

console.log(y); // 500

const n = 0

const m = n ?? 9000;

console.log(m) // 0

四、BigInt

JS在Math上一直很糟糕的原因之一是,无法精确表示大于的数字2 ^ 53,这使得处理相当大的数字变得非常困难。

1234567890123456789 * 123;

// -》 151851850485185200000 // 计算结果丢失精度

幸运的是,BigInt(大整数)就是来解决这个问题。你可以在BigInt上使用与普通数字相同的运算符,例如 +, -, /, *, %等等。

创建 BigInt 类型的值也非常简单,只需要在数字后面加上 n 即可。例如,123 变为 123n。也可以使用全局方法 BigInt(value) 转化,入参 value 为数字或数字字符串。

const aNumber = 111;

const aBigInt = BigInt(aNumber);

aBigInt === 111n // true

typeof aBigInt === ‘bigint’ // true

typeof 111 // “number”

typeof 111n // “bigint”