??= 操作符

SecureCRT多种配色方案配置文件 位置 C:\Users%USERNAME%\AppData\Roaming\VanDyke\Config\Global.ini S:"SecureCRT Tab State"=1,1,1,0,0 S:"SecureFX Local Tab State"=1,-1,200 D:"Max Chat Window History"=000000c8 D:"Active Window Alpha Transparency"=000000f0 D:"Save Keymaps As Unicode"=00000000 阅读详情

一、什么是 ??= 操作符

仅当变量的值为 null 或 undefined 时才会赋予它一个默认值,而不会影响 0、false、`` '' 等有效的“假值”。

二、使用对比

1:传统

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

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

1:||:当变量值是所有“假值”(null、undefined、0、false、'' 等)时都会触发,可以快速设置默认值,但可能会覆盖有效数据。
2:&&:用于在两个条件都成立的情况下进行赋值操作,多用于复杂条件判断。
3:?? 和 ??=:仅在值为 null 或 undefined 时触发,因此特别适合保留 0、false、空字符串等有效数据。
LayaNative源码编译 修改好后的LayaNative2.0需要重新编译生成Android和iOS所需要的动态库文件。 阅读详情

相关推荐

基于奥比中光Orbbec Astra Pro与ROS实现实时3D环境建模:orb_slam2实战指南

本文提供了一份详细的实战指南,介绍如何使用奥比中光Orbbec Astra Pro深度摄像头与ROS系统,部署并运行ORB-SLAM2算法,实现实时3D环境建模与定位。内容涵盖从驱动安装、环境配置、算法编译到摄像头标定与性能调优的全流程,旨在帮助开发者快速搭建一套高性价比的视觉SLAM系统。

weixin_29054399的博客 336

【JS】中 ?.、??、??= 的用法和含义

【JS】中 ?.、??、??= 的用法和含义

leo的博客 2951

手把手教你理解特斯拉Model 3的域控制器架构:RBCM如何成为“多面手”?

本文深入解析特斯拉Model 3的域控制器架构,重点介绍右车身域控制器(RBCM)如何整合车身电子系统功能。RBCM作为多任务处理中枢,管理空调系统、尾部电气设备和超声波雷达等关键功能,展现了特斯拉在汽车电子架构上的创新设计。文章详细探讨了RBCM的硬件架构、功能版图及信号网络,揭示其如何通过高性能MCU和智能开关技术实现功能集中与效率提升。

weixin_30919429的博客 384

C#中?、?.、? ?、? ?=的用法和说明

一、可空类型修饰符 ? 引用类型能用空引用来表示一个不存在的值,但是值类型不能。例如: string str = null; int i = null;//编译报错 为了使值类型也能使用可空类型,就可以使用“?”来表示,表现形式为“T?”。例如: int i?;//表示可控的类型 DataTime time?;//表示可空的时间 二、空合并运算符 ?? 用于定义引用类型和可空类型的默认值。如果此运算符的左操作符不为Null,则此操作符返回左操作数,否则返回右操作数。 //当a不为空时返回

qq_32584715的博客 8012

SDIO_WiFi驱动学习之安卓WLAN架构介绍及调用流程分析

一、引言 上一篇博客大概介绍了MMC子系统和SDIO相关知识及架构,这一篇博客则大致分析安卓的WLAN架构及上层如何调用WLAN驱动的流程。 虽然我工作的开发环境是安卓系统,但由于我不是专业的安卓应用/框架开发工程师,所以对安卓层的一些代码并不是特别熟悉,只能大致梳理流程,不专业的地方请谅解。 本文部分内容摘抄自网络,若有侵权,请联系删除。 二、安卓WLAN架构 1、应用框架(Application framework) 在应用程序框架级别是应用程序代码,它使用各种android.net..

陈子陌的博客 5088

告别裸奔MCU!手把手教你用MCP2515+STM32搭建稳定CAN总线通信(附完整代码)

本文详细介绍了如何使用MCP2515与STM32搭建稳定可靠的CAN总线通信系统,适用于汽车电子和工业控制领域。通过硬件架构设计、驱动层实现、数据收发实战及故障排查手册,帮助开发者快速掌握CAN通信技术,提升系统稳定性和开发效率。

weixin_28703489的博客 208

js中?.、??、??=的用法和含义

js中?.、??、??=的用法和含义

qq_45560350的博客 4943

ThingsBoard实战指南:RPC命令下发与设备交互详解

