我正在使用AngularJS开发一个应用程序。我使用了if-else
条件和三元运算符。一旦我找到一个代码{{ !$last && ', ' || '.'}}
将,
放在每个条目之后,.
放在最后。它工作正常,但我对其工作流程感到困惑。它是否像if-else
条件或三元运算符一样工作?我的整个例子如下。
<span data-ng-repeat="allSuppliers in vm.allIncentiveSuppliers | unique:'supplierName'">
{{allSuppliers.supplierName }}{{ !$last && ', ' || '.'}}
</span>
它是三元运算符的一种形式。 &&
如果它是假值,则返回第一个操作数,如果第一个操作数为真,则返回第二个操作数,例如 1 && 3
会返回3
但0 && 3
会返回0
。如果第一个运算符是假的,则不计算第二个运算符。 ||
类似,但如果它是真实的,则返回第一个操作数,如果第一个操作数是假的,则返回第二个操作数。
所以基本上cond && val1 || val2
等价于cond ? val1 : val2
,条件是val1
是真值。如果不是这种情况,例如 cond && 0 || 1
在这种情况下,这将始终返回最后一个值1
。
出于可读性原因,您应该始终首选三元运算器?:
而不是布尔短循环运算符。
,这在&&
只返回布尔值的语言中不起作用,比如 C 和 PHP。在那里,3 && 4
返回 1
/true
,因此您的代码将无法按预期工作。
在 JS 中,&&
返回第一个真值或false
。因此3 && 4
返回3
并且您的代码工作正常。
另一件需要注意的事情是,当你希望&&
的右侧是假的时:
cond() && false || true
将始终返回 true。
三元运算符基本上是 if-else 条件的简写。因此,您提供的语法可以称为两者。
该表达式的其他变体可以是:
{{ !$last ? ', ' : '.'}}
或
{{ $last ? '.' : ','}}