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
在 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