有人可以解释javascript中的逻辑运算符

时间:2014-03-13 09:16:42

标签: javascript

我在chrome console中做了一些练习

>>var a = 2;
>> a || 3
2 
and
>>a && 3
3

为什么以及如何...输出不应该是真或假,请解释一下,也许我错了,我认为这些算子应该返回true或false。

5 个答案:

答案 0 :(得分:2)

如果lVal是真正的 [2] ,则逻辑AND(&&)运算符会计算其右操作数。 值。

类似地,如果lVal是伪造的 [1] 值,则逻辑OR(||)运算符会计算其右操作数。

因此,引用ES5规范

  

[...]和&&amp ;;或|| operator 不一定是Boolean类型。生成的值始终两个操作数表达式之一的值。 {{ 3}}

来自MDN文章(ES5 §11.11)

Operator            |   Usage               |   Description
_____________________________________________________________________________________________________
Logical AND (&&)    |   expr1 && expr2      |   Returns expr1 if it can be converted 
                    |                       |   to false; otherwise, returns expr2.   
                    |                       |   Thus, when used with Boolean values,
                    |                       |   && returns true if both operands are true; otherwise, returns false.
_________________________________________________________________________________________________
Logical OR (||)     |   expr1 || expr2      |   Returns expr1 if it can be converted to true; otherwise, returns expr2.   
                    |                       |   Thus, when used with Boolean values,
                    |                       |   || returns true if either operand is true; if both are false, returns false.

[1]如果值可以转换为false,则该值被视为假   这适用于值false0""nullundefinedNaN

[2]真实值是任何非虚假的值 [1]

答案 1 :(得分:1)

如果您在控制台中键入单个数字或其他任何内容,则会发生这种情况。你得到了最后评估的东西。

你实际上是在说(以伪代码而不是JS)

[return value] = 2 or 3

2评估为true,因此无需评估3(短路评估)。要评估的最后一件事是2,所以你得到2

[return value] = 2 and 3

2true,因此也评估3。要评估的最后一件事是3,因此您得到3

Mozilla Developer Network上解释了这一点。

答案 2 :(得分:0)

一般来说,

  

当等式的所有元素都是布尔类型

时,逻辑运算符返回布尔值

否则他们就像

一样
// b assign a. If !a then assign 3
var b = a || 3;

// b assign a but only if it would evaluate to false. Otherwise assign 3
var b = a && 3;

答案 3 :(得分:0)

当你有a || b JavaScript评估表达式并将正在评估的第一个值返回到true时,在你的情况下2(其中一个原因是懒惰的评估)。

在第二个示例a && b中,JavaScript需要同时评估ab,以确保连词为true。这样,JavaScript会将最后评估的内容返回到true - 3。如果表达式被评估为false,则解释器将为您提供false(如果任何操作数被评估为false,则会发生这种情况。)

答案 4 :(得分:0)

如果您检查a || b并且a被转换为真值,则此表达式将返回第一个真实操作数,因为它足以评估OR表达式,而不会继续评估(2 || 3将返回2,但0 || 3将返回3,因为零被视为虚假值)

但是如果你检查2 && 3,你必须确保两个操作数都是真的,所以javascript将对它们进行全部评估并返回最后一个操作数评估(如果你检查3 && 0 && 2表达式将返回{{ 1}}因为这个操作数是假的 - 作为0表达式 - 没有必要进一步评估)

此行为解释了为什么AND||也称为短路布尔运算符

如果你想要整个表达式的布尔结果只是尝试这种方式

&&

示例:

!!(<expression>)