将表达式从三元运算符转换为逻辑运算符

问题描述

我使用三元运算符编写了以下条件语句:

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都不能为真;如果bc,则true也为true,因此c && a不会被求值,因为无论b是什么,整个条件表达式都必须为true。>

在我们的情况下,由于b是真实的,因此保证(form.label || ' ')是真实的。所以最终您的表情变为:

' '