空值合并运算符(??)仅在左侧为 null 或 undefined 时返回右侧值,否则返回左侧值;而逻辑或(||)对所有假值(如 0、''、false、NaN)均触发替换。

JavaScript 空值合并运算符(??)用于在左侧操作数为 null 或 undefined 时,返回右侧操作数;否则返回左侧操作数。它和逻辑或(||)看起来相似,但判断“假值”的范围不同——这是两者最核心的区别。
?? 的判定非常精准:只有当左边是 null 或 undefined 时,才用右边的值。其他所有值,包括 0、''(空字符串)、false、NaN,都会被原样返回。
例如:
0 ?? 10 → 0(不是假值,不替换)'' ?? 'default' → ''(空字符串不触发合并)null ?? 'fallback' → 'fallback'
undefined ?? 42 → 42
|| 是基于布尔上下文的“真/假”判断,只要左侧是任何假值(false、0、''、null、undefined、NaN),就返回右边的值。
立即学习“Java免费学习笔记(深入)”;
例如:
0 || 10 → 10(0 是假值,被替换)'' || 'default' → 'default'(空字符串也被替换)false || 'yes' → 'yes'
null || 'oops' → 'oops'
当你想提供默认值,且希望保留“有意义的零值或空字符串”时,用 ?? 更安全。
0 是合法的 → user.age ?? 18 保留 0;而 user.age || 18 会误判成未填,变成 18
config.title ?? 'Untitled' 不会覆盖空字符串;config.title || 'Untitled' 会错误地替换成默认标题data?.price ?? 0 明确处理缺失(null/undefined),不干扰真实为 0 的价格?? 的优先级低于 =、?:,但高于 && 和 ||。不能直接和 || 混用,否则会报错:
val ?? 10 || 20 → 语法错误(需加括号:(val ?? 10) || 20)val ?? (10 || 20) → 合法,先算 10 || 20 得 10,再执行 val ?? 10
?. 使用:obj?.prop ?? 'default'
基本上就这些。选 ?? 还是 ||,关键看你想过滤“所有假值”,还是只兜底“真正缺失的值”。
以上就是javascript空值合并运算符是什么_它与逻辑或有什么区别?的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号