迹忆客 专注技术分享

当前位置:主页 > 学无止境 > WEB前端 > JavaScript >

JavaScript 中的 elvis 运算符

作者:迹忆客 最近更新:2024/03/19 浏览次数:

Elvis 运算符是三元运算符的较短版本。这个运算符在 JavaScript 中被称为 nullish 合并运算符,它使用 ?? 表示象征。

仅当表达式值为 nullundefined 时才返回默认值。


在 JavaScript 中实施 nullish 合并运算符 ??

nullish 合并运算符 ?? 在 JavaScript 编程语言的 ECMAScript 2020 版本中引入。

语法:

leftExpr ?? rightExpr

?? 只有当 leftExpr(出现在 ?? 运算符左侧的表达式)是 nullundefined

代码:

let myObj = {name: {firstname: 'Adam', lastname: 'Smith'}};
let val = myObj.name ?? 'Default Value';
console.log(val);

在这里,我们创建了一个名为 myObj 的对象,该对象包含一个名为 name 的属性,该属性包含整个对象作为值。然后我们使用 ?? 运算符。

?? 的左侧运算符,我们有 myObj.name 表达式,而在右边,我们有默认值表达式。只有当 myObj.namenullundefined 时,才会将正确的表达式(即默认值)分配给 val 变量。

myObj.name 表达式包含一些值,它不是 nullundefined。因此,myObj.name 值将存储在 val 变量中,打印 val 变量后,你得到的输出如下。

输出:

nullish 合并运算符 ?? 可以在带有任何数字表达式的单个语句中使用,如下例所示。

代码:

let val = myObj.name ?? myObj.email ?? 'something null or undefined';
console.log(val)

在这个例子中,如果 myobj.namemyObj.email 都是 nullundefined,那么只有 ?? 运算符将返回字符串,或者它将返回第一个表达式中的任何一个的值,该表达式不是 nullundefined

因此,这里只有 myObj.email 表达式是 undefined 而不是 myObj.name,因此,表达式 myObj.name 的值将被返回并存储在 val 变量中。

val 变量现在将包含 name 属性存储的对象,并且该对象将打印在控制台上。

输出:

操作符 ?? 在 IE 和 Opera 浏览器上不被支持。有关浏览器兼容性的更多详细信息,你可以阅读 MDN 文档。

之前 ?? 运算符是在 JavaScript 编程语言中引入的,一种常见的方法是使用逻辑 OR 运算符 (||) 来分配变量的默认值。但是这种分配默认值的方法会产生各种问题。

代码:

let val_1 = undefined || 'Hello!';
let val_2 = false || 'Hello!';
let val_3 = '' || 'Hello!';

console.log(val_1, val_2, val_3);

输出:

Hello! Hello! Hello!

||作为布尔逻辑运算符,如果你将 0''NaN 视为如上所示的有效值,此运算符可能会导致意外行为。

通过用 nullish 合并运算符 ?? 替换 OR 运算符来更改相同的示例会产生不同的结果。

代码:

let val_1 = undefined ?? 'Hello!';
let val_2 = false ?? 'Hello!';
let val_3 = '' ?? 'Hello!';

console.log(val_1, val_2, val_3);

输出:

Hello! false

如你所见,此运算符产生正确的输出。这就是为什么 nullish 合并运算符 ?? 是在 JavaScript 中引入的。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Do you understand JavaScript closures?

发布时间:2025/02/21 浏览次数:108 分类:JavaScript

The function of a closure can be inferred from its name, suggesting that it is related to the concept of scope. A closure itself is a core concept in JavaScript, and being a core concept, it is naturally also a difficult one.

Do you know about the hidden traps in variables in JavaScript?

发布时间:2025/02/21 浏览次数:178 分类:JavaScript

Whether you're just starting to learn JavaScript or have been using it for a long time, I believe you'll encounter some traps related to JavaScript variable scope. The goal is to identify these traps before you fall into them, in order to av

How much do you know about the Prototype Chain?

发布时间:2025/02/21 浏览次数:150 分类:JavaScript

The prototype chain can be considered one of the core features of JavaScript, and certainly one of its more challenging aspects. If you've learned other object-oriented programming languages, you may find it somewhat confusing when you start

用 jQuery 检查复选框是否被选中

发布时间:2024/03/24 浏览次数:102 分类:JavaScript

在本教程中学习 jQuery 检查复选框是否被选中的所有很酷的方法。我们展示了使用直接 DOM 操作、提取 JavaScript 属性的 jQuery 方法以及使用 jQuery 选择器的不同方法。你还将找到许多有用的

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便