Jac*_*ack 4 javascript conditional conditional-operator
在JavaScript中,使用之间有什么区别
true ? 'Hello' : 'Goodbye' //Evaluates to "Hello"
false ? 'Hello' : 'Goodbye' //Evaluates to "Goodbye"
Run Code Online (Sandbox Code Playgroud)
和
true && 'Hello' || 'Goodbye' //Evaluates to "Hello"
false && 'Hello' || 'Goodbye' //Evaluates to "Goodbye"
Run Code Online (Sandbox Code Playgroud)
这两个不同的概念碰巧给你相同的答案.
第一个例子使用的三元运算符和它的结果取决于仅在第一个操作数(在你的榜样true/ false):
true ? 'Hello' : 'Goodbye' //Evaluates to "Hello"
false ? 'Hello' : 'Goodbye' //Evaluates to "Goodbye"
Run Code Online (Sandbox Code Playgroud)
它是一种的简写形式if/ else.如果第一个操作数是真值,则返回第二个操作数(Hello).如果第一个操作数是假的,则返回第三个操作数(Goodbye).
您的第一个示例的第一个表达式可以重写为:
if (true)
return 'Hello';
else
return 'Goodbye';
Run Code Online (Sandbox Code Playgroud)
第二示例使用的逻辑运算符和它的结果取决于两者的第一和第二个操作数.
true && 'Hello' || 'Goodbye' //Evaluates to "Hello"
false && 'Hello' || 'Goodbye' //Evaluates to "Goodbye"
Run Code Online (Sandbox Code Playgroud)
如果firstOperand && secondOperand评估为真值,则返回secondOperand.如果他们评价某些东西,返回thirdOperand(Goodbye).
在您的示例中,由于非空字符串是真实的,因此true && 'Hello'求值Hello并false && 'Hello'求值false.
所以你的第二个例子变成了:
'Hello' || 'Goodbye'
false || 'Goodbye'
Run Code Online (Sandbox Code Playgroud)
由于||工作原理如何,这会输出您的第一个示例输出的内容,但它们是不同的概念.
注意在第一个例子中,我们知道在评估第一个操作数后要返回什么.在第二个例子中,我们必须在知道返回什么之前评估前两个操作数.
这是 的短手if else。
true ? 'Hello' : 'Goodbye'
Run Code Online (Sandbox Code Playgroud)
相当于
if (true) {
'Hello'
} else {
'Goodbye'
}
Run Code Online (Sandbox Code Playgroud)
whiletrue && 'Hello' || 'Goodbye'不是一个if else条件
true && 'Hello' || 'Goodbye'
Run Code Online (Sandbox Code Playgroud)
相当于
(true && 'Hello') || 'Goodbye'
Run Code Online (Sandbox Code Playgroud)
这会产生结果Hello,但它是基于优先级的。考虑以下情况
'Goodbye' || (true && 'Hello')
Run Code Online (Sandbox Code Playgroud)
这将导致Goodbye. 更改顺序会更改输出,但三元运算符不会发生这种情况。