TypeScript 中合并运算符??

 更新时间:2026年05月25日 09:49:08   作者:Raink老师  
TypeScript的合并运算符??提供了一种处理null/undefined值的简洁方式,它仅在值为null/undefined时返回默认值,不会将0或空字符串视为空值,适用于函数参数默认值、对象属性设置等场景,下面就来详细的了解一下

在 TypeScript 中,合并运算符(??) 是一种逻辑运算符,用于在变量为 nullundefined 时提供默认值。它让代码在处理“空值”场景时更加简洁、清晰、可预测。

一、语法说明

合并运算符由两个问号组成:

变量 ?? 默认值

该运算符的逻辑是:如果左侧的值是 null 或 undefined,则返回右侧的默认值;否则返回左侧的值本身。

⚠️ 注意:与逻辑或运算符(||)不同,??不会0false 或空字符串 "" 视为“空值”。

二、实用示例

示例 1:函数中的默认值设置

以下函数通过 Nullish 合并运算符为 input 参数设置了默认值 100

function displayValue(input?: number) {
  const value = input ?? 100;
  console.log(value);
}
displayValue();     // 输出 100
displayValue(50);   // 输出 50

displayValue() 中未传入参数,inputundefined,因此使用了默认值 100。而在传入 50 时,使用的是实际值。

示例 2:对象属性默认值设置(常用于 JSON)

当从 JSON 或其他外部数据源获取对象时,某些字段可能缺失。可以使用 ?? 为这些属性设定默认值。

interface Settings {
  volume?: number;
  brightness?: number;
}
const userSettings: Settings = {
  volume: 0
};
const volume = userSettings.volume ?? 50;
const brightness = userSettings.brightness ?? 75;
console.log(`Volume: ${volume}`);         // 输出 Volume: 0
console.log(`Brightness: ${brightness}`); // 输出 Brightness: 75

volume 的值为 0,虽然是假值,但不是 null 或 undefined,因此不会使用默认值 50。
brightness 没有定义,因此使用了默认值 75。

三、浏览器支持情况

Nullish 合并运算符在大多数现代浏览器中已经得到支持:

  • ✅ Google Chrome 80+
  • ✅ Microsoft Edge 80+
  • ✅ Firefox 72+
  • ✅ Safari 13.1+
  • ✅ Opera 67+

🎯 TypeScript 会将 ?? 编译为兼容 JavaScript 语法,确保在较老环境中依然可运行(需配置合适的编译目标)。

四、总结

合并运算符(??)是 TypeScript 中处理 nullundefined 值的利器,特别适合用于:

  • 函数参数默认值
  • 对象属性默认值
  • 用户配置合并

它使得代码更加健壮,避免不必要的类型判断。是开发现代前端和后端应用时不可或缺的一部分。

如果你正在使用 TypeScript 开发项目,建议立刻开始使用 ?? 运算符,让你的代码更简洁,更可控!

到此这篇关于TypeScript 中合并运算符??的文章就介绍到这了,更多相关TypeScript 合并运算符内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解ES6新增字符串扩张方法includes()、startsWith()、endsWith()

    详解ES6新增字符串扩张方法includes()、startsWith()、endsWith()

    这篇文章主要介绍了详解ES6新增字符串扩张方法includes()、startsWith()、endsWith(),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • 原生JS实现实时钟表

    原生JS实现实时钟表

    这篇文章主要为大家详细介绍了原生JS实现实时钟表,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • js动态设置关键侦@keyframes的方法技巧

    js动态设置关键侦@keyframes的方法技巧

    这篇文章主要给大家介绍了关于js动态设置关键侦@keyframes的方法技巧,@keyframes规则通过在动画序列中定义关键帧(或waypoints)的样式来控制CSS动画序列中的中间步骤,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-04-04
  • 利用原生JS自动生成文章标题树的实例

    利用原生JS自动生成文章标题树的实例

    网上关于生成文章标题树的示例很多,这篇文章介绍的是利用原生JS实现自动生成文章标题树,实现过程很简单,有需要的可以参考借鉴。
    2016-08-08
  • 一个页面元素appendchild追加到另一个页面元素的问题

    一个页面元素appendchild追加到另一个页面元素的问题

    一般都是自己创建元素然后append到页面的但是如果是页面本身有的元素append到另一个页面元素呢,很多的新手朋友对此问题比较好奇,本人也是如此啊,好了不多说,切入主题,感兴趣的朋友可以了解下哦
    2013-01-01
  • javascript通过元素id和name直接取得元素的方法

    javascript通过元素id和name直接取得元素的方法

    这篇文章主要介绍了javascript通过元素id和name直接取得元素的方法,涉及javascript获取元素的相关技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • javascript操作数组详解

    javascript操作数组详解

    这篇文章主要详细介绍了javascript操作数组的方法以及示例,需要的朋友可以参考下
    2014-12-12
  • JS的replace方法

    JS的replace方法

    在javascript中,String的函数replace()简直太让人喜爱了。它灵活而强大的字符替换处理能力,这里简单介绍下,方便需要的朋友
    2013-12-12
  • JS ES6中setTimeout函数的执行上下文示例

    JS ES6中setTimeout函数的执行上下文示例

    这篇文章主要给大家介绍了关于JS ES6中setTimeout函数的执行上下文的相关资料,文中给出了详细的介绍和示例代码供大家参考学习,需要的朋友们下面来一起看看吧。
    2017-04-04
  • 基于Leaflet的Webgis经纬网格功能实现

    基于Leaflet的Webgis经纬网格功能实现

    本文将介绍一款Leaflet的经纬网插件,基于这款经纬网插件,详细介绍如何实现经纬网功能,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2023-12-12

最新评论