ES2020让代码更优美的运算符 (?.) (??)

ES2020(也称为ES11)引入了两个新的运算符,即可选链运算符(?.)和空值合并运算符(??),以使JavaScript代码更加简洁、简单和易于维护。

可选链运算符(?.)

可选链运算符(?.)可用于在不确定对象是否存在的情况下,可以访问对象或其属性的属性。这是一个非常实用的特性,因为它可以帮助我们避免在访问对象的属性时引发"TypeError"错误,同时也可以保持代码的简洁性。

使用可选链运算符访问嵌套属性

在访问嵌套属性时,可选链运算符非常有用。例如:

const person = {
  name: 'Alice',
  address: {
    city: 'Beijing'
  }
};

const cityName = person.address?.city; // 'Beijing'
const zipCode = person.address?.zipCode; // undefined

在上面的示例中,我们使用可选链运算符(?.)来访问"person"对象中的嵌套属性"address.city"。如果"address"对象不存在,则返回undefined。同样,我们使用可选链运算符访问属性"address.zipCode"也将返回undefined。

使用可选链运算符调用函数

可选链运算符还可以很方便地用于调用可能不存在的方法。例如:

const person = {
  name: 'Alice',
  getAddress() {
    return this.address;
  }
};

const zipCode = person.getAddress()?.zipCode; // undefined

在上面的示例中,我们使用可选链运算符(?.)来调用可能不存在的"getAddress"函数。如果"getAddress"函数存在并返回一个对象,则我们可以访问该对象的属性"zipCode"。否则,将返回undefined。

空值合并运算符(??)

空值合并运算符(??)可用于在变量可能为null或undefined的情况下提供默认值。它可以用于任何类型的值,包括对象、数组和函数。它的作用是检查变量是否为null或undefined,并在不是null或undefined的情况下返回该变量的值。如果变量是null或undefined,则返回默认值。

使用空值合并运算符提供默认值

让我们看看一个具体的示例:

const name = null ?? 'Unknown'; // 'Unknown'

在上面的示例中,"name"的值是null,但是我们使用空值合并运算符(??)提供了一个默认值"Unknown"。因此,"name"的值将是"Unknown"。

使用空值合并运算符提供默认函数

空值合并运算符还可以用于提供默认函数,以便在变量为null或undefined的情况下调用该函数并返回其结果。例如:

function getDefaultName() {
  console.log('Calling getDefaultName');
  return 'Unknown';
}

const name = null ?? getDefaultName(); // Calling getDefaultName
                                      // 'Unknown'

在上面的示例中,"name"的值是null,我们使用空值合并运算符(??)提供了一个默认函数"getDefaultName"。因此,"getDefaultName"将被调用,并返回"Unknown"。这就是为什么我们可以看到"Calling getDefaultName"打印到控制台的原因。

总之,可选链运算符(?.)和空值合并运算符(??)是非常实用的新特性,它们可以帮助我们更轻松地编写简单而且易于维护的JavaScript代码。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ES2020让代码更优美的运算符 (?.) (??) - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • JavaScript如何实现元素全排列实例代码

    让我来为您详细讲解如何通过JavaScript实现元素全排列。 前置知识 在学习元素全排列之前,您需要掌握以下内容: JavaScript基础知识(变量、函数等) 递归算法 实现思路 下面是实现元素全排列的思路: 将数组的第一个元素与其他元素交换位置,得到一个新的数组。 对新数组中的除第一个元素外的剩余元素进行全排列,得到新的排列方式。 将第一个元素与其他元…

    JavaScript 2023年5月28日
    00
  • Javascript Date setUTCHours() 方法

    以下是关于JavaScript Date对象的setUTCHours()方法的完整攻略,包括两个示例说明。 JavaScript Date对象的setUTCHours()方法 JavaScript的setUTCHours()方法设置的UTC小时部分。该方法接受一个整数,表示要的UTC小时。如果该参数超出了JavaScript所能表示的范围,则自动调整为相应的…

    JavaScript 2023年5月11日
    00
  • 7个Python中的隐藏小技巧分享

    下面是“7个Python中的隐藏小技巧分享”的完整攻略: 1. 列表推导式 在Python中,使用列表推导式可以轻松地生成一个列表,从而简化代码。 示例代码如下: # 生成列表中的平方值 squares = [i**2 for i in range(10)] print(squares) 输出结果如下: [0, 1, 4, 9, 16, 25, 36, 49…

    JavaScript 2023年6月11日
    00
  • 详解堆的javascript实现方法

    详解堆的javascript实现方法 堆的定义 堆是一种特殊的树形数据结构,其每一个节点都有一个值,通常所表达的语义是“子节点的值都不小于(或都不大于)父节点的值”。堆可以用数组或者树形表示。堆的某个节点与其子节点之间还有一定的大小关系,因此堆又分为最大堆和最小堆。 堆的属性 最大堆:对于所有节点i的值均不小于它的子节点的值,根节点为最大值; 最小堆:对于所…

    JavaScript 2023年6月10日
    00
  • JavaScript中isPrototypeOf、instanceof和hasOwnProperty函数的用法详解

    JavaScript中isPrototypeOf、instanceof和hasOwnProperty函数的用法详解 在JavaScript中,isPrototypeOf、instanceof和hasOwnProperty函数是非常常用的函数,他们可以帮助我们更好的操作对象和实例。本文将对这三个函数的用法进行详细的讲解。 isPrototypeOf函数 isP…

    JavaScript 2023年6月10日
    00
  • JavaScript装饰器函数(Decorator)实例详解

    JavaScript装饰器函数(Decorator)实例详解 理解装饰器 JavaScript装饰器是ES2016的新提案之一,它是一个函数,可以被用于修改类的行为。 一个装饰器可以被认为是一个具有固定签名(接受不同数量和类型的参数)的函数,它的第一个参数是被装饰的函数或类。 装饰器主要有两种应用:- 类装饰器: 用于修改类的定义- 方法装饰器: 用于修改类…

    JavaScript 2023年5月27日
    00
  • 详解JS WebSocket断开原因和心跳机制

    详解JS WebSocket断开原因和心跳机制 WebSocket 是一个重要的协议,可在浏览器和服务器之间双向通信,且具有较低的延迟和较高的带宽利用率。但是,在实际应用中,WebSocket 经常会由于各种原因而断开连接,为此,我们需要对 WebSocket 的断开原因和心跳机制做详细了解。 WebSocket断开原因 1. 服务器主动关闭 服务器端主动关…

    JavaScript 2023年5月28日
    00
  • 日常收集JS邮箱验证正则表达式

    当我们在开发 web 应用时,经常会有需要验证邮箱地址的情况,其中验证方法之一就是使用正则表达式。下面,我们来讲解一个较为完整的日常收集JS邮箱验证正则表达式的攻略。 确定目标 在进行任何一项技术攻略时,第一步都是要明确目标。对于本文所讲的“日常收集JS邮箱验证正则表达式”的攻略,其目标是收集常用的 JS 邮箱验证正则表达式并进行整合。 收集来源 在确定了目…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部