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

相关推荐
前端 贾公子3 分钟前
vue移动端适配方案 === postcss-px-to-viewport
前端·javascript·html
生骨大头菜43 分钟前
使用python实现相似图片搜索功能,并接入springcloud
开发语言·python·spring cloud·微服务
绝不收费—免费看不了了联系我44 分钟前
Fastapi的单进程响应问题 和 解决方法
开发语言·后端·python·fastapi
GISer_Jing1 小时前
AI营销增长:4大核心能力+前端落地指南
前端·javascript·人工智能
消失的旧时光-19431 小时前
深入理解 Java 线程池(二):ThreadPoolExecutor 执行流程 + 运行状态 + ctl 原理全解析
java·开发语言
咖啡续命又一天1 小时前
Trae CN IDE 中 Python 开发的具体流程和配置总结
开发语言·ide·python·ai编程
4311媒体网1 小时前
帝国cms调用文章内容 二开基本操作
java·开发语言·php
GSDjisidi1 小时前
东京IT软件会社-(株)GSD|多种技术栈募集,高度人才+20分
开发语言·面试·职场和发展
程序员zgh2 小时前
Linux系统常用命令集合
linux·运维·服务器·c语言·开发语言·c++