根据条件概率定律,有如下语句
S1 && S2
如果 S1 为假,将永远不会为真。然而,在 Angular 中,这并不总是正确的。
在我的 HTML 中,我有这个 Angular 表达式:
ng-if="file.nodes"
file 是一个对象,有时具有 node 属性,如果具有,则它是一个数组。如果数组存在但为空,则 Angular 表达式“file.nodes”的计算结果为 false(这已经是有问题的,因为对于 if 语句,JS 将空数组计算为 true)。但是:
ng-if="file.nodes && (file.nodes.length == 0 || true)"
即使数组为空,也会被评估为 true。在这种情况下,Angular 似乎不仅与 JS 不一致,而且与其自身(或条件概率定律)也不一致。我认为这是一个错误正确吗?因为如果是的话,这似乎相当令人震惊。
最佳答案
一些我们知道的事情 1) 在 JS 中,空数组的计算结果为“true” 2) 一个||如果任一侧计算结果为真,则计算结果为真 3) && 需要左侧和右侧都评估为 true 才能评估为 true
file.nodes = []
file.nodes && (file.nodes.length == 0 || true) // true
因为在 JS 中,一个空数组的计算结果为 true(左边为 true,现在我们只需要右边),而右边查看括号内,发现长度为零,所以它甚至不需要检查右边因为如果左侧为真,则其计算结果为真。 现在&&在左边和右边都找到了true。
//Next example
file.nodes = [1,2,3]
file.nodes && (file.nodes.length == 0 || true)
左边返回true,因为JS对于非空数组返回true, 右侧查看括号内,发现左侧表达式为 false,因此它检查右侧的 ||,结果为 true,所以现在您得到了 true && true。
如果你的 files.nodes 里面有一个数组,看起来你的 ng-if 永远不会返回 false =)
关于javascript - Angular 计算条件是否错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29549030/