2012-08-03 74 views
2

所以这里是我的示例代码 - http://jsfiddle.net/JRqq3/为什么!x将1和0更改为true/false

它输出true/false而不是0/1为什么这样呢?

码 -

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

这是一个布尔运算符,你期望什么? – Bergi 2012-08-03 13:39:48

+0

好吧,不知道;)!谢谢所有答案。 – y2ok 2012-08-03 13:41:18

+1

如果您有兴趣转换为数字,您可以强制它显示为0/1。 'x = Number(!x);' – 2012-08-03 13:42:40

回答

21

由于!操作员在完成其工作时将值强制为布尔值。

+0

该死的,太慢了... +1为第一。 – inVader 2012-08-03 13:39:47

+1

Woa ...我在网站上经过多年的最高投票回答。 – Almo 2012-08-03 13:40:12

+0

Gocha!要尽快接受;)!感谢您的信息。 – y2ok 2012-08-03 13:41:04

4

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

12

因为“!”运算符将该变量的类型转换为布尔值。你可能想要做的:

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

还是有点更快的解决方案:

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

也可以用'x = +!x;'来得到一个数值。 – Michael 2012-08-03 13:40:26

+1

@Michael双重铸造对我来说没有意义:) – 2012-08-03 13:48:36

+1

http://jsperf.com/double-cast-vs-modulo – 2012-08-03 13:50:41

4

因为否定运算的!

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

在这种情况下,0先被转换为假,1被转换为真。然后这些值将被否定。

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 2operator更优雅简洁。

相关问题