2014-12-05 54 views
2

我正在評估在今天控制檯的東西,當我輸入,併成爲好奇以下是瞎搞:傻JS比較

1 === 1 === 1評估爲false

1 == 1 == 1評估爲true

是第一次比較試圖評估整體的1 === 1類型?

什麼是這種現象的原因?

+0

第1'說1 =布爾值true,但 第二轉換Boolean如果1 – MatthewMartin 2014-12-05 15:48:21

+1

[1 === 1 === 1 => true === 1 => false]和[x = true; X == 1 =>真] http://www.w3schools.com/js/js_comparisons.asp – SilentTremor 2014-12-05 16:08:27

+0

肯定,這是很有意義的。這也意味着'0 == 0 == 1'將是真實的,以及隨後。 – 2014-12-05 16:11:08

回答

1

簡單的答案是,==嘗試類型轉換而===沒有。

的兩個實施例中評價的順序是相同的,並且是這樣的:

(1 === 1) === 1 
(1 == 1) == 1 

所以第=====比較完成,其結果被用作操作數的第二===== 。就像這樣:

(1 === 1) === 1 
// v   v 
    (true) === 1 


(1 == 1) == 1 
// v  v 
    (true) == 1 

所以你可以看到,我們現在真的在談論:

true === 1 

true == 1 

所以不同的結果,從這樣一個事實正如我上面提到,該===不會嘗試轉換任何類型,而==會嘗試將它們轉換爲匹配的類型。

所以無需轉換,則顯然true === 1將是false因爲他們是不一樣的價值,但在true == 1的情況下,true被轉換爲數字,和值true的數字轉換始終最終成爲數1,所以現在這樣:

true == 1 

被轉換成這樣的:

1 == 1 

這是清楚沒錯。

,所以該完整演練是這樣的:

(1 == 1) == 1 
// v  v 
    (true) == 1 
// v  v 
    1 == 1