讲师中心 微信公众号

工具推荐

视频效率加速
Laper
Laper

剧本策划到成片协作

立刻MV
立刻MV

低成本歌曲 MV、视频生成

Seko
Seko

AI短剧一键生成成片

updream

一键生成高质量推广成片

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

酷磊同学_4859

酷磊同学_4859

发布时间: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}`);

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

Scrapfly SDK TypeScript
Scrapfly SDK TypeScript

使用 Scrapfly SDK(scrapfly-sdk)在 TypeScript 或 JavaScript 中进行网页抓取,用于用户请求抓取 URL、绕过反爬虫防护、渲染页面等场景。

下载

示例:使用数组

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

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 项目中并亲自体验其好处。

编码愉快!

相关文章

在线游戏
在线游戏

海量精品小游戏合集,无需安装即点即玩,休闲益智、动作闯关应有尽有,秒开即玩,轻松解压,快乐停不下来

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

SoundView
SoundView Hot

SoundView是一款面向跨境电商的视频翻译、配音和本地化 AI 创作平台。

相关专题

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

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

332

2026.02.13

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

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

540

2026.02.25

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

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

411

2026.03.13

TypeScript 全栈开发进阶指南
TypeScript 全栈开发进阶指南

面向有 JavaScript 基础的开发者,深入讲解 TypeScript 的类型系统与全栈开发实践。

326

2026.06.03

TypeScript Node.js 全栈工程化与Monorepo架构实践
TypeScript Node.js 全栈工程化与Monorepo架构实践

本专题围绕 TypeScript 在 Node.js 全栈开发中的工程化实践展开,系统讲解 Monorepo 架构设计、包管理策略、模块复用机制以及服务端与前端统一类型系统的构建方法。通过真实项目案例,帮助开发者提升大型全栈项目的可维护性与协作效率。

778

2026.06.16

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

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

569

2023.09.22

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

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

1698

2024.03.01

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

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

6404

2023.10.24

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

40

2026.11.12

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebStorm 官方调试文档
WebStorm 官方调试文档

共0课时 | 0人学习

TypeScript 教程
TypeScript 教程

共19课时 | 6.8万人学习

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

共21课时 | 1.8万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn