ES6中引入的链判断运算符[?.]与null安全运算符??是如何诞生的?
- 内容介绍
- 文章标签
- 相关推荐
本文共计799个文字,预计阅读时间需要4分钟。
指针运算符 ** 和 console.log() 的使用示例:
console.log(2 ** 2); // 输出 4console.log(2 ** 3); // 输出 8console.log(2 ** 4); // 输出 16
链判断运算符的诞生(?):
在实际编程中,如果需要读取对象内部的某个属性,常常需要链判断。例如,属性的上一层对象是:
属性的上一层对象是
指数运算符 **console.log(2 ** 2 ) //4
console.log(2 ** 3 ) //8
console.log(2 ** 4) //16
链判断运算符的诞生(?.)
在实际编程中,
如果读取对象内部的某个属性,往往需要判断一下。
属性的上层对象是否存在。比如,读取 message.body.user.firstName这个属性,安全的写法是写成下面这样。
let message={
body:{
user:{
firstName:''
}
}
}
// 错误的写法;因为这message.body这个值可能没有,会导致报错
const firstName = message.body.user.firstName || 'default';
// 正确的写法
const firstName = (message
&& message.body
&& message.body.user
&& message.body.user.firstName) || 'default';
有的小伙伴可能会觉得这样会很麻烦,怎么会处理这个问题了。
本文共计799个文字,预计阅读时间需要4分钟。
指针运算符 ** 和 console.log() 的使用示例:
console.log(2 ** 2); // 输出 4console.log(2 ** 3); // 输出 8console.log(2 ** 4); // 输出 16
链判断运算符的诞生(?):
在实际编程中,如果需要读取对象内部的某个属性,常常需要链判断。例如,属性的上一层对象是:
属性的上一层对象是
指数运算符 **console.log(2 ** 2 ) //4
console.log(2 ** 3 ) //8
console.log(2 ** 4) //16
链判断运算符的诞生(?.)
在实际编程中,
如果读取对象内部的某个属性,往往需要判断一下。
属性的上层对象是否存在。比如,读取 message.body.user.firstName这个属性,安全的写法是写成下面这样。
let message={
body:{
user:{
firstName:''
}
}
}
// 错误的写法;因为这message.body这个值可能没有,会导致报错
const firstName = message.body.user.firstName || 'default';
// 正确的写法
const firstName = (message
&& message.body
&& message.body.user
&& message.body.user.firstName) || 'default';
有的小伙伴可能会觉得这样会很麻烦,怎么会处理这个问题了。

![ES6中引入的链判断运算符[?.]与null安全运算符??是如何诞生的?](/imgrand/a2ROF91Q.webp)