【发布时间】:2018-11-27 17:47:12
【问题描述】:
var str = '1' || '2'
console.log(str) 输出 1 好吧……有道理。 1 是 '||' 的前面,所以 '||' 之后的内容无关紧要
var str = '1' || (true) ? '2' : '3'
console.log(str) 输出 2 ...什么?!这不应该发生。 '1' 在 '||' 前面
var str = '1' || (false) ? '2' : '3'
console.log(str) 输出 2 ...好吧,JS 回家吧,你显然喝醉了。
【问题讨论】:
-
我很惊讶它甚至在
||之后进行评估——当我最近尝试这个时,我不得不将我的所有语句分组在 OR 语句之后以获得所需的结果:var str = nullString || ( (boolStringTest)? 'stringA' : 'stringB' );跨度> -
"console.log(str) 输出 2 ...什么?!这绝不应该发生。" 为什么不呢?
1为真,因此表达式的计算结果为真。 -
查找运算符优先级。您在错误假设下查看这些示例。
-
所以,
'1' || (true)首先评估的是真/假语句——然后它正在寻找值?为了更好的可读性,代码思考:var str = ( '1' || (true/false) )? '2' : '3';? -
这个问题与运算符优先级和类型转换有关,没有描述两者的答案,我写了一个答案但问题现在已关闭,所以无法发布
标签: javascript ternary-operator