为什么!x将1和0更改为true / false

时间:2012-08-03 13:36:37

标签: javascript jquery

所以这是我的示例代码 - http://jsfiddle.net/JRqq3/

为什么会这样输出真/假而不是0/1?

代码 -

x = 1;
for(i = 0; i < 20; i++) {
    x = !x;    
    $("body").append(x+"<br />");
}​

5 个答案:

答案 0 :(得分:21)

因为!操作员在执行工作时强制将值赋予bool。

答案 1 :(得分:12)

因为&#34;!&#34; operator将变量的类型转换为bool。你可能想这样做:

for (let i = 1; i <= 20; ++i) {
    $("body").append( String(i % 2) + '<br />');
}​

这里发生了什么? %是模除法运算符。 i % 2表示&#34;将i除以2并返回余数&#34;。

i % 2始终为1或0(除以2的余数始终为0或1)。

答案 2 :(得分:4)

因为通过评估x = !x;,您将类型更改为布尔值而不是整数。

答案 3 :(得分:4)

由于否定运算符

如果参数为真,则返回false,反之亦然。

在这种情况下,0首先被强制转换为false,1被强制转换为true。那么这些价值就会被否定。

答案 4 :(得分:4)

!boolean logic operator并返回一个布尔值。要将true / false转换回1 / 0,您可以使用unary + operator

x = 1;
for(i = 0; i < 20; i++) {
    x = +!x;    
    $("body").append(x+"<br />");
}​

但是,@ Miszy对mod 2 operator的回答更加优雅和简洁。