javascript中的短路评估

javascript中的短路评估,javascript,optimization,functional-programming,expression,conditional-statements,Javascript,Optimization,Functional Programming,Expression,Conditional Statements,我需要在代码中实现短路评估逻辑。我读了一些文章来了解它。但他们没有详细介绍,我尝试了一些例子 例: 表情 案例1 a&b&c 案例2 a | | b&c 案例3 a和c|b 案例1: c将不被执行 案例2: b和c将不被执行 案例3: b将不被执行 我们应该从哪里了解短路评估 我们应该从哪里了解短路评估 它很方便,就像现在一样 但简短的版本是: 始终计算到&&或| |的左手操作数,从而得到左手值 使用&,如果左侧值为false,则不计算右侧操作数;表达式的值是左边的值 对于| |,如果左侧值为t

我需要在代码中实现短路评估逻辑。我读了一些文章来了解它。但他们没有详细介绍,我尝试了一些例子

例:

表情

案例1 a&b&c

案例2 a | | b&c

案例3 a和c|b

案例1:

c将不被执行

案例2:

b和c将不被执行

案例3:

b将不被执行

我们应该从哪里了解短路评估

我们应该从哪里了解短路评估

它很方便,就像现在一样

但简短的版本是:

始终计算到&&或| |的左手操作数,从而得到左手值

使用&,如果左侧值为false,则不计算右侧操作数;表达式的值是左边的值

对于| |,如果左侧值为truthy,则不计算右侧操作数;表达式的值是左边的值

否则,将计算右侧操作数,表达式的结果为其值

Falsey值是用作布尔值时强制为false的任何值。它们是0、NaN、未定义、null,当然还有false

真实值是指任何不虚假的值

更多关于我的博客:。我一直想做&&版本的那个

我们应该从哪里了解短路评估

它很方便,就像现在一样

但简短的版本是:

始终计算到&&或| |的左手操作数,从而得到左手值

使用&,如果左侧值为false,则不计算右侧操作数;表达式的值是左边的值

对于| |,如果左侧值为truthy,则不计算右侧操作数;表达式的值是左边的值

否则,将计算右侧操作数,表达式的结果为其值

Falsey值是用作布尔值时强制为false的任何值。它们是0、NaN、未定义、null,当然还有false

真实值是指任何不虚假的值


更多关于我的博客:。我一直想做那个的&&版本…

@t-j-crowder:谢谢你的信息。知道为什么总是计算左手操作数吗?比如说,你可以打电话| |真的,你就会知道结果会是真的,那么为什么还要费心打电话呢?基本上,我只是担心我能依赖它。@rjcarr:左边的操作数总是被计算的,因为操作符就是这样定义的。这个定义是有意义的:你必须从某个地方开始记住,在你评估它之前,你不知道你的例子中的真是真的,在我们的数学中,大多数运算是从左到右进行的。是的,您完全可以知道call | | true将调用call,然后如果结果为真,则返回其结果;如果call的结果为假,则返回true。@t-j-crowder:谢谢您提供的信息。知道为什么总是计算左手操作数吗?比如说,你可以打电话| |真的,你就会知道结果会是真的,那么为什么还要费心打电话呢?基本上,我只是担心我能依赖它。@rjcarr:左边的操作数总是被计算的,因为操作符就是这样定义的。这个定义是有意义的:你必须从某个地方开始记住,在你评估它之前,你不知道你的例子中的真是真的,在我们的数学中,大多数运算是从左到右进行的。是的,您完全可以知道,call | | true将调用call,然后如果结果为真,则返回其结果;如果call的结果为假,则返回true。如果下面的答案回答了您的问题,堆栈溢出的工作方式,您可以通过单击它旁边的复选标记来接受答案。但前提是你的问题得到了回答;如果不是,考虑在问题上增加更多的细节,或者如果你自己以一种与现有答案截然不同的方式回答它,那么把你自己的答案发布出来并接受它是完全好的,这样会让你等两天来接受它。请看我关于短路的小博客,我希望它能对你有所帮助:如果下面的答案回答了你的问题,堆栈溢出的工作方式,你会通过点击旁边的复选标记来接受答案。但前提是你的问题得到了回答;如果不是,考虑在问题上增加更多的细节,或者如果你自己以一种与现有答案截然不同的方式回答它,那么完全地发布你自己的答案并接受它会让你等两天来接受它。
function a() {return true;}

function b() {return false;}

function c() {return true;}