gpt4 book ai didi

javascript - 逻辑 && 和 || JavaScript 中的运算符

转载 作者:行者123 更新时间:2023-11-29 16:46:14 26 4
gpt4 key购买 nike

我想进一步澄清一些事情。

考虑一下:

var a = 42;
var b = "abc";
var c = null;

a || b; // 42
a && b; // "abc"
c || b; // "abc"
c && b; // null

我知道对于 || 运算符,如果对第一个操作数的测试为真,则 || 表达式的结果是第一个操作数的值(a或 c).如果测试为假,则 || 表达式会产生第二个操作数 (b) 的值。

相反,对于 && 运算符,如果测试为真,则 && 表达式会产生第二个操作数 (b) 的值。如果测试为假,则 && 表达式会产生第一个操作数(a 或 c)的值

那么,当您使用 &&|| 运算符时,究竟发生了什么?链接值如下:

if(a && b && c && d && e){
//do something;
}

if(a || b || c || d || e){
//do something
}

链接这些值时究竟发生了什么?因为在第一个示例中(涉及 && 运算符)如果 a 为真,那么应该返回 b 对吧?那么在这一点上甚至考虑了 c 或 d 吗?

最佳答案

So what exactly is happening when you use the && and || operators with chaining values

&& 是一个二元运算符,有一个左手操作数和一个右手操作数。表达式a && b && c && d && e是根据associativity rules解析的所以它看起来像这样:

if (a && (b && (c && (d && e)))) {

根据&&的语义,如果a为假,整个条件立即求值为a,这是假的。如果 a 为真,则表达式求值为右侧,即 b && (c && (d && e)))。在这种情况下,如果 b 为假,则该子表达式以及整个表达式立即求值为 b,这是假的;如果 b 为真,则该子表达式求值到其右侧,即 c && (d && e),然后该过程继续。

最终结果是整个表达式为假的直观行为,因此对于 if 分支 被采纳,它满足 任何 变量都是假的。一旦遇到任何虚假变量,评估就会“短路”——导致虚假——。要使整个表达式为真,并因此要采用 if 分支,所有变量都必须为真。

对于||,逻辑是相反的。为了使整个表达式为真,并因此为采用 if 分支,任何变量为真就足够了。一旦遇到第一个真值,评估就会“短路”——导致真值。要使整个表达式为假,并因此要采用 if 分支 not,所有变量都必须为假。

You Don't Know JS也有很好的解释。

关于javascript - 逻辑 && 和 || JavaScript 中的运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41205110/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com