写代码时看到一个奇怪的东东
this.tableData.push(new Array(this.tableData[0]?.length || 1).fill(' '))
其中一个奇奇怪怪的?.看懂不懂。看不懂怎么办呢,当然是百度一下啦
ES2020 新语法:可选链操作符( ?. )
obj?.prop // 获取obj中的属性
obj?.[expr] // 根据obj是否存在来执行[]内的表达式
arr?.[index] // 获取arr中的元素
func?.(args) // 根据func是否存在来执行函数
日常开发中,当需要访问嵌套在对象内部好几层的属性时,可能就会得到臭名昭著的错误Uncaught TypeError: Cannot read property...,这种错误,让整段程序运行中止。
let obj = {
name: 'jone',
age:16,
school: {
name: '哈佛大学',
address: '剑桥',
}
}
let schoolName = obj && obj.school && obj.school.name // 哈佛大学
let homeName = obj.home.address // Uncaught TypeError: Cannot read property 'address' of undefined
let homeName = obj && obj.home && obj.home.address // undefined
于是,你就要修改你的代码来处理来处理属性链中每一个可能的undefined对象,比如:
let homeName = obj.home?.address ?? '哈佛大学'. // 哈佛大学
兄弟们很好用啊,可以和后端预定参数是再也不怕他提再等一下还没发
只要定好参数直接 可选链操作符( ?. ) 接 空值合并运算符(??) 想要什么预设值直接取,再也不怕报undefined。
兼容性问题
差不多可以满足绝大部分的浏览器需求了,如果不需要兼容IE放心大胆的使用。
除此以外还有一些好玩的运算符也可以试着使用
//||= 逻辑 OR 赋值 ( x ||= y) 运算符仅在x为假时赋值。
const a = { duration: 50, title: '' };
a.duration ||= 10;
console.log(a.duration);
// expected output: 50
a.title ||= 'title is empty.';
console.log(a.title);
// expected output: "title is empty"