2012-02-23 61 views
0

爲什麼這兩種決心爲假:JavaScript字符串解析爲false

console.log("potato" == false); //false 
console.log("potato" == true); //false 

因爲我使用==比較寬鬆,JS 當知道脅迫操作數。由於在JS中,非空字符串應該是true,爲什麼上面返回false以上呢?

+2

以下是關於此主題的有用文章:[http://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/](http://javascriptweblog.wordpress.com/2011/ 2月7日/真理平等和JavaScript的/)。 – jabclab 2012-02-23 12:40:50

+0

@jakeclarkson您的評論應作爲正確答案發布。 +1無論如何 – fcalderan 2012-02-23 12:50:09

+0

@jakeclarkson:我從那裏不明白這就是爲什麼在這裏問。現在清除,謝謝大家。 – Dev555 2012-02-23 12:55:13

回答

5

需要關於==運營商的說明。從ECMA-262 Section 11.9.3的rule6,rule7後來rule4決定了你的結果

規則6.如果Type(x)是布爾值,返回比較ToNumber(X)== y的結果。

規則7.如果Type(y)是布爾值,則返回比較結果x == ToNumber(y)。

規則4.如果Type(x)是Number和Type(y)是String,則返回比較結果x == ToNumber(y)。

在你的情況下,falsetrue將被轉換爲01,而'potato'將被轉換爲NaN,比較表達式的值總是false

"potato" == false // => "potato" == 0 => NaN == 0 
"potato" == true // => "potato" == 1 => NaN == 1 

類似地,在比較'' == true''將被轉換爲0true將被轉換爲1,所述表達是false

'' == false // => 0 == 0 
'' == true // => 0 == 1 

由於非直觀的實施=====鼓勵在比較中使用。

0

你的意思是Truthy and Falsy Values

if ("potato") { 
    console.log("true") 
} 

但在這裏你比較字符串「土豆」和真正的,JavaScript的將嘗試轉換爲類似的事情,當你比較兩個值,你說是不是這樣有。