js代替或运行的方法 - 空值合并操作符
为什么推荐 value ?? 'GMT'; 代替 || 语法
在 JavaScript/TypeScript 中,推荐使用 value ?? 'GMT'(空值合并操作符)代替 value || 'GMT',主要是因为两者在“假值”(falsy)的判断上存在关键差异,这会影响逻辑的正确性和意图的清晰性。
核心区别:
||:只要左侧操作数是任何假值(false、0、""、null、undefined、NaN),就会返回右侧默认值。??:仅当左侧是null或undefined时,才返回右侧默认值。其他假值(如0、""、false)会被视为有效值保留。
为什么在时区场景中推荐 ???
在处理像时区(timezone)这样的配置时,你可能希望:
- 如果用户传入
null或undefined→ 使用默认值'GMT' - 但如果用户明确传入
''(空字符串)、0、false—— 这些可能是有意为之的配置,你不应该覆盖它们。
示例对比:
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 响应处理等场景中。