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
相关产品推荐
相关产品推荐

