链判断运算符

编程实务中,如果读取对象内部的某个属性,往往需要判断一下该对象是否存在

message = {
    body:{
        user:{
            firstName:"sufeng"
        }
    }
}

 第1种写法:(常规)

const  firstName = message.body.user.firstName;

第2种写法: (&&)

const firstName = (message
  && message.body
  && message.body.user
  && message.body.user.firstName) || 'default';

第3种写法: (三元运算符)

const fooValue = fooInput ? fooInput.value : undefined

第4种写法:(链判断运算符)

const firstName = message?.body?.user?.firstName || 'default';

    上边代码使用了?.运算符,直接在链式调用的时候判断,左侧的对象是否为null或undefined。如果是的,就不再往下运算,而是返回undefined。

    不仅,判断对象属性,也可以判断对象方法,如果存在就立即执行。

iterator.return?.()

  上面代码中,iterator.return如果有定义,就会调用该方法,否则iterator.return直接返回undefined,不再执行?.后面的部分。

   链路运算符满足短路机制

a?.[++x]
// 等同于
a == null ? undefined : a[++x]

上边代码中,如果是undefined或null,那么x不会进行递增运算。也就是说,链判断运算符一旦为真,右侧的表达式就不再求值。

未完,待续......
原文地址:https://www.cnblogs.com/zhishiyv/p/14705333.html