角度计算条件是否错误?

时间:2015-04-09 21:06:44

标签: javascript angularjs

根据条件概率定律,陈述

S1 && S2
如果S1为假,

永远不会成立。然而,在角度上,这不是真的。

在我的HTML中,我有这个Angular表达式:

ng-if="file.nodes"

file是一个有时具有node属性的对象,如果有,那么它就是一个数组。 Angular表达式" file.nodes"如果数组存在但它是空的,则求值为false(这已经成问题,因为JS为if语句计算空数组为true)。但是:

ng-if="file.nodes && (file.nodes.length == 0 || true)"

即使数组为空,也会被评估为true。在这种情况下,Angular似乎不仅与JS不一致,而且与自身(或条件概率定律)不一致。我是否相信这是一个错误?因为它似乎是相当令人震惊的。

2 个答案:

答案 0 :(得分:3)

我们知道的一些事情 1)在JS中,空数组的计算结果为" true" 2)一个||如果它的任何一方评估为真,则评估为真 3)和&&要求左侧和右侧评估为真,以便自己评估为真

file.nodes = []

file.nodes && (file.nodes.length == 0 || true) // true

因为在JS中,一个空数组的计算结果为true(左侧为真,现在我们只需要右侧),右侧看起来在parens内部并且看到长度为零所以它甚至不需要检查右侧因为如果左侧为真,则计算结果为true。 现在&&在左侧和右侧发现了真实。

//Next example
file.nodes = [1,2,3]
file.nodes && (file.nodes.length == 0 || true)

左侧返回true,因为JS为非空数组返回true, 右侧看起来在parens里面看到左边的表达是假的,所以然后它检查它的右侧' s ||,这是真的,所以现在你有真正的&&真。

如果你的files.nodes里面有一个数组,你的ng-if看起来永远不会返回false =)

http://plnkr.co/edit/r2JO779Q0EVmpNyNKMjD?p=preview

答案 1 :(得分:0)

对于遇到同样问题的其他人:这是Angular 1.2.x的问题。更新到1.3+,它将被修复。