javascript - 为什么 `int(0) and boolean` 返回 `int(0)` 而不是 `boolean(false)` ?

标签 javascript comparison

具体来说(我不知道在其他情况下是否会发生),当我使用 myString.length && myString === "true"执行 int(0) && booleanmyString = "" 时,它返回 0 而不是返回 bool 值。

alert((function() {
    var myString = "";
    return myString.length && myString === "true";
})());

我知道我可以通过 myString.length !== 0 或使用 Boolean 进行转换来修复它。但我想了解为什么 && 不强制将左侧转换为 bool 值。

实例:http://jsfiddle.net/uqma4ahm/1/

最佳答案

JavaScript 中的 && 运算符返回最后计算的其子表达式操作数之一的实际值。在您的情况下,当 .length0 时,该表达式是最后一个要评估的表达式,因为 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/

相关文章:

ios - 使用 isEqualToNumber 方法比较两个 NSNumber

java - 比较Java泛型时如何避免字符串硬编码?

javascript - jQuery Click 问题的 slideUp 和 SlideDown

javascript - 如何使用 indexOf 在 JavaScript/jQuery 中搜索数组键

file - 使用 Junit 比较两个 xml 文件

python - 大于/小于 Python 中的比较

javascript - 如何取回被过滤的数据(ReactContextAPI)

javascript - 有没有办法阻止 401 未经授权登录控制台?

javascript - 在 JavaScript 中使用全局变量

c# - 检查列表是否包含一个属性相同的对象的优雅方法,并且仅在另一个属性的日期较晚时才替换