本文深入解析了ThingsBoard平台中RPC命令下发的核心机制与实战应用。通过对比客户端与服务端RPC模式,详细阐述了从仪表盘控件配置到设备端Python代码响应的完整双向交互流程,并提供了常见问题排查与进阶优化技巧,帮助开发者构建可靠、实时的物联网设备控制系统。

weixin_29168153的博客 213

js中!、!!、.?、??、??=、的用法和含义

js中!、!!、.?、??、??=、的用法和含义

u012930360的博客 4万+

使用 ABAP Development Tool 登录 SAP BTP ABAP 环境时,遇到弹出框应该怎么办?

但在实际环境里,隐私模式、第三方 Cookie 禁止、跨站追踪限制、缓存代理误命中、混合内容拦截等因素,都可能让这条跳转链路被打断。等),浏览器会弹出系统原生登录框,请求用户输入账号和口令或做集成认证。只要它们在响应头里出现,浏览器就会理直气壮地弹框,这是协议层的强约定。,最终弹出原生登录框。前端与网关领域有个通用的经验规则:如果你看到了原生登录框,而期望的是带样式的。环境里的登录方式表述为基于浏览器的前端认证,也就是这类重定向式的交互。环境的具体落地,拆出几类常见诱因与排障路径,并穿插真实世界的案例。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 373

YOLOv8改进 | 融合篇,YOLOv8改进主干网络为MobileNetV4+CBAM注意机制+Powerful-IoU损失函数(2024 最新IOU),全网首发,实现极限涨点

本文将在 YOLOv8 主干中引入 MobileNetV4 轻量化骨干,同时,在检测头引入 CBAM机制注意力机制,并采用 Powerful-IoU 损失函数作为模型的损失函数,其中,MobileNetV4 通过引入通用反向瓶颈(UIB)搜索块和 Mobie MQA 注意力模块创新设计,实现了模型的轻量级化;同时,MobileNetV4 采用了优化的 NAS 策略,通过粗粒度和细粒度搜索相结合的方法,显著提高了搜索效率并改善了模型质量。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 3786

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

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

前端达人 6363

11、系统稳定性分析与李雅普诺夫函数的应用

本文深入探讨了李雅普诺夫函数在系统稳定性分析中的核心作用,重点介绍了时变与时不变系统的稳定性判据差异,以及巴尔巴拉特引理在处理非自治系统中的应用。文章还阐述了正线性系统与严格正实传递函数的性质及其在非线性控制系统中的重要性,并展示了李雅普诺夫函数在评估主导时间常数和设计快速干扰抑制控制策略方面的实际应用。通过具体示例和流程图,系统地总结了李雅普诺夫方法在稳定性分析、性能评估与控制器设计中的多维度价值,同时指出了当前挑战与未来发展方向。

Jerry的专栏 93

JavaScript 新技能:??= 操作符,更优雅的空值处理方式

JavaScript 新技能:??= 操作符,更优雅的空值处理方式

嗨,欢迎来到我的 优快云 博客小天地!一名深耕多年的技术发烧友。在这里,我将把日常工作中积累的宝贵经验,从复杂架构设计的精妙之处,到代码优化的实战技巧,毫无保留地分享给大家。 1985

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

|| ?. ?? ??= 4种操作符

JavaScript 中 ||、?.、?? 的含义与用法一、符号概览二、用法与示例|| 逻辑或 场景:需要把任何 falsy 都替换成默认值的快捷写法。 ?. 可选链 场景:处理 API 深层结构、可能缺失的属性/方法,避免 Cannot read property… 错误。 ?? 空值合并 场景:需要区分“未设置(null/undefined)”与“显式假值(0、“”、false)”的默认值逻辑。 三、如何选择四、组合与注意

道阻且长,行之将至 520

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

操作符 ?. 、?? 、 ??= 、? : 的用法和理解

) 操作符的功能类似于( . )链式操作符,不同之处在于,在引用为空(nullish ) (null 或者 undefined) 的情况下不会引起错误,该表达式短路返回值是 undefined。空值合并操作符(?)是一个逻辑操作符,当左侧的操作数为 null 或者 undefined 时,返回其右侧操作数,否则返回左侧操作数。)与逻辑或操作符( || )不同,逻辑或操作符会在左侧操作数为假值时返回右侧操作数。在探索一个对象的内容时,如果不能确定哪些属性必定存在,可选链操作符也是很有帮助的。...

weixin_61382400的博客 2850

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

【操作符 ?. 、?? 、 ??=报错】

