2011-03-16 76 views
2
var foo=[0]; 
if(foo) alert('first'); 
if(foo==true) alert('second'); 

請告訴我,爲什麼第二次警告不起作用?在第一警報foo強制轉換爲Boolean,所以誤區的JavaScript類型系統

Boolean(foo); 
//true 

如果「富」是「真」,爲什麼沒有第二個提醒的工作?

+0

由於當一個數組等於'true'? – 2011-03-16 10:51:43

回答

5

這裏,

如果(富)警報,因爲foo是不是null,條件計算爲真。

但是,這並不意味着富本身等於真,因此第二警報不顯示。

1

因爲最初fooArray而不是Boolean,並且您正在將foo與布爾值進行比較。 if (...) -statement評估爲true或false,foo == true在此處評估爲false。如果您使用if (!!foo == true)(或只是if (!!foo))或if (foo != null)if (foo)第二警報就會被解僱。

1

由於foo轉換爲布爾型(適用於陣列)和footrue的比較之間存在差異。

在後一種情況下,這是一個比較沒有的轉換,而foo顯然與true不一樣。需要注意的是轉換確實還發生:foo == truefalse最後將其「轉化」成falseif。 :)

+0

在JS和PHP中有一個特殊的運算符「比較類型檢查」===。所以運算符「==」與類型轉換進行比較。 – Scalar 2011-03-16 11:07:45

+0

@Scalar:我喜歡你如何教我一些與你觀察到的行爲直接抵觸的事情,這些行爲你首先要求幫助。 – 2011-03-16 11:11:28

+0

@Tomalak Geret'kal:對不起,可能是我不理解你,因爲我的英語不是很好: - [我那吼聲你沒有看到「==」和「===」之間的區別。我的第一個問題是我在JS類型系統中不瞭解的最後一件事。 – Scalar 2011-03-16 11:26:24