JavaScript语法特性篇-空值合并运算符(??)
1、基本使用
空值合并运算符(??)英文名称为 Nullish coalescing operator,是一个逻辑运算符。
特性:当左侧的操作数为 null 或者 undefined 时,返回其右侧操作数,否则返回左侧操作数。
const foo = null ?? 'default string';
console.log(foo);
// expected output: "default string"const baz = 0 ?? 42;
console.log(baz);
// expected output: 0
2、与逻辑或运算符(||)区别
与逻辑或运算符(||)不同的是,当左侧操作数为 0、空字段、布尔false 时,空值合并运算符??均返回左侧操作数。
const num = 0 ?? 1;
console.log(num) // 0const flag = false ?? true;
console.log(flag) //falseconst str = '' ?? 'string';
console.log(str) // ''
上述场景如果使用 ||,可能会出现不符合预期的结果,因为||是布尔逻辑运算符,左侧操作数会被强制转换为布尔值,任何假值(0, '', NaN, null, undefined)都不会被返回;而空值合并运算符可以有效避免上述问题。
3、??短路逻辑
此外,??与 OR 和 AND 逻辑运算符相似,当左表达式不为 null 或 undefined 时,直接返回左侧表达式,不会对右表达式进行求值。
const fn1 = () => {console.log('fn1被调用了'); return 'fn1';}
const fn2 = () => {console.log('fn2被调用了'); return 'fn2';}
const fn3 = () => {console.log('fn3被调用了'); return null;}console.log(fn1() ?? fn2());
//打印 fn1被调用了
// fn1
// 由于fn1 返回值不为null、undefined,fn2 未被调用console.log(fn3() ?? fn2());
//fn3被调用了
//fn2被调用了
//fn2
// 由于fn3 返回值为null,fn2 被调用
4、不能直接与逻辑 &&、||使用
要注意的是,由于空值合并运算符??和其他逻辑运算符之间的运算优先级/运算顺序是未定义的,不能直接与逻辑 &&、||使用,否则会抛错;通过括号明确运算优先级,才能正确运行。
true && null ?? 'default string' // 抛出 SyntaxError
false || undefined ?? "default string"; // 抛出 SyntaxError(true && null) ?? "default string"; // true
(false || undefined) ?? "default string"; //'default string'
相关文章:
JavaScript语法特性篇-空值合并运算符(??)
1、基本使用 空值合并运算符(??)英文名称为 Nullish coalescing operator,是一个逻辑运算符。 特性:当左侧的操作数为 null 或者 undefined 时,返回其右侧操作数,否则返回左侧操作数。 const foo nul…...
rancher快照备份至S3
巧用rancher的S3快照备份功能,快速实现集群复制、集群转移、完全崩溃后的极限修复 1.进入集群管理,在对应的集群菜单后,点击编辑配置 2.选择ETCD,启用,Backup Snapshots to S3选项 并填入你的minio 3 配置成功后 手…...
ChatGPT API教程在线对接OpenAI APIKey技术教程
一、OpenAI基本库介绍 您可以通过 HTTP 请求与 API 进行交互,这可以通过任何编程语言实现。我们提供官方的 Python 绑定、官方的 Node.js 库,以及由社区维护的库。 要安装官方的 Python 绑定,请运行以下命令: pip install open…...
随心而遇,跟着感觉走
分数限制下,选好专业还是选好学校? 24年高考结束,很多学生犹豫选择专业还是好学校,我的建议是,选择好学校。 本人体验来说,电子,工地,计科,数学,工科相关的…...
LeetCode题练习与总结:只出现一次的数字--136
一、题目描述 给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。 示例 1 : …...
常见的中间件都在解决什么问题?
常见的中间件都在解决什么问题 RocketMQ RocketMQ 是一款功能强大的分布式消息系统。 RocketMQ 源码地址:https://github.com/apache/rocketmq(opens new window) RocketMQ 官方网站:https://rocketmq.apache.org 什么场景下用 RocketMQ?…...
微信小程序-scroll-view实现上拉加载和下拉刷新
一.scroll-view实现上拉加载 scroll-view组件通过自身一些属性实现上拉加载的功能。 lower-threshold“100"属性表示距离底部多少px就会实现触发下拉加载的事件。 类似于在.json文件里面配置"onReachBottomDistance”: 100 bindscrolltolower"getMore"属…...
TS中interface和type的区别
在 TypeScript 中,interface 和 type 都可以用来定义对象的类型,但它们之间存在一些差异。 以下是 interface 和 type 的主要区别: 扩展(Extending): interface 可以通过 extends 关键字来扩展其他 interface。interfa…...
Hightec编译器系列之高级调试技巧精华总结
Hightec编译器系列之高级调试技巧精华总结 小T为了便于大家理解,本文的思维导图大纲如下: 之前可能很多小伙伴没有使用过Hightec编译器,大家可以参考小T之前的文章《Hightec编译器系列之白嫖就是爽》可以下载一年试用版本。 小T使用过适配英…...
【论文笔记】LoRA LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS
题目:LoRA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS 来源: ICLR 2022 模型名称: LoRA 论文链接: https://arxiv.org/abs/2106.09685 项目链接: https://github.com/microsoft/LoRA 文章目录 摘要引言问题定义现有方法的问题方法将 LORA 应用于 Transformer 实…...
【Sa-Token|4】Sa-Token微服务项目应用
若微服务数量多,如果每个服务都改动,工作量大,则可以只在网关和用户中心进行改动,也是可以实现服务之间的跳转。 这种方式可以通过在网关服务中生成和验证 Sa-Token,并将其与现有的 Token关联存储在 Redis 中。用户中心…...
鸿蒙开发系统基础能力:【@ohos.hilog (日志打印)】
日志打印 hilog日志系统,使应用/服务可以按照指定级别、标识和格式字符串输出日志内容,帮助开发者了解应用/服务的运行状态,更好地调试程序。 说明: 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用…...
SpringMVC系列十: 中文乱码处理与JSON处理
文章目录 中文乱码处理自定义中文乱码过滤器Spring提供的过滤器处理中文 处理json和HttpMessageConverter<T>处理JSON-ResponseBody处理JSON-RequestBody处理JSON-注意事项和细节HttpMessageConverter<T\>文件下载-ResponseEntity<T\>作业布置 上一讲, 我们学…...
使用MyBatisPlus进行字段的自动填充
使用MyBatisPlus进行字段的自动填充 需求场景 当我们往数据库里面插入一条数据,或者是更新一条数据时,一般都需要标记创建时间create_time和更新时间update_time的值,但是如果我们每张表的每个请求,在执行sql语句的时候我们都手…...
python爬虫之aiohttp多任务异步爬虫
python爬虫之aiohttp多任务异步爬虫 爬取的flash服务如下: from flask import Flask import timeapp Flask(__name__)app.route(/bobo) def index_bobo():time.sleep(2)return Hello boboapp.route(/jay) def index_jay():time.sleep(2)return Hello jayapp.rout…...
1964springboot VUE小程序在线学习管理系统开发mysql数据库uniapp开发java编程计算机网页源码maven项目
一、源码特点 springboot VUE uniapp 小程序 在线学习管理系统是一套完善的完整信息管理类型系统,结合springboot框架uniapp和VUE完成本系统,对理解vue java编程开发语言有帮助系统采用springboot框架(MVC模式开发),…...
【前端项目笔记】3 用户管理
用户管理相关功能实现 涉及表单、对话框、Ajax数据请求 基本页面 用户列表开发 在router.js中导入Users.vue 解决用户列表小问题 选中(激活)子菜单后刷新不显示高亮 给二级菜单绑定单击事件,点击链接时把对应的地址保存到sessionSto…...
【文献及模型、制图分享】基于SSP-RCP不同情景的京津冀地区土地覆被变化模拟
公众号新功能 目前公众号新增以下等功能 1、处理GIS出图、Python制图、区位图、土地利用现状图、土地利用动态度和重心迁移图等等 2、核密度分析、网络od分析、地形分析、空间分析等等 3、地理加权回归、地理探测器、生态环境质量指数、地理加权回归模型影响因素分析、计算…...
基于单片机的智能台灯控制系统
摘要: 文章设计一款单片机智能台灯控制系统,实现对台灯的手动和自动控制功能,以 STC89C52 单片机作为多功能智能台灯的主控制器,光电检测模块检测坐姿,红外传感器检测人体,光敏电阻检测光强,同…...
PrestaShop的一些使用介绍
目录 PrestaShop 是一个功能丰富的开源电子商务解决方案。 1. 以下是其基本概念和架构的一些要点: 2. PrestaShop 的模块开发是扩展其功能的重要方式。以下是对 PrestaShop 模块开发的详细介绍: 开发环境准备: 3. PrestaShop 的模块开发允…...
Ds18b20数字温度传感器
模拟温度传感器: 热敏电阻,, 输出的电压随着温度变化 将变化的电压值,,转化成数字信号,,, 这就是模拟传感器,,比较复杂,,这个数据只是…...
Stream-Omni:动态调度实现大模型流式与高质量生成的平衡
1. 项目概述:从“流”到“全”的文本生成新范式最近在自然语言处理社区里,一个名为“Stream-Omni”的项目引起了我的注意。这个由ictnlp团队开源的项目,名字本身就很有意思——“Stream”代表流式,“Omni”代表全能。简单来说&…...
ElevenLabs古吉拉特文语音合成失效排查手册(97.3%开发者忽略的ISO 639-2语言码陷阱)
更多请点击: https://intelliparadigm.com 第一章:ElevenLabs古吉拉特文语音合成失效的根本诱因 ElevenLabs 官方 API 文档明确标注支持 Gujarati(gu-IN)语言标识,但实际调用时持续返回 400 Bad Request 或静音音频&…...
Linux 网络虚拟化深度解析:从 veth 设备对到容器网络实战
第一部分:veth 设备对 —— 虚拟世界的 "网线" 1.1 什么是 veth 设备对? veth(Virtual Ethernet)设备对,可以理解为软件模拟的一对 "虚拟网卡",它们总是成对出现,就像用一…...
现代开发脚手架Forge:可组合蓝图与插件化架构解析
1. 项目概述:一个能“自动施法”的开发脚手架如果你是一名开发者,尤其是经常需要从零开始搭建新项目的前端或全栈工程师,那么“重复造轮子”和“繁琐的初始化配置”这两个词,一定是你职业生涯中挥之不去的梦魇。每次新建一个项目&…...
Photoshop AVIF插件:专业图像工作者的下一代格式解决方案
Photoshop AVIF插件:专业图像工作者的下一代格式解决方案 【免费下载链接】avif-format An AV1 Image (AVIF) file format plug-in for Adobe Photoshop 项目地址: https://gitcode.com/gh_mirrors/avi/avif-format 在当今数字图像处理领域,AVIF格…...
AI智能体技能开发实战:基于MCP协议构建与集成外部工具
1. 项目概述:一个为AI智能体技能库而生的MCP资源集合如果你正在开发或研究AI智能体,尤其是那些需要调用外部工具、处理复杂任务的智能体,那么你很可能已经接触过“模型上下文协议”。这个协议正在成为连接大语言模型与外部世界的关键桥梁。而…...
博客生成器架构设计:基于LLM与模块化流水线的自动化内容创作实践
1. 项目概述:一个博客生成器的诞生与价值在内容创作领域,效率和质量是永恒的矛盾。作为一名写了十几年博客的“老鸟”,我深知从灵光一闪到一篇结构清晰、排版美观的文章发布,中间有多少琐碎的步骤:构思大纲、撰写内容、…...
如何将Blender变成参数化CAD工具:CAD_Sketcher完整入门指南
如何将Blender变成参数化CAD工具:CAD_Sketcher完整入门指南 【免费下载链接】CAD_Sketcher Constraint-based geometry sketcher for blender 项目地址: https://gitcode.com/gh_mirrors/ca/CAD_Sketcher 你是否曾经希望在Blender中创建精确的工程图纸&#…...
基于RAG与LangChain的智能PDF构建器:从文档理解到自动化生成
1. 项目概述:一个能“理解”文档的智能PDF构建器 最近在折腾文档自动化处理时,发现了一个挺有意思的开源项目,叫 ai-pdf-builder 。这名字听起来有点宽泛,但它的核心思路很明确: 利用大语言模型的能力,让…...
