【问题标题】: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>