如何使用 ES12 中的可选链运算符处理 undefined 和 null

在前端开发中,我们经常会处理对象的属性或方法,但是当访问一个未定义的属性时,就会出现 undefined,而在链式调用中,如果其中一个对象为 null 或 undefined,则程序将崩溃。这时 ES12 中的可选链运算符就派上了用场。

可选链运算符介绍

可选链运算符(Optional chaining)用于在链式调用的过程中,如果遇到 null 或 undefined,就不会继续执行下去,而不是报错停止运行。可选链运算符为 ?.。

语法:

obj?.prop    // 如果 obj 存在,返回 obj.prop;否则返回 undefined

除了点运算符,当使用其他运算符时,需要加上圆括号。

obj?.[expr]    // 如果 obj 存在,返回 obj[expr],否则返回 undefined
func?.(args)   // 如果 func 存在,调用 func(args),否则返回 undefined

使用可选链运算符处理 undefined 和 null

在实际项目中,当访问对象的深层属性时,可选链运算符可以大大减少代码的复杂度和冗余。下面通过一个例子来说明如何使用可选链运算符处理 undefined 和 null。

// 定义一个对象
const user = {
  name: 'Tom',
  age: 18,
  address: {
    province: 'Guangdong',
    city: 'Guangzhou',
    street: 'Road 1',
    zipcode: '123456'
  }
}

// 访问属性
console.log(user.name);                  // 输出:Tom
console.log(user.address.province);      // 输出:Guangdong

以上代码中,我们可以通过点运算符访问属性和深层属性。但是当我们访问一个不存在的属性时,就会出现 undefined。

console.log(user.email);                 // 输出:undefined
console.log(user.address.postcode);      // 输出:TypeError: Cannot read property 'postcode' of undefined

当我们访问对象的嵌套属性时,需要判断每个访问的属性是否存在。使用可选链运算符可以简化代码的编写,避免代码中充斥着大量的 if 判断语句。

console.log(user?.email);                            // 输出:undefined
console.log(user.address?.postcode);                // 输出:undefined
console.log(user.address?.details?.postcode);       // 输出:undefined

以上代码中,当访问不存在的属性时,可选链运算符会自动返回 undefined,不会报错。

使用可选链运算符替换 if 判断语句

在一些复杂的场景中,我们可能需要使用 if 判断语句来保证程序的正常运行。下面通过一个例子来说明如何使用可选链运算符替换 if 判断语句。

// 定义一个对象
const user = {
  name: 'Tom',
  age: 18,
  address: {
    province: 'Guangdong',
    city: 'Guangzhou',
    street: 'Road 1',
    zipcode: '123456'
  }
}

// 判断属性是否存在(传统方法)
if (user && user.address && user.address.postcode) {
  console.log(user.address.postcode);
} else {
  console.log('postcode not exist');
}

// 判断属性是否存在(使用可选链运算符)
console.log(user?.address?.postcode ?? 'postcode not exist');

以上代码中,使用可选链运算符可以大大简化代码的编写,减少了冗余的 if 判断语句。

总结

  • 可选链运算符可以有效地处理 undefined 和 null;
  • 使用可选链运算符可以大大简化代码的编写,减少冗余的 if 判断语句;
  • 可选链运算符在处理对象的深层属性时十分有用。

以上是关于如何使用 ES12 中的可选链运算符处理 undefined 和 null的介绍和示例,希望对你有所帮助。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/659e5554add4f0e0ff752e47


纠错反馈