javascript 中布尔值的异常行为

Unusual behaviour with booleans in javascript

在 javascript 中使用布尔值时,我注意到一个不确定性:

"false" && true  //this gives output true
false && true //this gives output false

有人可以解释一下这种行为吗?

因为空字符串以外的字符串是真值,这就是第一个表达式解析为真的原因

non-null/undefined/empty JavaScript 中的字符串是 true 用于布尔逻辑目的。在第二种情况下,false && true 是合乎逻辑的 false

因为 "false" 不是布尔值,而是字符串。无论该字符串包含什么文本以及人们如何直观地解释该文本的含义,它都是一个与其他字符串一样的字符串。

并且任何非空字符串都是 "truthy",因为当以布尔方式(强制)评估时,它会产生 true 值。

这没什么不寻常的。 && 运算符是短路逻辑与。两个条件都需要为true,整个表达式为true,如果任何条件为false,则整个操作为false,其余条件不测试.

在第一个示例中,"false" 不是布尔值 false,而是字符串 "false",这是一个有效的 "something",或者 "truthy" 值,因此它的计算结果为 true.

console.log("false" && true);  //this gives output true

在第二个示例中,使用了实际的布尔值 false,这(如前所述)导致整个操作为假。

console.log(false && true); //this gives output false