【第3416期】JavaScript的??=运算符:轻松实现默认值

科技   2024-11-14 08:02   福建  

前言

JavaScript 的 ??= 运算符是一个在 ECMAScript 2021 (ES12) 中引入的逻辑赋值运算符,它可以优雅地处理变量的默认值,只在变量为 null 或 undefined 时进行赋值。今日前端早读课文章由 @飘飘翻译分享。

正文从这开始~~

使用 JavaScript 中的 ??= 运算符优雅地处理 null 和 undefined 值的指南

空值合并赋值操作符 ??= 是 JavaScript 中的一个较新的概念。它在 ECMAScript 2021 (ES12) 中作为逻辑赋值运算符提案的一部分正式引入。

将 ??= 视为你的变量的智能守护者。只在当前值为 null 或 undefined 时,它才会赋予一个新的值。

 // Old way (pre-2021)
if (user.name === null || user.name === undefined) {
user.name = 'Anonymous';
}

// Or using the nullish coalescing operator (??)
user.name = user.name ?? 'Anonymous';

// New way (ES2021 and later)
user.name ??= 'Anonymous';

当你编写类似 user.name ??= 'Anonymous' 这样的代码时,编译器首先检查 user.name 是否为 null 或 undefined 。

如果是 null 或 undefined ,只有在这种情况下才会分配 'Anonymous' — 如果 user.name 已经有其他任何值 - 甚至是空字符串或 0 - 它保持不变。

为什么 ??= 比其他选择更优?

在引入 ??= 之前,我们有几种处理默认值的方法,但每种方法都有其缺点。以下是这些方法的比较:

 // Using if statement - verbose and repetitive
if (user.name === null || user.name === undefined) {
user.name = 'Anonymous';
}

// Using || operator - catches too much
user.name = user.name || 'Anonymous'; // Replaces '', 0, false too

// Using ternary - gets messy with longer expressions
user.name = user.name === null || user.name === undefined
? 'Anonymous'
: user.name;

// Using ??= - clean and precise
user.name ??= 'Anonymous';

??= 操作符为我们提供了以前没有的精度。它仅在确实没有任何值时才触发,因此非常适合零、空字符串或 false 为有效数据的情况下使用。

 let score = 0;
score ??= 100; // Keeps 0

let tag = '';
tag ??= 'default'; // Keeps empty string

let active = false;
active ??= true; // Keeps false

这种精度有助于防止在使用更广泛的检查时可能出现的错误。在构建用户界面或处理表单数据时,你通常希望保留假值,而不是用默认值替换它们。

关于本文
译者:@飘飘
作者:@Trevor I. Lasn
原文:https://www.trevorlasn.com/blog/javascript-nullish-coalescing-assignment-operator

这期前端早读课
对你有帮助,帮” 
 “一下,
期待下一期,帮”
 在看” 一下 。

前端早读课
探索前端技术,体验产品的情感, 项目思考的指引,塑造独立开发者的未来。
 最新文章