Javascript 1&&2&&3返回3。有人能解释为什么吗

Javascript 1&&2&&3返回3。有人能解释为什么吗,javascript,Javascript,我最近在一次采访中被问到这个问题。 我知道JavaScript中的求值是从左向右的。 1和2应该为false,对吗? 我在这里读到另一个问题,1&&2返回2。然后返回第一个falsy值。但感觉很模糊。有人能详细说明一下吗?如果&&的左侧计算为假值,则整个表达式的计算结果为左侧 否则,它将计算为右侧 这就是为什么1&&2&&3会给出3。如果&&3的左侧值为假值,则整个表达式的计算结果为左侧值 1 && 2 && 3 否则,它将计算为右侧 这就是为什么1&&2&&

我最近在一次采访中被问到这个问题。 我知道JavaScript中的求值是从左向右的。 1和2应该为false,对吗?
我在这里读到另一个问题,1&&2返回2。然后返回第一个falsy值。但感觉很模糊。有人能详细说明一下吗?

如果&&的左侧计算为假值,则整个表达式的计算结果为左侧

否则,它将计算为右侧


这就是为什么1&&2&&3会给出3。

如果&&3的左侧值为假值,则整个表达式的计算结果为左侧值

1 && 2 && 3 
否则,它将计算为右侧

这就是为什么1&&2&&3会给你3

1 && 2 && 3 
相同的

if (1) {
    if (2) {
        if (3) {
          return 3
        } else {
          return 3
        }
    } else {
        return 2
    }
} else {
    return 1
}


1 && 2 && 3  //3
1 && 0 && 3  //0
1 && false && 3  //false
false && 0 && 3  //false
1 && 0 && false  //0
相同的

if (1) {
    if (2) {
        if (3) {
          return 3
        } else {
          return 3
        }
    } else {
        return 2
    }
} else {
    return 1
}


1 && 2 && 3  //3
1 && 0 && 3  //0
1 && false && 3  //false
false && 0 && 3  //false
1 && 0 && false  //0
AND&&运算符执行以下操作:

从左到右计算操作数

对于每个操作数,将其转换为布尔值。如果结果为false,则停止并返回该操作数的原始值

如果已计算所有操作数,即所有操作数均为真值,则返回最后一个操作数

换言之,并返回第一个falsy值,如果未找到,则返回最后一个值。当所有值都为truthy时,将返回最后一个值

参考:

1和2应该为false,对吗

不,在布尔上下文中的Javascript中,这些值被转换为。转换为的值只有六个,它们是:false、0、空字符串,例如null、undefined和NaN。

and&&运算符执行以下操作:

从左到右计算操作数

对于每个操作数,将其转换为布尔值。如果结果为false,则停止并返回该操作数的原始值

如果已计算所有操作数,即所有操作数均为真值,则返回最后一个操作数

换言之,并返回第一个falsy值,如果未找到,则返回最后一个值。当所有值都为truthy时,将返回最后一个值

参考:

1和2应该为false,对吗

不,在布尔上下文中的Javascript中,这些值被转换为。转换为的值只有六个,它们是:false、0、空字符串,例如null、undefined和NaN。

如果所有值都是truthy或第一个找到的值,则返回最后一个值

console.log1&&2&&3;//3. console.log1&&0&&null;//如果所有值都是真值或第一个找到的值,则0返回最后一个值

console.log1&&2&&3;//3. console.log1&&0&&null;//0&&是表达式上的布尔AND运算符。分部表达式的求值按常规进行,即结果不是“真”布尔值,但被解释为“真”或“假”。 因此,JS引擎必须对所有表达式求值,直到找到第一个falsy值为止。总体结果就是第一个falsy值,解释为false,或者直到没有其他表达式。 该标准要求从左到右进行评估

准确的Falsy/Truthy定义如下:

法尔西: false、0、null、未定义、NaN中的一个 真的: 除非是虚伪的。 这在中的ToBoolean函数的定义中指定。另请参阅MDN上的词汇表,以获得清晰的摘要,

&&是表达式上的布尔AND运算符。分部表达式的求值按常规进行,即结果不是“真”布尔值,但被解释为“真”或“假”。 因此,JS引擎必须对所有表达式求值,直到找到第一个falsy值为止。总体结果就是第一个falsy值,解释为false,或者直到没有其他表达式。 该标准要求从左到右进行评估

准确的Falsy/Truthy定义如下:

法尔西: false、0、null、未定义、NaN中的一个 真的: 除非是虚伪的。
这在中的ToBoolean函数的定义中指定。另请参见MDN上的词汇表,以获得清晰的摘要,

除0之外的所有数字在执行时返回true&执行时返回true&当所有操作数都为true&返回正数值时,1&&2返回2,2&&3将返回3

除0之外的所有数字在执行时返回true&执行时返回正数值时,1&&2返回2,2&&3将返回3

为什么1&&2为假…?我认为您将1==2与1&&2混淆了注意&&不是二进制运算符;那将是&单的&。为什么1&&2会是假的…?我想你把1==2和1&&2混淆了。注意&&不是一个二进制运算符;那将是&single&。这并不重要,因为它们是不可访问的,但是返回2和返回1从何而来?你的意思是返回false,在这种情况下应该还有一个?最后一个例子返回0,不是false,很抱歉让人讨厌;非常感谢。这是有道理的。这并不重要,因为它们是不可访问的,但返回2和返回1从何而来?你的意思是返回false,在这种情况下,应该还有一个
其中?最后一个例子返回0,不是假的,很抱歉让人讨厌;非常感谢。这是有道理的。