ES6 对象扩展 链判断运算符 和 Null 判断运算符
链判断运算符【?.】
如果要读取对象的某个属性,往往需要判断一下该对象是否存在。比如要读取 message.body.user.firstName
,安全的写法是写成下面这样。
const firstName = (message
&& message.body
&& message.body.user
&& message.body.user.firstName) || 'default';
这样的层层判断非常麻烦,因此 ES2020 引入了“链判断运算符”(optional chaining operator)?.
,简化上面的写法。
const firstName = message?.body?.user?.firstName || 'default';
Null 判断运算符【??】
读取对象属性的时候,如果某个属性的值是null
或undefined
,有时候需要为它们指定默认值。常见做法是通过||
运算符指定默认值。
const headerText = response.settings.headerText || 'Hello, world!';
const animationDuration = response.settings.animationDuration || 300;
const showSplashScreen = response.settings.showSplashScreen || true;
上面的三行代码都通过 ||
运算符指定默认值,但是这样写是错的。开发者的原意是,只要属性的值为null
或undefined
,默认值就会生效,但是属性的值如果为空字符串或 false
或 0
,默认值也会生效。
为了避免这种情况,ES2020 引入了一个新的 Null 判断运算符 ??
。它的行为类似 ||
,但是 只有运算符左侧的值为 null
或 undefined
时,才会返回右侧的值。
const headerText = response.settings.headerText ?? 'Hello, world!';
const animationDuration = response.settings.animationDuration ?? 300;
const showSplashScreen = response.settings.showSplashScreen ?? true;
上面代码中,默认值只有在属性值为 null
或 undefined
时,才会生效。
这个运算符的一个目的,就是跟链判断运算符?.
配合使用,为 null
或 undefined
的值设置默认值。
const animationDuration = response.settings?.animationDuration ?? 300;
上面代码中,response.settings
如果是 null
或 undefined
,就会返回默认值300。
这个运算符很适合判断函数参数是否赋值。
function Component(props) {
const enable = props.enabled ?? true;
// …
}
上面代码判断 props
参数的 enabled
属性是否赋值,等同于下面的写法。
function Component(props) {
const {
enabled: enable = true,
} = props;
// …
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: JS 之链判断运算符
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论