?? 是 JavaScript/TypeScript 中的空值合并运算符(Nullish Coalescing Operator)

它的作用是:

  • 当左侧的值为 nullundefined 时,返回右侧的值;

  • 如果左侧的值不是 nullundefined,则返回左侧的值。

??|| 的区别:

  • || 会在左侧为任何 falsy 值(false0""nullundefinedNaN)时返回右侧的值

  • ?? 只在左侧为 nullundefined 时才返回右侧的值

console.log(null ?? "default")      // 输出: "default"
console.log(undefined ?? "default") // 输出: "default"
console.log(0 ?? "default")        // 输出: 0
console.log("" ?? "default")       // 输出: ""
console.log(false ?? "default")    // 输出: false

?. 是可选链运算符(Optional Chaining Operator),它允许我们安全地访问可能为 null 或 undefined 的对象的属性。

const obj = null
console.log(obj?.property)  // 输出: undefined
console.log(obj.property)   // 报错: Cannot read property 'property' of null

const user = { info: { name: 'John' } }
console.log(user?.info?.name)  // 输出: "John"
console.log(user?.nonexistent?.name)  // 输出: undefined