ES6的运算符

48 阅读1分钟

链判断运算符

  • 如果读取对象内部的某个属性,往往需要判断一下,属性的上层对象是否存在,比如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) //函数或对象方法是否存在