JavaScript中的可选链操作符

在JavaScript中,?. 被称为可选链操作符(Optional Chaining Operator)。它允许你访问对象的深层属性而不必显式地检查每一层属性是否存在。如果链中的某个属性不存在,表达式将短路返回undefined,而不是抛出一个TypeError异常。

例如,假设你有一个对象a,它可能包含一个属性b,而b又可能包含属性c

javascript 复制代码
const a = {
  b: {
    c: 1
  }
};

使用传统的访问方式,你需要这样检查属性:

javascript 复制代码
const c = a && a.b && a.b.c;

但是使用可选链操作符,你可以简化为:

javascript 复制代码
const c = a?.b?.c;

如果aa.ba.b.c中的任何一个不存在,c将被赋值为undefined,而不是抛出错误。这使得代码更加简洁和安全。可选链操作符也可以与函数调用和new操作符一起使用:

javascript 复制代码
const result = a?.b?.doSomething();
const instance = new a?.b?.MyClass();

如果a.ba.b.MyClass不存在,resultinstance将分别是undefinedTypeError(因为new操作符需要一个有效的构造函数)。

面试题:

javascript 复制代码
const person = {
	firstName: "Lydia",
	lastName: "Hallie",
	pet: {
		name: "Mara",
		breed: "Dutch Tulip Hound"
	},
	getFullName() {
		return `${this.firstName} ${this.lastName}`;
	}
};

console.log(person.pet?.name);
console.log(person.pet?.family?.name);
console.log(person.getFullName?.());
console.log(person.getLastName?.());

输出是:Mara undefined Lydia Hallie undefined

相关推荐
一 乐6 小时前
婚纱摄影网站|基于ssm + vue婚纱摄影网站系统(源码+数据库+文档)
前端·javascript·数据库·vue.js·spring boot·后端
Boilermaker19926 小时前
[Java 并发编程] Synchronized 锁升级
java·开发语言
MM_MS6 小时前
Halcon变量控制类型、数据类型转换、字符串格式化、元组操作
开发语言·人工智能·深度学习·算法·目标检测·计算机视觉·视觉检测
꧁Q༒ོγ꧂7 小时前
LaTeX 语法入门指南
开发语言·latex
njsgcs7 小时前
ue python二次开发启动教程+ 导入fbx到指定文件夹
开发语言·python·unreal engine·ue
alonewolf_997 小时前
JDK17新特性全面解析:从语法革新到模块化革命
java·开发语言·jvm·jdk
古城小栈7 小时前
Rust 迭代器产出的引用层数——分水岭
开发语言·rust
ghie90908 小时前
基于MATLAB的TLBO算法优化实现与改进
开发语言·算法·matlab
恋爱绝缘体18 小时前
2020重学C++重构你的C++知识体系
java·开发语言·c++·算法·junit
wuk9988 小时前
VSC优化算法MATLAB实现
开发语言·算法·matlab