可选链操作符 ?.
概念: 可选链操作符 ( ?. ) 允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。?. 操作符的功能类似于 . 链式操作符,不同之处在于,在引用为空 (nullish ) (null 或者 undefined) 的情况下不会引起错误,该表达式短路返回值是 undefined。与函数调用一起使用时,如果给定的函数不存在,则返回 undefined
let a = undefined
let b = a ?.name
// b = a.name 程序会报错崩溃,因为undefined是不允许.运算的
// b = undefined
// 会先去判断b是否是undefined/null, 再去判断是否有name值,如果判断失败直接返回undefined
// 而不会程序报错
空值合并运算符 ??
概念: 空值合并操作符(??)是一个逻辑操作符,当左侧的操作数为 null 或者 undefined 时,返回其右侧操作数,否则返回左侧操作数
let a = undefined ?? 'default name'
// a = 'default name'
逻辑或赋值 ||=
概念: 逻辑或正义(x ||= y)只是在x为falsy(虚值)时赋值
虚值: false, undefined, null, NaN, ‘’, 0
let a = ''
a ||= 'hello word'
console(a)
a ||= '你好'
// 'hello word'
// 'hello word'
逻辑与赋值 &&=
概念: 逻辑与赋值 ( x &&= y) 仅在 x 是 truthy(真值)时对其赋值
truthy: 除虚值以外的所有值 (见逻辑或赋值)
let a = 1
let b = 0
a &&= 2
b &&= 3
// a=2,b=0
逻辑空属性 ??=
概念: 逻辑空赋值运算符 (x ??= y) 仅在 x 是 nullish (null 或 undefined) 时对其赋值
let a = {
name: '小明'
}
a.name ??= '小红'
a.age ??= 25
console.log(a.name)
console.log(a.age)
// 小明 25