2014-04-14 77 views

回答

23

他們並不相等。

if (x) 

檢查是否x是Truthy其中作爲後檢查的x布爾值是true

例如,

var x = {}; 
if (x) { 
    console.log("Truthy"); 
} 
if (x == true) { 
    console.log("Equal to true"); 
} 

不僅一個對象,任何字符串(除了空字符串),任何數量的(除0(因爲0是Falsy)和1)將被視爲Truthy,但它們將不等於真實。

作爲每ECMA 5.1 Standards,在if (x),的x感實性將是決定,如下表

+-----------------------------------------------------------------------+ 
| Argument Type | Result            | 
|:--------------|------------------------------------------------------:| 
| Undefined  | false             | 
|---------------|-------------------------------------------------------| 
| Null   | false             | 
|---------------|-------------------------------------------------------| 
| Boolean  | The result equals the input argument (no conversion). | 
|---------------|-------------------------------------------------------| 
| Number  | The result is false if the argument is +0, −0, or NaN;| 
|    | otherwise the result is true.       | 
|---------------|-------------------------------------------------------| 
| String  | The result is false if the argument is the empty  | 
|    | String (its length is zero); otherwise the result is | 
|    | true.             | 
|---------------|-------------------------------------------------------| 
| Object  | true             | 
+-----------------------------------------------------------------------+ 

注每:最後一行object,其中包括兩個對象和陣列。

但是在後一種情況下,按照The Abstract Equality Comparison Algorithm,的x

If Type(x) is Boolean, return the result of the comparison ToNumber(x) == y. 
If Type(y) is Boolean, return the result of the comparison x == ToNumber(y). 

值將被轉換爲一個數字,該數字將針對true進行檢查。

注:

在JavaScript中,true1false0

console.log(1 == true); 
# true 
console.log(0 == false); 
# true 
+0

意思是說,後面的一個可以使用字符串,int其他的布爾值嗎? –

+1

'var x ='a'; (x)alert(「X」); if(x == true)alert(「X true」);'This will only alert'「X」'not not「X true」 – peirix

+1

1被認爲是真的(來自ECMA 5.1:如果參數爲false是+0,-0或NaN;否則結果爲真) –

0

在第一種形式(例如空字符串,0,undefined,null)中,幾種情況的計算結果爲false。

如果你想更語義一下了一下,嘗試在表達的前棒棒:

if(!!x){...} 

這將表達式的結果轉換爲truthy語義表示相同。這更接近的類似物的表達你描述(x == true)

另外要注意,==是值comparions與類型強制,例如"3" == 3,而===斷言等於打字太。

所以他們是不一樣的,但經常在邏輯上代表相同的測試,這要歸功於語言的語義和!您可以使用

+0

謝謝。是「if(!! x)」總是等於「if(x)」? – TheZver

+0

不,想象這種情況下,如果(!!「hello」)和if(「hello」== true),第一個表達式將評估爲true,因爲「hello」不是空字符串,undefined或null等等,所以當轉換爲真實,真實。而第二個表達式將是錯誤的,因爲「hello」不能被強制等於真值。 http://jsfiddle.net/CEtN5/ – ComethTheNerd

+0

對不起,我在這個問題上有一個錯誤。我的意思是比較if(x) – TheZver