JS中的??、?. 、??= 是啥意思

167 阅读1分钟

最近在项目中经常看到有一个属性接问号的写法,虽然大概也能猜出是什么意思,为了深入探究一下,做个记录!

使用该语法的原因:

在项目中我们往往要做很多很多的空值判断进行容错处理,往往伴随着三目运算、与或、if else 来使用,不仅要写很多冗余的代码,后期维护起来也是满屏的 if else 可以说是非常的痛苦了。

可选链(?.)

如果一个值为 null 、或者是 undefined,那么我们再去用点操作符去调用一个方法或者访问一个属性会发生什么?

在这里插入图片描述

在一个变量可能为 null 、或者 undefined 的时候,恰巧我又需要访问这个变量的一个属性,那我们应该这样做!

image.png 只有当 a 存在,同时 a 具有 name 属性的时候,才会把值赋给 b ,否则就会将 undefined 赋值给 b,重要的是不管 a 是否存在,这么做都不会报错。 并且该用法可以链式使用!

空值合并运算符(??)

当我们想判断一个值存在,但是它等于 0 的时候,我们也需要当作它存在,可以这样做

image.png

上面的例子,当 a 除了 undefined、或者 null 之外的任何值,b 都会等于 a ,否则就等于 c 。

空值赋值运算符(??=)

当我们想给一个没有值的变量赋值时,但又不确定他有没有值,就可以这样

image.png

当 ??= 左侧的值为 null、undefined 的时候,才会将右侧变量的值赋值给左侧变量,其他所有值都不会进行赋值。

提问

e 打印的结果是啥?

image.png