js代替或运行的方法 - 空值合并操作符

为什么推荐 value ?? 'GMT'; 代替 || 语法

在 JavaScript/TypeScript 中,推荐使用 value ?? 'GMT'(空值合并操作符)代替 value || 'GMT',主要是因为两者在“假值”(falsy)的判断上存在关键差异,这会影响逻辑的正确性和意图的清晰性。

核心区别:

  • ||:只要左侧操作数是任何假值false0""nullundefinedNaN),就会返回右侧默认值。
  • ??仅当左侧是 nullundefined 时,才返回右侧默认值。其他假值(如 0""false)会被视为有效值保留。

为什么在时区场景中推荐 ??

在处理像时区(timezone)这样的配置时,你可能希望:

  • 如果用户传入 nullundefined → 使用默认值 'GMT'
  • 但如果用户明确传入 ''(空字符串)、0false —— 这些可能是有意为之的配置,你不应该覆盖它们。

示例对比:

let timezone = '';

// 使用 ||:错误地覆盖了有意的空字符串
console.log(timezone || 'GMT'); // 输出: 'GMT' ❌

// 使用 ??:保留了有意的空字符串
console.log(timezone ?? 'GMT'); // 输出: '' ✅

另一个常见场景:

let offset = 0;

// || 会错误地将 0 替换为默认值
console.log(offset || 'GMT'); // 输出: 'GMT' ❌(0 是合法的偏移量)

// ?? 正确保留 0
console.log(offset ?? 'GMT'); // 输出: 0 ✅

总结:

  • ?? 更精确:它只在“值不存在”(null/undefined)时才提供默认值,符合“默认值”的语义。
  • || 更粗暴:它会覆盖所有假值,容易掩盖开发者有意设置的合法值(如 0''false)。
  • 在你的代码中,如果 value 可能是 0''false,而你希望保留这些值,必须使用 ??

因此,value ?? 'GMT' 是更安全、语义更清晰的选择,尤其在配置类、国际化、API 响应处理等场景中。