JavaScript中 ?? 和 || 的区别

在前端开发中,??(Nullish Coalescing Operator)和 ||(Logical OR Operator)是用来提供默认值的操作符。它们的行为有一些细微但重要的区别。

||(Logical OR Operator)

|| 是逻辑或操作符,它会返回第一个真值(truthy value),如果左边的操作数是一个假值(falsy value),那么它会返回右边的操作数。注意,在 JavaScript 中以下值被认为是假值:

  • false
  • 0
  • -0
  • 0n (BigInt zero)
  • "" (空字符串)
  • null
  • undefined
  • NaN

示例:

const foo = false || 'default'; // 'default'
const bar = 0 || 'default';     // 'default'
const baz = '' || 'default';    // 'default'
const qux = null || 'default';  // 'default'
const quux = undefined || 'default'; // 'default'

??(Nullish Coalescing Operator)

?? 是空值合并操作符,它会返回第一个非空值(nullish value),即非 nullundefined。如果左边的操作数是 nullundefined,那么它会返回右边的操作数。

示例:

const foo = null ?? 'default';  // 'default'
const bar = undefined ?? 'default'; // 'default'
const baz = 0 ?? 'default';     // 0
const qux = false ?? 'default'; // false
const quux = '' ?? 'default';   // ''

区别

  • || 会对所有的假值(falsy values)进行判断,包括 false0"" 等,而 ?? 只对 nullundefined 进行判断。
  • ?? 更加严格,只在左操作数为 nullundefined 时才返回右操作数,而不会忽略其他假值。

什么时候使用哪个?

  • 使用 || 当你想为任何假值提供默认值时。例如,想要确保一个变量不为 false0"" 等任何假值:

    const value = userInput || 'default';
    
  • 使用 ?? 当你想为 nullundefined 提供默认值,而保留 false0"" 等有效值时:

    const value = userInput ?? 'default';
    

代码示例

let user = null;

let name1 = user || "Anonymous";  // "Anonymous"
let name2 = user ?? "Anonymous";  // "Anonymous"

user = "";

let name3 = user || "Anonymous";  // "Anonymous" (因为 "" 是 falsy 值)
let name4 = user ?? "Anonymous";  // "" (因为 "" 不是 null 或 undefined)

通过以上的解释和示例,可以清楚地看到 ??|| 在处理不同类型的假值时的区别和适用场景。

posted @   槑孒  阅读(135)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示