具体来说(我不知道在其他情况下是否会发生),当我使用 myString.length && myString === "true"执行
当 int(0) && boolean
时myString = ""
时,它返回 0
而不是返回 bool 值。
alert((function() {
var myString = "";
return myString.length && myString === "true";
})());
我知道我可以通过 myString.length !== 0
或使用 Boolean
进行转换来修复它。但我想了解为什么 &&
不强制将左侧转换为 bool 值。
最佳答案
JavaScript 中的 &&
运算符返回最后计算的其子表达式操作数之一的实际值。在您的情况下,当 .length
为 0
时,该表达式是最后一个要评估的表达式,因为 0
是“假的”。
运算符确实对子表达式值的 bool 值执行强制转换,但它仅使用该结果来确定如何进行。 &&
的整体值因此不一定是 bool 值;仅当评估的最后一个子表达式具有 bool 结果时,它才是 bool 值。
此 JavaScript 行为明显不同于 C、C++、Java 等中类似运算符的行为。
关于javascript - 为什么 `int(0) and boolean` 返回 `int(0)` 而不是 `boolean(false)` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28906024/