1.可选链操作符
可选链操作符 ?.
可以按照操作符之前的属性是否有效,链式读取对象的属性或者使整个对象链返回 undefined
。?.
运算符的作用与 .
运算符类似,不同之处在于,如果对象链上的引用是 nullish (null
或者 undefined
),.
操作符会抛出一个错误,而 ?.
操作符则会按照短路计算的方式进行处理,返回 undefined
。可选链操作符也可用于函数调用,如果操作符前的函数不存在,也将会返回 undefined
。
当尝试访问可能不存在的对象属性时,可选链操作符将会使表达式更短、更简明。在探索一个对象的内容时,如果不能确定哪些属性必定存在,可选链操作符也是很有帮助的。
const adventurer = { name: 'Alice', cat: { name: 'Dinah' } }; const dogName = adventurer.dog?.name; console.log(dogName); // expected output: undefined console.log(adventurer.someNonExistentMethod?.()); // expected output: undefined
输出结果:
2.空值合并运算符
空值合并操作符(??
)是一个逻辑操作符,当左侧的表达式结果为 null
或者 undefined
时,其返回右侧表达式的结果,否则返回左侧表达式的结果。
与逻辑或操作符(||
)不同,逻辑或操作符会在左侧操作数为假值时返回右侧操作数。也就是说,如果使用 ||
来为某些变量设置默认值,可能会遇到意料之外的行为。比如为假值(例如,''
或 0
)时。
const foo = null ?? 'default string'; console.log(foo); // expected output: "default string" const baz = 0 ?? 42; console.log(baz); // expected output: 0 输出结果: