【问题标题】:Why is !true ? 'false' : 'true' returning 'true'?为什么是 !t​​rue ? “假”:“真”返回“真”?
【发布时间】:2020-01-26 03:58:19
【问题描述】:

为什么当我这样做的时候

(!true) ? 'false' : 'true'

它返回'true'?

【问题讨论】:

  • 仅供参考,如果您碰巧想要变量中的字符串 'true' 或 'false',您也可以输入:!var+''(或 !!var+'',如果您想翻转)
  • 你期望它返回什么?
  • 为什么这个问题没有一个接受的答案?
  • @Buhake,也许 JM at Work 对没有右括号的左括号感到困惑,不想接受?
  • @Sebastian Langer,啊啊!发现得很好,在发布原始答案 2 年后!谢谢! :-)

标签: javascript


【解决方案1】:

这只是意味着

if (!true) {
  return 'false';
} else {
  return 'true';
}

!true(不正确)表示false,因此返回else。

【讨论】:

    【解决方案2】:

    A ? B : C 的语法表示如果 A 为 TRUE,则返回值 B。否则返回值 C。由于 A 为 FALSE,因此返回值 C,恰好是 true。

    【讨论】:

      【解决方案3】:

      因为(!true)为假,所以选择:的右边。

      【讨论】:

      • 真为假,假为真。笏
      【解决方案4】:

      因为上面等价于:

      if (false) {
          return 'false';
      } else {
          return 'true';
      }
      

      虽然混淆可能来自以下之间的差异:

      if (false) // which is false
      

      和

      if (false == false) // which is true
      

      【讨论】:

      • 我认为你的意思是“真实”;)
      • 你的意思是else { return 'true'; } :)
      • 我也相信确实如此
      【解决方案5】:

      这可以扩展为:

      if(!true){
         return 'false';
      } else {
         return 'true';
      }
      

      【讨论】:

        【解决方案6】:

        混淆之处在于使用字符串文字来表示布尔值。如果把'false'和'true'颠倒过来,就更有意义了:

        (!true) ? 'true' : 'false'

        将返回字符串文字 false,这与 boolean 值有很大不同。

        你原来的声明 (!true) ? 'false' : 'true' 读作

        “如果不为真,则返回字符串字面量为真”。

        我首先发布的声明是

        “如果不为真,则返回字符串字面量假”。

        如果你知道 true 的相反 (not) 值是 false,那么它解释了所示逻辑。

        【讨论】:

          【解决方案7】:

          if(!true) 等价于if(!true= true) 等价于if(false=true) 即false。因此return (true) 在if 语句的错误方面。

          【讨论】:

          • 你不能设置真等于假。至少用理智的语言。
          • 我想你的意思是if(!true==true)
          • JS 是一种理智的语言:ReferenceError: invalid assignment left-hand side
          【解决方案8】:

          const test = true; // change this value to see the result change  
           
           if (!test) { // if test is NOT truthy
               console.log('false')
           } else { // if test === true
               console.log('true')
           }
          // Since in the original question a ternary expression was used, the above code is equivalent to this:
          
          !test ? console.log('false') : console.log('true');
          

          【讨论】:

            猜你喜欢
            • 2014-09-07
            • 1970-01-01
            • 2018-07-01
            • 2013-11-09
            • 2019-01-30
            • 1970-01-01
            • 2015-10-05
            • 1970-01-01
            相关资源
            最近更新 更多