【问题标题】:Javascript ternary operationJavascript三元运算
【发布时间】:2017-01-20 21:31:42
【问题描述】:

我在一些代码中看到了以下内容。 || 有必要吗错误的?如果有必要,怎么做?

object.key = myData ? myData.value : false || false;

【问题讨论】:

  • 我不知道为什么会有|| false 那里
  • 我从未在不属于条件的三元运算中看到||。我知道的唯一格式是标准condition ? true : false
  • || false 对我来说也没有任何意义。你确定你没有错过代码周围的任何括号 () 吗?例如,如果原始代码采用 object.key = (myData ? myData.value : false) || false; 形式,那么它会更有意义。

标签: javascript ternary-operator


【解决方案1】:

快速回顾

? 是三元运算符

:分隔三元算子的输出状态

|| 通常是 OR 运算符,但在这种情况下,我认为它旨在用作合并运算符

= myData ? myData.value : false

...将返回来自 myData 的值,如果它不为空;否则返回 false。

false || false

... 将始终返回 false。

= myData || false

...如果 myData 不为 null,则返回,否则返回 false。

如果我不得不猜测,我想可能最初的代码是这样写的:

= myData.value || false

...在他们意识到他们需要一个非空对象来获取value之前。

也许他们的意思

= (myData ? myData.value : false) || false;

...如果 myData.value 为非 null,则返回 false,如果 myData 或 myData.value 为 null。

但如果这是你想要的,我会写它

= myData ? myData.value || false : false;

【讨论】:

    【解决方案2】:

    只有在需要虚假值是false而不是虚假值时才有意义。

    但这需要括号来实现。

    var myData;
    console.log(myData ? myData.value : false || false);   // false
    console.log((myData ? myData.value : false) || false); // false
    
    myData = {};
    myData.value = undefined;
    console.log(myData ? myData.value : false || false);   // undefined
    console.log((myData ? myData.value : false) || false); // false
    
    myData.value = 0;
    console.log(myData ? myData.value : false || false);   // 0
    console.log((myData ? myData.value : false) || false); // false
    
    myData.value = '';
    console.log(myData ? myData.value : false || false);   // ''
    console.log((myData ? myData.value : false) || false); // false
    
    myData.value = 'foo';
    console.log(myData ? myData.value : false || false);   // foo
    console.log((myData ? myData.value : false) || false); // foo
    
    myData.value = true;
    console.log(myData ? myData.value : false || false);   // true
    console.log((myData ? myData.value : false) || false); // true

    【讨论】:

      【解决方案3】:

      我很确定这里不需要“false || false”。但是,下面的表达式更有意义。

      object.key = (myData ? myData.value : false) || false;
      

      这使用“或”将值(可以是真值或假值)与假值进行比较。因此,在 myData.value 不是“真”的情况下,对象键将被设置为“假”。

      【讨论】:

        【解决方案4】:

        由于operator precedence,逻辑或|| 在条件(三元)运算符之前计算。在所有情况下,这意味着您的表达式的计算结果为:

        object.key = myData ? myData.value : false;
        

        关于 myData 可能值的考虑现在只是噪音。

        【讨论】:

          猜你喜欢
          • 2020-04-29
          • 1970-01-01
          • 2019-11-09
          • 2012-02-11
          • 2016-06-26
          • 2016-01-15
          • 1970-01-01
          • 2011-07-02
          相关资源
          最近更新 更多