You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中双假值场景下逻辑或操作符的返回逻辑疑问

为什么undefined || ''会返回空字符串而不是undefined?

嘿,这个问题戳中了JavaScript逻辑运算符一个很容易被误解的点——我当初刚学JS的时候也纠结过好久!

首先得纠正一个关键误区:逻辑或||运算符返回的不是布尔值,而是操作数本身,它的规则是这样的:

  • 从左到右依次检查每个操作数
  • 找到第一个「真值(truthy value)」,直接返回它(短路求值,后面的操作数不会再计算)
  • 如果所有操作数都是「假值(falsy value)」,就返回最后一个操作数

回到你的例子undefined || '':

  • 第一个操作数undefined是JS里的假值之一,所以运算符会继续检查第二个操作数
  • 第二个操作数''同样是假值,但因为它是最后一个操作数,所以运算符就返回它,而不是返回布尔值false

你之前的误解是把表达式等价成了Boolean(undefined) || Boolean(''),但实际上逻辑运算符并不会先把操作数转成布尔值再返回——它只用布尔转换的结果来判断流程,但返回的是原始的操作数。

再看你那段greet函数的代码:

function greet(name){ 
  name = name || ''; 
  console.log("Hello " + name); 
}
greet();

这里用name || ''的目的就是给name设置默认值:当调用函数没传参数时,name是undefined(假值),所以表达式返回'',避免输出Hello undefined;如果传入的name是其他假值(比如null、0甚至false),也会被替换成空字符串。

顺便提一句,ES6之后我们有更直观的默认参数写法:

function greet(name = ''){ 
  console.log("Hello " + name); 
}
greet();

这种写法的效果和之前的name || ''类似,但语义更清晰,也不会把一些合法的假值(比如0)替换掉,如果你需要保留0这类值的话,ES6默认参数会更合适。

内容的提问来源于stack exchange,提问作者Rafa Romero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:50:29