有人可以向我解释为什么这会返回一个空字符串(“”)而不是一个布尔值(false)?
var x = ""; alert(x && x.length > 0);
…虽然这按预期工作,但返回true:
var y = "abc"; alert(y && y.length > 0);
我基本上只是尝试做一个简单的速记检查,看一个变量中是否存在一个值(确保它不是未定义的,null或空字符串).
我知道我可以单独进行每个测试(x == null,typeof x ==’undefined’,x ==”) – 我只是想了解为什么Javascript会返回一个看似布尔测试的字符串.
解决方法
当满足JavaScript中的条件运算符时,它返回最后计算的值.
var x = ""; alert(x && x.length > 0);
空字符串是假的,因此当您在条件中仅使用x时,它将为false.因为你正在使用&&,如果LHS是假的,那么没有理由去检查RHS.这是short circuit evaluation.因此,最后一个评估的部分,即空字符串,将返回到alert().
var y = "abc"; alert(y && y.length > 0);
非空字符串是真实的.因此LHS是正确的,因为它是&&,所以评估RHS(它需要知道整个条件是否为真). y.length的返回值> 0为真,因此传递给alert().