javascript - Angular 计算条件是否错误?

标签 javascript angularjs

根据条件概率定律,有如下语句

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 =)

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

关于javascript - Angular 计算条件是否错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29549030/

相关文章:

javascript - 如何渲染容器轴的所有值?

javascript - AngularJS $scope 变量无缘无故改变值?

angularjs - Yii2 + AngularJS

javascript - AngularJS 表达式不评估

javascript - 复制 $rootScope

php - 根据需要更新信息

javascript - 在knockout js中使用可观察属性更新UI

javascript - cloneNode() 使 html 视频滞后,有时根本不渲染

angularjs - 如何在 ng-grid 中使用分组设置聚合

javascript - 来自 Protractor 测试的纯 HTTP 调用