前端小知识之??= 操作符更简洁的默认值处理方式

 更新时间:2024年11月29日 11:00:04   作者:前端达人  
这篇文章主要介绍了前端小知识之??= 操作符更简洁的默认值处理方式的相关资料,??=操作符是JavaScript中用于设置默认值的新操作符,它仅在变量值为null或undefined时才赋值,需要的朋友可以参考下

前言

在日常开发中,我们经常需要为变量设置默认值,比如用户配置、表单初始值等。JavaScript 在 ECMAScript 2021(ES12)中引入的 ??= 操作符提供了一种更简洁的方案。作为“逻辑赋值操作符”的一部分,它不仅能让代码更清晰,还能避免误替换掉有效数据。

什么是 ??= 操作符?

简单来说,??= 是一个“智能守护者”:仅当变量的值为 null 或 undefined 时才会赋予它一个默认值,而不会影响 0false'' 等有效的“假值”。

使用对比

先看看传统做法和 ??= 的对比:

// 传统方法:通过 if 语句检查和赋值
if (user.name === null || user.name === undefined) {
  user.name = '访客';
}

// 使用 ??= 简化后的代码
user.name ??= '访客';

在这里,user.name ??= '访客' 只会在 user.name 为 null 或 undefined 时赋值为 '访客',否则保留现有值。相比传统写法,代码简洁了许多,也更清晰。

??= 的典型业务应用场景

在实际业务中,我们经常需要处理默认值赋值的场景,在社交平台中,未设置用户名的用户可能需要显示“访客”。利用 ??= 可以避免多余判断,让代码简洁易读:

function setDefaultUsername(user) {
  user.username ??= '访客';
}

let userProfile = { username: null };
setDefaultUsername(userProfile);
console.log(userProfile.username); // 输出: 访客

userProfile = { username: '小明' };
setDefaultUsername(userProfile);
console.log(userProfile.username); // 输出: 小明

这里,user.username ??= '访客' 会检查 username 是否为 null 或 undefined。如果是,则赋值为“访客”;否则保留原有值。非常适合在用户系统中设置默认显示名。

为什么选择 ??= ?

在 ??= 出现之前,我们有几种方法可以设置默认值,但每种方式都有其缺点:

// 使用 if 语句 - 繁琐且重复
if (user.name === null || user.name === undefined) {
  user.name = 'Anonymous';
}

// 使用 || 运算符 - 覆盖太多
user.name = user.name || 'Anonymous';  // 会替换 '', 0, false 等有效值

// 使用三元运算符 - 表达式冗长且难以阅读
user.name = user.name === null || user.name === undefined
  ? 'Anonymous'
  : user.name;

// 使用 ??= - 简洁、精确
user.name ??= 'Anonymous';

??= 的优势在于它的精确性。仅当变量真的是“没有值”时(即 null 或 undefined),它才会赋予默认值,因此适用于保留有效的 0、空字符串或 false 等“假值”数据:

let score = 0;
score ??= 100;    // 仍然保持 0

let tag = '';
tag ??= 'default'; // 仍然保持空字符串

let active = false;
active ??= true;   // 仍然保持 false

这种精确性能够有效避免使用更宽泛检查带来的潜在问题。在构建用户界面或处理表单数据时,我们通常希望保留这些“假值”而不是将它们替换为默认值。

||、&& 与 ?? 的适用场景

在 JavaScript 中,我们还可以使用 || 和 && 处理默认值,但它们的适用场景不同:

  • ||:当变量值是所有“假值”(nullundefined0false'' 等)时都会触发,可以快速设置默认值,但可能会覆盖有效数据。

  • &&:用于在两个条件都成立的情况下进行赋值操作,多用于复杂条件判断。

  • ?? 和 ??=:仅在值为 null 或 undefined 时触发,因此特别适合保留 0false、空字符串等有效数据。

在需要确保变量只在“无值”情况下被覆盖时,??= 操作符能提供最佳的精确控制。

总结

??= 操作符让 JavaScript 的默认值处理更加简洁和精确。无论是设置默认用户名、初始化配置项,还是处理表单初始值,??= 都能帮助我们在确保数据完整的前提下,让代码更具可读性和实用性。

希望这个小技巧能让你的开发更高效!

到此这篇关于前端小知识之??= 操作符更简洁的默认值处理方式的文章就介绍到这了,更多相关前端??= 操作符默认值处理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用pcs api往免费的百度网盘上传下载文件的方法

    使用pcs api往免费的百度网盘上传下载文件的方法

    百度个人云盘空间大,完全免费,而且提供了pcs api供调用操作文件,在平时的项目里往里面保存一些文件是很实用的。通过本文给大家介绍使用pcs api往免费的百度网盘上传下载文件的方法,感兴趣的朋友一起学习吧
    2016-03-03
  • js指定步长实现单方向匀速运动

    js指定步长实现单方向匀速运动

    这篇文章主要为大家详细介绍了js指定步长实现单方向匀速运动,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • 微信开发之微信jssdk录音功能开发示例

    微信开发之微信jssdk录音功能开发示例

    这篇文章主要介绍了微信开发之微信jssdk录音功能开发示例,在微信浏览器内打开的页面,制作一个按钮,用户按住按钮后开始录音,松手后停止录音,感兴趣的小伙伴们可以参考一下
    2018-10-10
  • 一文详解PDF.js的使用及其跨域问题解决

    一文详解PDF.js的使用及其跨域问题解决

    PDF.js是一个JavaScript库,可在浏览器中无插件显示PDF,提供缩放、翻页、文本搜索等功能,下面这篇文章主要介绍了PDF.js的使用及其跨域问题解决的相关资料,需要的朋友可以参考下
    2025-04-04
  • JavaScript 语法集锦 脚本之家基础推荐

    JavaScript 语法集锦 脚本之家基础推荐

    JavaScript语法集锦是对javascript常用函数的一些小结,比较实用,建议收藏,方便查找需要的资料。
    2009-11-11
  • 一个奇葩的最短的 IE 版本判断JS脚本

    一个奇葩的最短的 IE 版本判断JS脚本

    这篇文章主要介绍了一个奇葩的最短的 IE 版本判断JS脚本,非常酷的一段代码,需要的朋友可以参考下
    2014-05-05
  • JavaScript使用canvas实现锚点抠图功能

    JavaScript使用canvas实现锚点抠图功能

    在日常的图片处理中,我们经常会遇到需要抠图的情况,无论是为了美化照片、制作海报,还是进行图片合成,抠图对于我们来说也是一种很常用的功能了,今天就让我们一起来看下怎么使用canvas来实现一个锚点抠图功能
    2024-03-03
  • 如何使用less实现随机下雪动画详解

    如何使用less实现随机下雪动画详解

    这篇文章主要给大家介绍了关于如何使用less实现随机下雪动画的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • JS求解两数之和算法详解

    JS求解两数之和算法详解

    这篇文章主要介绍了JS求解两数之和算法,结合实例形式详细分析了JS求解两数之和算法相关原理、实现方法与操作注意事项,需要的朋友可以参考下
    2020-04-04
  • JS图片定时翻滚效果实现方法

    JS图片定时翻滚效果实现方法

    这篇文章主要介绍了JS图片定时翻滚效果实现方法,涉及javascript结合时间函数实现页面元素动态切换的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-06-06

最新评论