JS中不常见的操作符

78 阅读1分钟

1、可选链操作符( ?. )

可选链操作符( ?. )允许读取位于对象链深处的属性的值,而不必了解链中的属性是否存在。 ?.操作符的功能类似于 . 链式操作符,不同之处在于,在引用为空 (null 或者 undefined) 的情况下不会引起错误,该表达式短路返回值为undefined

开发过程中,我们可能需要获取深层次的属性,例如 system.user.addr.province.name。 但是获取 name 这个属性前需要一步步的判断前面的属性是否存在,否则并会报错,代码运行终止

比如

const name = (system && system.user && system.user.addr && system.user.addr.province && system.user.addr.province.name) || 'default';

但是,有了可选链操作符( ?. ),我们可以这样操作

const name = system?.user?.addr?.province?.name || 'default';

选链操作符将会使表达式更短、更简明。在获取一个对象的深层次属性时,如果不能确定哪些属性存在,可选链操作符是很有帮助的。如果属性不存在,会直接返回undefined,而不是报错

2、空值合并操作符(??)

在编写代码时,如果某个属性不为 nullundefined,那么就获取该属性,如果该属性为 null 或 undefined,则取一个默认值
以前没有空值合并操作符(??)时,是这样操作的

const name = userName ? userName : 'default';

也可以这样

download.png

const name =  userName || 'default';

但是 || 的写法存在一定的缺陷,当 userName 为 0 或 false 的时候也会走到 default 的逻辑。所以 ES2020 引入了 ?? 运算符。只有 ?? 左边为 nullundefined 时才返回右边的值:

const userName = false
const name =  userName ?? 'default';  // name = false;