链判断运算符
- 如果读取对象内部的某个属性,往往需要判断一下,属性的上层对象是否存在,比如message.body.user.firstName这个属性;
- 安全的写法是写成下面这样;
const firstName = message.body.user.firstName || 'dafault'
const firstName = (
message && message.body && message.body.user && message.body.user.firstName) || 'default'
- 上面的例子中,firstName属性在对象的第四层,所以需要判断四次,每一层是否有值。
三元运算符 ?:常用于判断对象是否存在
const fooInput = myForm.querySelector('input[name=foo]')
const fooValue = fooInput ? fooInput.value : undefined
- 上面的例子中,必须先判断fooInput是否存在,才能读取fooInput.value
链式判断运算符?.
const firstName = message ?. body ?.user ?.firstName || 'default'
const fooValue = myForm.querySelector('input[name=foo]') ?.value
链判断运算符?.,有三种写法
- obj ?. prop //对象属性是否存在;
- obj ?. [expr] //同上
- func ?. (...args) //函数或对象方法是否存在