【问题标题】:Unusual behaviour with booleans in javascript [duplicate]javascript中布尔值的异常行为[重复]
【发布时间】:2020-05-26 15:59:07
【问题描述】:
在 javascript 中使用布尔值时,我注意到一个不确定性:
"false" && true //this gives output true
false && true //this gives output false
我可以解释一下这种行为吗?
【问题讨论】:
标签:
javascript
boolean
bitwise-and
【解决方案1】:
这并没有什么不寻常的地方。 && 运算符是短路逻辑与。两个条件都需要为true,整个表达式为true,如果任一条件为false,则整个操作为false,其余条件不进行测试。
在第一个示例中,"false" 不是布尔值false,而是字符串"false",它是一个有效的“某物”或"truthy" 值,因此它的计算结果为true。
console.log("false" && true); //this gives output true
在第二个示例中,使用了实际的布尔值false,这(如前所述)导致整个操作为假。
console.log(false && true); //this gives output false
【解决方案2】:
因为空字符串以外的字符串是真值,这就是第一个表达式解析为真的原因
【解决方案3】:
JavaScript 中的非空/未定义/空字符串是 true 用于布尔逻辑目的。在第二种情况下,false && true 是逻辑错误
【解决方案4】:
因为"false" 不是布尔值,而是字符串。无论该字符串包含什么文本以及人类如何直观地解释该文本的含义,它都是一个与其他字符串一样的字符串。
并且任何非空字符串都是"truthy",因为当以布尔方式(强制)评估时,它会产生true 值。