2012-08-03 98 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更優雅簡潔。

相關問題