Javascript返回字符串应该是一个简写布尔测试

kma*_*man 7 javascript boolean

有人可以向我解释为什么这会返回一个空字符串("")而不是一个布尔值(false)?

var x = "";
alert(x && x.length > 0);
Run Code Online (Sandbox Code Playgroud)

...虽然这按预期工作,但返回true:

var y = "abc";
alert(y && y.length > 0);
Run Code Online (Sandbox Code Playgroud)

我基本上只是尝试做一个简单的速记检查,以查看变量中是否存在值(确保它不是未定义,null或空字符串).

我知道我可以单独进行每个测试(x == null,typeof x =='undefined',x =='') - 我只是想了解为什么Javascript会返回一个看起来像布尔测试的字符串.

ale*_*lex 7

当满足JavaScript中的条件运算符时,它返回最后计算的值.

var x = "";
alert(x && x.length > 0);
Run Code Online (Sandbox Code Playgroud)

空字符串是假的,因此当您x在条件中使用时,它将为false.因为你正在使用&&,如果LHS是假的,那么没有理由去检查RHS.这是短路评估.因此,返回最后一个评估的部分,即空字符串alert().

var y = "abc";
alert(y && y.length > 0);
Run Code Online (Sandbox Code Playgroud)

非空字符串是真实的.所以LHS是真的,因为它是一个&&,RHS被评估(它需要知道整个条件是否为).返回值y.length > 0true,所以传递给你的alert().