JavaScript空值合并运算符??使用场景

 更新时间:2025年09月05日 08:50:13   作者:掘铁  
这篇文章主要介绍了JavaScript空值合并运算符??的相关资料,??是一个js逻辑操作符,当左侧的操作数为null或者undefined时,返回其右侧数,否则返回左侧数,文中通过代码介绍的非常详细,需要的朋友可以参考下

一、核心概念

  1. 作用
    当左侧表达式为 nullundefined 时,返回右侧的默认值;否则返回左侧的值。

  2. 与 || 的区别

    • || 会对 所有假值(如 0''falseNaN)触发默认值。
    • ?? 仅对 nullundefined 触发默认值,保留其他假值的语义。
    console.log(0 || 5);    // 5(0 是假值)
    console.log(0 ?? 5);    // 0(0 不是 null/undefined)
    

二、语法规则

leftExpr ?? rightExpr
  • 短路特性:若 leftExpr 不是 null/undefined,直接返回左侧值,不计算右侧。
  • 优先级:低于 ||&&,但高于三元运算符 ? :。建议用 () 明确优先级。

三、使用场景

1. 变量默认值

const userInput = null;
const name = userInput ?? "Anonymous"; // "Anonymous"

2. 函数参数默认值

function greet(message) {
  const text = message ?? "Hello";
  console.log(text);
}
greet(null);    // "Hello"
greet(undefined); // "Hello"
greet("");      // ""(保留空字符串)

3. 对象属性安全访问

const config = {
  apiUrl: null,
  timeout: 0
};

const url = config.apiUrl ?? "https://default.api";
const timeout = config.timeout ?? 5000; // 0 被保留

4. 结合可选链?.使用

const user = {
  profile: null
};
const username = user?.profile?.name ?? "Guest"; // "Guest"

四、进阶用法

1. 多级空值合并

const a = null;
const b = undefined;
const c = "Fallback";
const result = a ?? b ?? c; // "Fallback"

2. 与解构赋值结合

const settings = { theme: null };
const { theme = "light", fontSize = 16 } = settings;
// theme 使用 ?? 逻辑,fontSize 使用 = 默认值

3. 动态默认值

let defaultPort;
const port = process.env.PORT ?? (defaultPort = 3000);

五、注意事项

  1. 不可直接用于未声明的变量

    // 错误示例(需确保变量已声明)
    const value = undeclaredVar ?? 10; // ReferenceError
    
  2. 与 || 混用时的优先级

    const a = null || undefined ?? "default"; // SyntaxError
    const b = (null || undefined) ?? "default"; // "default"
    
  3. 浏览器兼容性

    • 支持 ES2020+ 的环境(Chrome 80+, Firefox 72+, Node.js 14+)。
    • 旧环境需通过 Babel 插件 @babel/plugin-proposal-nullish-coalescing-operator 转译。

六、性能优化

  • 避免重复计算:若右侧是复杂表达式,用函数封装避免副作用。
    const value = input ?? computeDefault(); // computeDefault() 仅在需要时执行
    

七、替代方案(旧代码兼容)

// 使用三元运算符模拟 ??
const value = (left !== null && left !== undefined) ? left : right;

总结

运算符触发默认值的条件适用场景
??nullundefined保留其他假值(如 0''
``

掌握 ?? 能显著提升代码可读性,尤其在处理 API 响应、配置项等场景时,能更精准地控制默认值逻辑。

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

相关文章

  • Typescript 函数重载的实现

    Typescript 函数重载的实现

    本文主要介绍了Typescript 函数重载的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • JavaScript 反射和属性赋值实例解析

    JavaScript 反射和属性赋值实例解析

    这篇文章主要介绍了JavaScript 反射和属性赋值实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • JS实现将手机号中间的几位数字变成****功能

    JS实现将手机号中间的几位数字变成****功能

    这篇文章主要介绍了用js如何实现将手机号中间的几位数字变成**** _,今天,我们要实现一个很常见并且简单的功能如何将手机号中间的几位数变成****,需要的朋友可以参考下
    2023-09-09
  • Webpack打包详细流程及代码

    Webpack打包详细流程及代码

    这篇文章主要给大家介绍了关于Webpack打包详细流程及代码的相关资料,Webpack是一款非常流行的打包工具,它的主要作用是将项目中的各个模块打包成静态资源,以便于在浏览器中加载和运行,需要的朋友可以参考下
    2024-01-01
  • echarts柱状图的点击事件代码示例

    echarts柱状图的点击事件代码示例

    这篇文章主要给大家介绍了关于echarts柱状图点击事件的相关资料,在实际的项目开发中我们通常会用到Echarts来对数据进行展示,有时候需要用到Echarts的点击事件,增加系统的交互,需要的朋友可以参考下
    2023-09-09
  • 原生JS实现汇率转换功能代码实例

    原生JS实现汇率转换功能代码实例

    这篇文章主要介绍了原生JS实现汇率转换功能代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Cordova(ionic)项目实现双击返回键退出应用

    Cordova(ionic)项目实现双击返回键退出应用

    这篇文章主要为大家详细介绍了Cordova项目实现双击返回键退出应用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • Promise面试题详解之控制并发

    Promise面试题详解之控制并发

    promise面试中经常会遇到的一个问题就是关于控制并发的,所以下面这篇文章主要给大家介绍了关于Promise面试题之控制并发的相关资料,需要的朋友可以参考下
    2021-05-05
  • 简单理解js的冒泡排序

    简单理解js的冒泡排序

    本篇文章主要介绍了JavaScript的冒泡排序,对其进行示例解析,具有很好的参考价值,需要的朋友一起来看下吧
    2016-12-12
  • js判断是否是手机页面

    js判断是否是手机页面

    本文主要介绍了js判断是否是手机页面的方法。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-03-03

最新评论