是否有一种非试错法来确定表达式"a Op b ? 布尔值#1:布尔值#2"是否可以确定运算顺序?



场景:

考虑以下 Javascript 表达式:a || b ? 0 : 1

此语句的输出取决于操作顺序。例如,如果a = 1b == 1,如果||优先于?,则输出为 0,否则为 1。因此,您可以运行此代码来确定操作顺序。在这种情况下,输出为 0,因此我们知道||优先于?.

最初,我改用了a && b ? 0 : 1,无论||?的优先级如何,表达式都返回 0。我想想出一些表达式a Op b ? boolean#1 : boolean#2(在本例中为Op = '&&'boolean#1 = 0boolean#2 = 1(,通过它我可以确定||/&&?的优先级顺序。我想到的是,"如果||/&&优先于?,是否有任何表达式a Op b ? boolean#1 : boolean#2给出一个输出,如果?优先,则给出一个不同的输出?还是无论优先级顺序如何,这种形式的每个表达式总是产生相同的值?换句话说,我想知道"是否可以使用a Op b ? boolean#1 : boolean#2形式的表达式来确定||/&&?的优先级顺序"。

我尝试过:

通过反复试验,我发现a || b ? 0 : 1(如文章开头所述(有效:如果a = 1b = 1,则输出取决于优先级顺序(如果||优先,则输出为 0,如果?优先,则输出为 1(。

我想知道的:

这基本上是一个逻辑问题。我使用反复试验来确定"是的,有一个形式表达式a Op b ? boolean#1 : boolean#2您可以使用它来确定||/&&?的优先级顺序",但我想知道是否有更合乎逻辑的概念方法来回答这个问题,即。一种不是反复试验的方法?

检查隐式优先级是否等于显式优先级。

if ((a Op b ? boolean1 : boolean2) === ((a Op b) ? boolean1 : boolean2)) {
console.log('Op takes precedence');
} else {
console.log('? takes precedence');
}

如果你的语句看起来像这样1 && apple == banana ? "true" : "false"它将评估 &&&中的所有内容,如果第一个和第二个是true(以false退出(1 || apple == banana ? "true" : "false"它将评估所有内容以找到true.就我用你的例子测试a || b ? 0 : 1第一个陈述||每次都会接管?,无论a,也b其中一个是否为真。

相关内容

最新更新