js中?.、??、??=的用法及使用场景

简介: 【8月更文挑战第8天】 js中?.、??、??=的用法及使用场景

在JavaScript中,?.(可选链)、??(空值合并运算符)、??=(空值赋值运算符)是ES2020(也称为ECMAScript 2020)及以后版本中引入的新特性,它们各自在处理可能为nullundefined的变量时提供了更简洁、更安全的操作方式。下面将分别介绍这三个操作符的用法及使用场景,并附上代码演示。

1. 可选链(Optional Chaining)?.

可选链允许你读取位于连接对象链深处的属性的值,而不必显式地验证链中的每一个中间对象是否存在。如果链中的某个对象是nullundefined,表达式短路返回undefined,而不是抛出错误。

使用场景:当你尝试访问深层嵌套对象属性时,但不确定每一层对象是否一定存在。

代码演示

const user = {
   
  name: "John",
  address: {
   
    city: "New York"
  }
};

// 使用可选链访问嵌套属性
console.log(user?.address?.city); // 输出: New York

// 假设 address 属性不存在
user.address = null;
console.log(user?.address?.city); // 输出: undefined(不会抛出错误)

2. 空值合并运算符(Nullish Coalescing Operator)??

空值合并运算符??用于在左侧操作数为nullundefined时,返回其右侧操作数,否则返回左侧操作数。这与逻辑或||操作符不同,因为||会在左侧操作数为假值(如0''falsenullundefinedNaN)时返回右侧操作数。

使用场景:当你需要为可能为nullundefined的变量提供一个默认值时,但不想在变量为其他假值时(如0'')也使用默认值。

代码演示

const firstName = null;
const defaultName = "Guest";

// 使用 ?? 运算符
const displayName = firstName ?? defaultName;
console.log(displayName); // 输出: Guest

// 假设 firstName 是一个空字符串
firstName = "";
const displayNameEmptyString = firstName ?? defaultName;
console.log(displayNameEmptyString); // 输出: ''(因为空字符串是假值但不是null或undefined)

// 使用 || 运算符会得到不同的结果
const displayNameOr = firstName || defaultName;
console.log(displayNameOr); // 输出: Guest(即使 firstName 是空字符串)

3. 空值赋值运算符(Nullish Assignment Operator)??=

空值赋值运算符??=是一种逻辑赋值运算符,它仅在左侧的变量为nullundefined时,才会将其值设置为右侧的表达式。这避免了使用传统的if语句或三元运算符来检查nullundefined并进行赋值。

使用场景:当你想要给变量赋值,但仅当该变量当前为nullundefined时。

代码演示

let count = null;

// 使用 ??= 运算符
count ??= 10;
console.log(count); // 输出: 10

// 再次尝试赋值,此时 count 不是 null 或 undefined
count ??= 20;
console.log(count); // 输出: 10(不会改变值)

// 对比使用传统的 if 语句
let otherCount = null;
if (otherCount === null || otherCount === undefined) {
   
  otherCount = 10;
}
console.log(otherCount); // 输出: 10

以上三个操作符极大地增强了JavaScript在处理可能为nullundefined的变量时的灵活性和安全性。它们使得代码更加简洁、易读,并减少了在访问深层嵌套属性或处理默认值时需要编写的样板代码量。

目录
相关文章
|
3月前
|
数据采集 Web App开发 JavaScript
Puppeteer的高级用法:如何在Node.js中实现复杂的Web Scraping
随着互联网的发展,网页数据抓取已成为数据分析和市场调研的关键手段。Puppeteer是一款由Google开发的无头浏览器工具,可在Node.js环境中模拟用户行为,高效抓取网页数据。本文将介绍如何利用Puppeteer的高级功能,通过设置代理IP、User-Agent和Cookies等技术,实现复杂的Web Scraping任务,并提供示例代码,展示如何使用亿牛云的爬虫代理来提高爬虫的成功率。通过合理配置这些参数,开发者可以有效规避目标网站的反爬机制,提升数据抓取效率。
309 4
Puppeteer的高级用法:如何在Node.js中实现复杂的Web Scraping
|
3月前
|
前端开发 JavaScript
JavaScript 面试系列:如何理解 ES6 中 Generator ?常用使用场景有哪些?
JavaScript 面试系列:如何理解 ES6 中 Generator ?常用使用场景有哪些?
|
1月前
|
JavaScript 前端开发
js中的bind,call,apply方法的区别以及用法
JavaScript中,`bind`、`call`和`apply`均可改变函数的`this`指向并传递参数。其中,`bind`返回一个新函数,不立即执行;`call`和`apply`则立即执行,且`apply`的参数以数组形式传递。三者在改变`this`指向及传参上功能相似,但在执行时机和参数传递方式上有所区别。
26 1
|
1月前
|
JavaScript 前端开发
JS中的构造函数的含义和用法
构造函数是JavaScript中用于创建新对象的特殊函数,通常首字母大写。通过`new`关键字调用构造函数,可以初始化具有相同属性和方法的对象实例,从而实现代码复用。例如,定义一个`Person`构造函数,可以通过传入不同的参数创建多个`Person`对象,每个对象都有自己的属性值。此外,构造函数还可以包含方法,使每个实例都能执行特定的操作。构造函数的静态属性仅能通过构造函数本身访问。ES6引入了`class`语法糖,简化了类的定义和实例化过程。
28 1
|
2月前
|
JavaScript 前端开发
JS try catch用法:异常处理
【10月更文挑战第12天】try/catch` 是 JavaScript 中非常重要的一个特性,它可以帮助我们更好地处理程序中的异常情况,提高程序的可靠性和稳定性。
30 1
|
2月前
|
JavaScript 前端开发
js的math.max的用法
js的math.max的用法
54 6
|
2月前
|
JavaScript
JS中的splice的三种用法(删除,替换,插入)
JS中的splice的三种用法(删除,替换,插入)
267 4
|
3月前
|
数据采集 存储 JavaScript
Puppeteer的高级用法:如何在Node.js中实现复杂的Web Scraping
在现代Web开发中,数据采集尤为重要,尤其在财经领域。本文以“东财股吧”为例,介绍如何使用Puppeteer结合代理IP技术进行高效的数据抓取。Puppeteer是一个强大的Node.js库,支持无头浏览器操作,适用于复杂的数据采集任务。通过设置代理IP、User-Agent及Cookies,可显著提升抓取成功率与效率,并以示例代码展示具体实现过程,为数据分析提供有力支持。
133 2
Puppeteer的高级用法:如何在Node.js中实现复杂的Web Scraping
|
3月前
|
JavaScript 前端开发
JavaScript用法
JavaScript用法
|
2月前
|
前端开发 JavaScript 开发者
深入理解JavaScript中的Promise:用法与最佳实践
【10月更文挑战第8天】深入理解JavaScript中的Promise:用法与最佳实践
93 0