0

0

这个新的 JavaScript 运算符绝对改变了游戏规则

心靈之曲

心靈之曲

发布时间:2025-01-22 16:42:12

|

753人浏览过

|

来源于dev.to

转载

javascript 多年来已经发生了显着的发展,引入了新的功能和语法,使该语言更加强大和更具表现力。该语言最令人兴奋的新增功能之一是空合并运算符 (??)。该运算符绝对是游戏规则的改变者,提供了一种简洁直观的方法来处理 null 和未定义的值。在本文中,我们将探讨 nullish 合并运算符、其优点以及如何在 typescript 中有效使用它。

空值合并运算符简介

空合并运算符 (??) 是一个逻辑运算符,当左侧操作数为空或未定义时,它返回右侧操作数。这对于提供默认值和避免与逻辑 or (||) 运算符相关的常见陷阱特别有用。

逻辑或 (||) 的问题

在引入空值合并运算符之前,开发人员经常使用逻辑 or (||) 运算符来提供默认值。然而,这种方法有一个显着的缺点:它将假值(例如 0、'' 和 false)视为等同于 null 或未定义。

let value = 0;
let defaultvalue = value || 10;
console.log(defaultvalue); // output: 10

在上面的例子中,值为 0,这是一个假值。因此,即使 0 是有效数字,defaultvalue 也会被分配为 10。此行为可能会导致代码出现意外结果和错误。

空合并运算符 (??) 来救援

空合并运算符 (??) 通过在左侧操作数为空或未定义时仅返回右侧操作数来解决此问题。这使得它成为提供默认值的更可靠的选择。

let value: number | null | undefined = 0;
let defaultvalue = value ?? 10;
console.log(defaultvalue); // output: 0

在此示例中,值为 0,这不是空值。结果,defaultvalue 被赋值为 0,保留了预期的值。

空合并运算符的优点

  1. 清晰度和意图:空值合并运算符清楚地传达了仅当原始值为 null 或未定义时提供默认值的意图。
  2. 避免错误:通过区分假值和空值,空值合并运算符有助于避免常见错误和意外行为。
  3. 简洁性:空值合并运算符提供了一种简洁且可读的方式来处理默认值,减少了对冗长条件语句的需求。

在 typescript 中使用 nullish 合并运算符

typescript 完全支持 nullish 合并运算符,使其可以轻松集成到您的 typescript 项目中。让我们探索一些示例,看看如何有效地使用它。

立即学习Java免费学习笔记(深入)”;

示例:提供默认值

空合并运算符最常见的用例之一是为函数参数提供默认值。

function greet(name: string | null | undefined, greeting: string = 'hello'): string {
  const defaultname = name ?? 'guest';
  return `${greeting}, ${defaultname}!`;
}

console.log(greet(null)); // output: hello, guest!
console.log(greet(undefined)); // output: hello, guest!
console.log(greet('alice')); // output: hello, alice!

在此示例中,当 name 参数为 null 或未定义时,greet 函数使用 nullish 合并运算符提供默认名称“guest”。

示例:处理可选属性

空合并运算符对于处理对象中的可选属性也很有用。

interface user {
  id: number;
  name?: string;
  email?: string;
}

const user: user = {
  id: 1,
  name: null,
};

const displayname = user.name ?? 'anonymous';
const displayemail = user.email ?? 'no email provided';

console.log(`user id: ${user.id}`);
console.log(`display name: ${displayname}`);
console.log(`display email: ${displayemail}`);

在此示例中,用户界面具有可选的名称和电子邮件属性。当这些属性为空或未定义时,空值合并运算符用于为这些属性提供默认值。

示例:使用数组

空值合并运算符也可用于处理数组中的空值。

无限画
无限画

千库网旗下AI绘画创作平台

下载
const values: (number | null | undefined)[] = [1, null, 3, undefined, 5];
const defaultvalues = values.map(value => value ?? 0);

console.log(defaultvalues); // output: [1, 0, 3, 0, 5]

在此示例中,values 数组包含数字、null 和 undefined。空值合并运算符用于将空值替换为 0。

高级用例

空值合并运算符不仅仅适用于简单的默认值。它还可以用于更高级的场景,例如链接多个后备以及与其他运算符组合。

示例:链接多个后备

您可以链接多个空值合并运算符来提供多个后备值。

let value: number | null | undefined = null;
let fallback1: number | null | undefined = undefined;
let fallback2: number | null | undefined = 42;

let result = value ?? fallback1 ?? fallback2 ?? 0;

console.log(result); // output: 42

在此示例中,value 和fallback1 为nullish,因此nullish 合并运算符回退到fallback2,即42。

示例:与其他运算符组合

空合并运算符可以与其他运算符(例如三元运算符)结合使用,以创建更复杂的条件表达式。

let value: number | null | undefined = 0;
let result = value !== null ? value ?? 10 : 20;

console.log(result); // Output: 0

在此示例中,三元运算符用于检查 value 是否不为 null。如果不为 null,则使用空合并运算符提供默认值 10。如果 value 为 null,则结果为 20。

最佳实践

使用空值合并运算符时,遵循最佳实践非常重要,以确保您的代码清晰、可维护且无错误。

  1. 谨慎使用:虽然空值合并运算符功能强大,但应谨慎使用。过度使用它会使您的代码更难阅读和理解。
  2. 记录您的意图:使用 nullish 合并运算符时,请考虑添加注释来记录您的意图,尤其是在复杂的表达式中。
  3. 避免与逻辑 or 混合:将空合并运算符与逻辑 or 运算符混合可能会导致混乱和错误。坚持使用一个运算符来提供默认值。
  4. 彻底测试:始终彻底测试您的代码,以确保空合并运算符的行为符合预期,尤其是在边缘情况下。

结论

空合并运算符 (??) 是 javascript 和 typescript 开发人员的游戏规则改变者。它提供了一种简洁直观的方法来处理 null 和未定义的值,避免与逻辑 or 运算符相关的常见陷阱。通过使用 nullish 合并运算符,您可以编写更清晰、更易于维护且不易出现错误的代码。

无论您是提供默认值、处理可选属性还是使用数组,空值合并运算符都能满足您的需求。立即将其集成到您的 typescript 项目中并亲自体验其好处。

编码愉快!

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
TypeScript工程化开发与Vite构建优化实践
TypeScript工程化开发与Vite构建优化实践

本专题面向前端开发者,深入讲解 TypeScript 类型系统与大型项目结构设计方法,并结合 Vite 构建工具优化前端工程化流程。内容包括模块化设计、类型声明管理、代码分割、热更新原理以及构建性能调优。通过完整项目示例,帮助开发者提升代码可维护性与开发效率。

49

2026.02.13

TypeScript全栈项目架构与接口规范设计
TypeScript全栈项目架构与接口规范设计

本专题面向全栈开发者,系统讲解基于 TypeScript 构建前后端统一技术栈的工程化实践。内容涵盖项目分层设计、接口协议规范、类型共享机制、错误码体系设计、接口自动化生成与文档维护方案。通过完整项目示例,帮助开发者构建结构清晰、类型安全、易维护的现代全栈应用架构。

196

2026.02.25

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

35

2026.03.13

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

254

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

1089

2024.03.01

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1568

2023.10.24

Go语言中的运算符有哪些
Go语言中的运算符有哪些

Go语言中的运算符有:1、加法运算符;2、减法运算符;3、乘法运算符;4、除法运算符;5、取余运算符;6、比较运算符;7、位运算符;8、按位与运算符;9、按位或运算符;10、按位异或运算符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

241

2024.02.23

php三元运算符用法
php三元运算符用法

本专题整合了php三元运算符相关教程,阅读专题下面的文章了解更多详细内容。

150

2025.10.17

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
TypeScript 教程
TypeScript 教程

共19课时 | 3.4万人学习

TypeScript——十天技能课堂
TypeScript——十天技能课堂

共21课时 | 1.2万人学习

TypeScript-45分钟入门
TypeScript-45分钟入门

共6课时 | 0.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号