Javascript 使用'&&';和'||';在三元运算符(';?';和';:';)上?
在JavaScript中,使用Javascript 使用'&&';和'||';在三元运算符(';?';和';:';)上?,javascript,conditional,conditional-operator,Javascript,Conditional,Conditional Operator,在JavaScript中,使用 true ? 'Hello' : 'Goodbye' //Evaluates to "Hello" false ? 'Hello' : 'Goodbye' //Evaluates to "Goodbye" 及 第一种情况是内联if语句的示例,而第二种情况是逻辑谓词的示例。三元运算符 这是if-else的缩写 true ? 'Hello' : 'Goodbye' 相当于 if (true) { 'Hello' } else { 'Goodbye
true ? 'Hello' : 'Goodbye' //Evaluates to "Hello"
false ? 'Hello' : 'Goodbye' //Evaluates to "Goodbye"
及
第一种情况是内联if语句的示例,而第二种情况是逻辑谓词的示例。三元运算符 这是
if-else
的缩写
true ? 'Hello' : 'Goodbye'
相当于
if (true) {
'Hello'
} else {
'Goodbye'
}
(true && 'Hello') || 'Goodbye'
逻辑谓词
而true&&“Hello”| |“再见”
不是if-else
条件
true && 'Hello' || 'Goodbye'
相当于
if (true) {
'Hello'
} else {
'Goodbye'
}
(true && 'Hello') || 'Goodbye'
这会导致Hello
,但它是基于优先级的。考虑
'Goodbye' || (true && 'Hello')
这将导致
再见
。改变顺序会改变输出,但三元运算符不会发生这种情况。这是两个不同的概念,恰好给出了相同的答案
第一个示例使用and,其结果仅取决于第一个操作数(在您的示例中
true
/false
):
它是if
/else
的简写形式。如果第一个操作数为truthy,则返回第二个操作数(Hello
)。如果第一个操作数为falsy,则返回第三个操作数(再见
)
第一个示例的第一个表达式可以重写为:
if (true)
return 'Hello';
else
return 'Goodbye';
第二个示例使用and,其结果取决于第一个和第二个操作数
true && 'Hello' || 'Goodbye' //Evaluates to "Hello"
false && 'Hello' || 'Goodbye' //Evaluates to "Goodbye"
如果firstOperand&&secondOperand
的计算结果为真实值,则返回secondOperand
。如果他们的评估结果不正确,请返回thirdOperand
(再见
)
在您的示例中,由于非空字符串是truthy,true&&“Hello”
的计算结果为Hello
,而false&“Hello”
的计算结果为false
true ? 'Hello' : 'Goodbye'
第二个例子变成:
'Hello' || 'Goodbye'
false || 'Goodbye'
由于工作方式的不同,第一个示例的输出正好是这样,但它们是不同的概念
请注意,在第一个示例中,我们知道在计算第一个操作数后返回什么。在第二个示例中,我们必须先计算前两个操作数,然后才能知道返回什么。结果似乎没有差别。但我猜他们是怎么处理的
()?:
实际上比和&&&|
快一点点(参见下面的演示)
(A)B?C:
基本上是一个IF速记,因此对(A)
部分进行求值,然后选择B
或C else
堆栈
(A)和&B|C
得到完全评估。首先计算(A)
。之后会发生一些事情,这需要一些时间
错误-thx至“Gust van de Wal”
还是有区别:
var max=1e7;
var start1=(新日期()).getTime();
对于(变量i=0;i 控制台日志(stop2-start2)代码>后者取决于“Hello”
处的值是否真实。考虑<代码>真与假>真< /代码> vs>代码>真的吗?false:true
第一个在我看来更具可读性。这肯定是一件事,尽管实际上还有另一个区别。它对于无分支代码很有用。这可以防止分支预测失败。我的观点是,你的答案中有一个错误。“A&B|C被完全评估”是不真实的,如果A和B都是真实的,你是对的!看一看。只有一种情况仍然存在差异。还有“仍然”吗?短路解释了这种行为,所以我真的不明白你在说什么