2015-02-09 132 views
0

再一次,這將是一個新手問題,即時通訊只是試圖清楚我的頭如何JavaScript解釋布爾表達式。= vs ===布爾表達式的運算符

好了,所以說,我有以下的代碼位:

var boolean = true; 
while(boolean){ 
boolean === false; 
}; 

這進入一個無限循環,由於使用相同===運算符的。這是因爲JavaScript在使用簡寫表達式while(布爾值)時將JavaScript布爾表達式「true」存儲爲數字「1」。那麼while(boolean)實際解釋爲while(boolean === 1)而不是while(boolean === true)?

+1

@Izzy:否,在這種情況下,混亂是'='和''===(和之間其他事情)。 – 2015-02-09 11:38:17

回答

0

=是賦值運算符。寫

var bool = false; 

意味着「設置名爲‘布爾’爲‘假’變」

雖然===是全等運算符。寫作

bool === false; 

檢查變量'bool'是否包含'false'的確切值。它的意思是「變量'bool'的值是否爲'false'?」

它將返回一個布爾值:如果布爾值保留爲false,則返回true,否則返回false。在這種情況下,它返回true。

它會進入無限循環,因爲'bool'永遠不會更改值。將其設置爲true時,使用=

bool = true; 
4

這是因爲JavaScript存儲布爾表達式「真」作爲數字「1」,同時使用的簡寫表達,而(布爾值)。

所以是同時(布爾)實際上解釋爲,而(布爾=== 1),而不是同時(布爾===真)?

持續循環,因爲你在做什麼在循環中改變你的boolean變量的值號。該行

boolean === false; 

...沒有效果;你正在做一個比較而不是將它的結果存儲在任何地方。

您似乎有====困惑。他們做了完全不同的事情。這裏有一個破敗:

  • =賦值運算符。這是你用來分配值的東西。 boolean = true;的值true分配給變量boolean

  • ===嚴格平等運算符。它用於查看兩件事是否嚴格相等(「嚴格」=「沒有類型強制」)。因此a === b評估true如果ab包含具有相同類型的值是等價的。

  • ==鬆散平等運算符。它用於查看兩件事情是否鬆散相等(「寬鬆」=「使用類型強制」)。因此,a == b將評估true如果a === b將爲真如果ab有不同的類型,但類型強制可以將一個或另一個轉換爲其他類型。 (對於這個規則是複雜的,但例如"" == 0評估true因爲""脅迫到0。)