【问题标题】:Negation of zero produces false零的否定产生错误
【发布时间】:2012-03-16 12:55:50
【问题描述】:

我遇到了一个问题,即在我的 JavaScript 代码中,对零的否定会产生 false。 我已经简化了代码来演示这个问题,如下所示。

<input id="iid" value="0" />

<script type="text/javascript">
  zero = document.getElementById('iid').value;  
  alert( ( !zero ? 'true' : 'false' ) );  // alert message is "false".
</script>

为什么对零的否定变成

【问题讨论】:

    标签: javascript boolean zero


    【解决方案1】:

    字符串"0"是“true”,取反是false

    如果你想要一个数字,你应该解析它:

    var valueAsNumber = parseInt(document.getElementById('iid').value, 10); 
    

    【讨论】:

      【解决方案2】:

      您正在否定字符串"0"。除空字符串外,任何字符串在取反时都变为false

      !0       true
      !"0"     false
      !""      true
      !+"0"    true
      

      最后一个表达式是true,因为+ 运算符将字符串转换为数字。

      输入值始终是一个字符串,这在语义上也很有意义,因为它是用户输入的字符的组合。如果您想将 is 解释为一个数字,您必须自己将其转换为一个。

      【讨论】:

        【解决方案3】:

        因为这不是数字零,它是一个字符串,其中包含字符“0”。所有非空字符串,无论其中包含什么字符,在被视为布尔值时都是 true

        【讨论】:

          【解决方案4】:

          像这样尝试:

          <input id="iid" value="0" />
          
          <script type="text/javascript">
            zero = Number(document.getElementById('iid').value);  
            alert( ( !zero ? 'true' : 'false' ) );
          </script>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多