Javascript短路(奇怪的使用II / OR运算符)

时间:2015-08-03 19:30:43

标签: javascript angularjs

我遇到了这段代码:

<a  ng-click= "item.statusId !== itemStatus.in || transfer()">

我想我们可以概括为:

<element ng-click = "someVar !== someValue || doStuff()">

一旦我知道他们叫什么,我就找到了这个article on short circuits和另一个more focused one。但是,我仍然没有得到它。

如果第一个语句的计算结果为true,它是否基本上符合OR语句结束评估的原则?因此,如果第一个语句为真,则结束评估,如果结果为假,则在OR语句的后半部分运行该函数? (这是我要问的主要问题,其他一切都是额外的)。

我想我得到的部分是编译器是否以不同方式解释此代码,或者它仍然评估为false并且只运行该函数。甚至不确定如何短语Q.

2 个答案:

答案 0 :(得分:3)

  

如果第一个语句的计算结果为true,它是否基本上符合OR语句结束评估的原则?因此,如果第一个语句为真,则结束评估,如果为假,则在OR语句的后半部分运行该函数?

它是if语句的有效简写,你正确地理解了它的工作原理。有关JavaScript中短路评估的更多详细信息,请参阅this Stack Overflow question

答案 1 :(得分:1)

该代码相当于:

//Note the intentional and explicit use of `== false` to mean falsy (NOT `=== false` to indicate strict equality test for false)
if( (item.statusId !== itemStatus.in) == false ) {
 transfer();
}

只有当条件是假的时,这是一种有趣的执行函数的方法。

many StackOverflow周围有examples this on个{{3}},并非特定于AngularJS。