ES 链式判断运算符 ?. | 空位合并操作符 ?? | CSS inset

488 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

前言

看 Ant Design 源码的时候看到 onCancel?.(e) 这个写法,结合上下文推断是先判断是否存在、再执行的意思。但这是哪来的写法呀?跑去群里一问得知,是 2020 新特性呀!😮 还有个 ??,都是针对值为undefined 或 null 时的场景新增的新特性。这俩可太实用了,我得Mark 一下。

ES: 链式判断运算符 ?. (ES2020新特性)

对于嵌套的对象属性,我们经常需要利用短路逻辑去判断它是否存在,然后就会出现 aa && aa.bb && aa.bb.cc 这样的写法。链式判断运算符?. 就是为了解决这种场景而出现的。

const street = user?.address?.street;
//等价于
const street = user && user.address && user.address.street;

?. 同样适用于方法的调用,即前言中所提及的 onCancel?.(e) 用法。

ES: 非null、非 undefined 判断 ?? (ES2020新特性)

对于上述的例子,当 user.address.street 存在时,返回其值;当其不存在时,返回 undefined。如果想给它一个默认值咋整呢?ES2020 当然注意到这个问题了,我们可以通过空位合并操作符 ?? 提供默认值。

const street = user?.address?.street ?? '下街西4号';
//等价于
const street = user && user.address && user.address.street || '下街西4号';

CSS: inset

这个,我本来是用了第二种写法的,到浏览器看效果的时候,发现 chrome 自动处理为 inset 的写法了 😝

.box{
	position:absolute;
	inset:0px
}
/*等价于*/
.box{
	position:absolute;
	left:0px;
	right:0px;
	top:0px;
	bottom:0px
}

参考链接

ES11来了,还学得动吗?

tc39.es/ecma262

记录日常工作、学习过程中碰到的小小新知识