场景:
考虑以下 Javascript 表达式:a || b ? 0 : 1
此语句的输出取决于操作顺序。例如,如果a = 1
和b == 1
,如果||
优先于?
,则输出为 0,否则为 1。因此,您可以运行此代码来确定操作顺序。在这种情况下,输出为 0,因此我们知道||
优先于?
.
最初,我改用了a && b ? 0 : 1
,无论||
和?
的优先级如何,表达式都返回 0。我想想出一些表达式a Op b ? boolean#1 : boolean#2
(在本例中为Op = '&&'
、boolean#1 = 0
和boolean#2 = 1
(,通过它我可以确定||
/&&
与?
的优先级顺序。我想到的是,"如果||
/&&
优先于?
,是否有任何表达式a Op b ? boolean#1 : boolean#2
给出一个输出,如果?
优先,则给出一个不同的输出?还是无论优先级顺序如何,这种形式的每个表达式总是产生相同的值?换句话说,我想知道"是否可以使用a Op b ? boolean#1 : boolean#2
形式的表达式来确定||
/&&
与?
的优先级顺序"。
我尝试过:
通过反复试验,我发现a || b ? 0 : 1
(如文章开头所述(有效:如果a = 1
和b = 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
其中一个是否为真。