在项目中使用等新语法特性时出现报错。

林大胖的博客 834

为什么要用 ??=

这种精确性能够有效避免使用更宽泛检查带来的潜在问题。在构建用户界面或处理表单数据时,我们通常希望保留这些“假值”而不是将它们替换为默认值。),它才会赋予默认值,因此适用于保留有效的 0、空字符串或。仅当变量真的是“没有值”时(即。时才会赋予它一个默认值。

weixin_48420104的博客 250

前端实用技巧:??=操作符,让默认值设定不再繁琐

?是逻辑空值合并赋值操作符(Logical Nullish Assignment)。它的作用是将右侧的表达式赋值给左侧的变量,但仅当左侧的变量为null或undefined时才会进行赋值。这与传统的||=操作符不同,||=会在左侧变量为假值(如0""NaNfalse等)时进行赋值,而??则更加严格,只针对null和undefined。??操作符是ES2021引入的一项非常有用的新特性,它为我们提供了一种更简洁、更直观的方式来设定默认值。在前端开发中,合理利用??操作符可以大大提高代码的可读性和可维护性。

2408_88802129的博客 258

?? 和 ??= 运算符 - Null 合并操作符

如果左操作数的值不为 null,则 null 合并运算符?仅当左操作数的计算结果为 null 时,Null 合并赋值运算符?[] 的表达式中,当包含 null 条件运算的表达式结果为 null 时,可以使用?如果可以为 null 的类型的值为 null 时要使用的值应为基础值类型的默认值,请使用 Nullable.GetValueOrDefault() 方法。当使用可以为 null 值类型并且需要提供基础值类型的值时,可以使用?= 运算符的左操作数的类型必须是可以为 null 的值类型。

不见不散的博客 587

SyntaxError: Unexpected token ‘??=‘

当前使用的是14.21.3的版本,切换到一个16.0.0以上的版本即可,推荐使用。

lingliu0824的博客 1456

JS 中的 ? 操作符(? / ?. / ?? / ??= ||= &&=)

可选链操作符的作用就是,如果 demo 对象的 nickName 属性值不为 null 或 undefined 则调用其 toString() 方法,如果不存在则不调用,实际效果与上面的 if 判断是等价的。因为 demo 对象上不存在 nickName 属性,所以当读取 demo.nickName 时,你得到的将会是 undefined,而 undefined 是没有 toString() 方法的,所以就报错了。这是一个逻辑操作符,与 || 操作符十分相似,但是它们并不是等价的,具体的区别如下。

qq_43075191的博客 297

一个神奇的操作符即将加入PHP

我在翻看 PHP 的 RFC 列表的时候发现了一篇不算新的,但很有意思的 rfc:空合并赋值操作符 (姑且就这么翻译吧)。 它会引起我的注意的还有一个原因是我之前写过这样一篇文章:两行代码给 PHP7 添加一个“非空合并”语法糖,里面讲的是添加一个 ??: 操作符的方法, 而现在要讲的这个,已经被接受的 rfc 里添加的操作符是: ??=...

weixin_33860147的博客 107

知识拓展 ?. ?? ??= ?:

是可选链操作符,常用于访问引用类型具有不确定性的内部数据时,比如要访问一个对象中的数组,不确定数组一定有数据就可以使用?运算符仅有在左侧数据为 undefined 或 null 时才会取右侧的值,所以左侧数据为 0 / false 时不会取右侧数据,仍旧取左侧的 0 / false。|| 运算符是只要左侧数据不为真就会取右侧的数据,所以左侧数据为 0 / false 时也会取右侧数据。

zjqjy0911的博客 472

解决报错问题SyntaxError: Unexpected token ‘??=‘

node版本号不对,切换到相应的版本号就可以了。

qq_36457584的博客 243

转存笔记合集

) 操作符的功能类似于( . )链式操作符,不同之处在于,在引用为空(nullish ) (null 或者 undefined) 的情况下不会引起错误,该表达式短路返回值是 undefined。空值合并操作符(?)是一个逻辑操作符,当左侧的操作数为 null 或者 undefined 时,返回其右侧操作数,否则返回左侧操作数。// 空字符串,是一个假值,Boolean("") === false。console.log(checkCharge(0)) // => 需充值。二、可选链操作符(?

JOKE_L的博客 185
上一篇: 前端技巧第十期JavaScript作用域链
下一篇: 如何迁移 GitHub 仓库到 GitLab?
everyStudy
博客等级 码龄4年 292粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值