【问题标题】:Javascript && and || operators and in line ternary functions produces INSANE results [duplicate]Javascript && 和 ||运算符和内联三元函数会产生 INSANE 结果 [重复]
【发布时间】: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


【解决方案1】:

你期待的是

'1' || ((true) ? '2' : '3')

,但基本上你正在做的是

('1' || (true)) ? '2' : '3'

您正在为 if 语句创建简写,其中左侧部分被评估,然后返回正确的值,因此 '1' 评估为 true,这样您将得到 '2' 作为结果

【讨论】:

    【解决方案2】:

    console.log('1' || (true) ? '2' : '3');
    //is interpreted as 
    console.log(('1' || true) ? '2' : '3');
    //you mean to write
    console.log('1' || (true ? '2' : '3'));

    【讨论】:

      猜你喜欢
      • 2021-09-10
      • 2021-04-14
      • 2016-06-26
      • 2018-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多