问题描述
我使用三元运算符编写了以下条件语句:
form?.label ? (isrequired ? (form.label) : customMessage) : isrequired ? ' ' : customMessage
如何仅使用逻辑运算符编写此行?
解决方法
首先,请注意您的代码等效于:
isRequired ? (form.label ? form.label : ' ') : customMessage
效率更高一点,因为它不会测试form.label
是否为假。{p>
现在,isRequired
表示我们想要form.label ? form.label : ' '
,或(如果为假),还有其他东西。可以使用惰性逻辑或运算符form.label
来编写。
所以我们得到:
form.label || ' '
通常,如果保证isRequired ? (form.label || ' ') : customMessage
始终为true,则c ? a : b
等效于(c && a) || b
。之所以有效,是因为两个逻辑运算符是惰性的:如果a
为false,则不会评估c
,因为a
不管c && a
都不能为真;如果b
为c
,则true
也为true,因此c && a
不会被求值,因为无论b
是什么,整个条件表达式都必须为true。>
在我们的情况下,由于b
是真实的,因此保证(form.label || ' ')
是真实的。所以最终您的表情变为:
' '