javascript中的可选链操作符

简介: javascript中的可选链操作符

可选链操作符?.可以安全的访问对象中嵌套的属性,即时属性不存在也不会报错

常规情况下,如果我们访问不存在的属性会报错

let user = {}; // a user without "address" property
alert(user.address.street); // Error!

如果确实想访问属性怎么办,可以使用三元表达式

let user = {};
alert(user.address ? user.address.street : undefined);

但是如果属性嵌套比较深,三元表达式将变得难以理解

let user = {}; // user has no address
alert(user.address ? user.address.street ? user.address.street.name : null : null);

为此我们可以使用短路运算符&&来优化

let user = {}; // user has no address
alert( user.address && user.address.street && user.address.street.name ); // undefined (no error)

为了简洁,用可选链语法

let user = {}; // user has no address
alert( user?.address?.street ); // undefined (no error)

如果属性存在正常返回值,如果属性不存在就返回undefined

除了用在属性上,可选链还可以用来调用不存在的方法

let userAdmin = {
  admin() {
    alert("I am admin");
  }
};
let userGuest = {};
userAdmin.admin?.(); // I am admin
userGuest.admin?.(); // nothing (no such method)

也可以用在删除属性上

delete user?.name; // delete user.name if user exists

但是不能用在赋值语句上

let user = null;
user?.name = "John"; // Error, doesn't work
// because it evaluates to undefined = "John"
相关文章
|
2月前
|
JavaScript 前端开发 算法
JavaScript 中算术操作符:全面解读、实战应用与最佳实践
【4月更文挑战第5天】本文探讨JavaScript中的算术操作符,包括加、减、乘、除、求余、自增、自减及复合赋值等,强调理解与熟练运用它们对提升编程效率和代码准确性的重要性。文中通过示例介绍了各种操作符的用法,同时提醒注意数据类型转换、浮点数精度、除以零错误以及利用短路求值优化逻辑等问题。通过学习,读者能更好地掌握算术操作符在不同场景的应用,提升编程技能。
32 1
|
2月前
|
JavaScript 前端开发
探索JavaScript中的New操作符:原理与使用
探索JavaScript中的New操作符:原理与使用
|
2月前
egg.js 24.12sequelize模型-where操作符
egg.js 24.12sequelize模型-where操作符
39 1
egg.js 24.12sequelize模型-where操作符
|
11月前
|
JavaScript
JS new操作符的具体干了什么?
JS new操作符的具体干了什么?
40 1
|
11月前
|
JavaScript 前端开发 索引
JavaScript Day02 操作符及类型转换与流程控制语句 3
JavaScript Day02 操作符及类型转换与流程控制语句 3
50 0
|
11月前
|
Web App开发 JavaScript 前端开发
JavaScript Day02 操作符及类型转换与流程控制语句 1
JavaScript Day02 操作符及类型转换与流程控制语句 1
55 0
|
8月前
|
存储 JavaScript 前端开发
javascript基本语法学习(变量、数据类型、操作符、条件语句、循环)
javascript基本语法学习(变量、数据类型、操作符、条件语句、循环)
|
10月前
|
JavaScript 前端开发
谈谈 JavaScript 中的空值合并操作符 Nullish coalescing operator
谈谈 JavaScript 中的空值合并操作符 Nullish coalescing operator
|
10月前
|
JavaScript
【new操作符做了什么 —— js】
【new操作符做了什么 —— js】
|
11月前
|
JavaScript 前端开发
JavaScript Day02 操作符及类型转换与流程控制语句 2
JavaScript Day02 操作符及类型转换与流程控制语句 2
63 0