爲什麼這兩種決心爲假:JavaScript字符串解析爲false
console.log("potato" == false); //false
console.log("potato" == true); //false
因爲我使用==
比較寬鬆,JS 當知道脅迫操作數。由於在JS中,非空字符串應該是true
,爲什麼上面返回false以上呢?
爲什麼這兩種決心爲假:JavaScript字符串解析爲false
console.log("potato" == false); //false
console.log("potato" == true); //false
因爲我使用==
比較寬鬆,JS 當知道脅迫操作數。由於在JS中,非空字符串應該是true
,爲什麼上面返回false以上呢?
需要關於==
運營商的說明。從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)。
在你的情況下,false
和true
將被轉換爲0
和1
,而'potato'
將被轉換爲NaN
,比較表達式的值總是false
。
"potato" == false // => "potato" == 0 => NaN == 0
"potato" == true // => "potato" == 1 => NaN == 1
類似地,在比較'' == true
,''
將被轉換爲0
而true
將被轉換爲1
,所述表達是false
。
'' == false // => 0 == 0
'' == true // => 0 == 1
由於非直觀的實施==
,===
鼓勵在比較中使用。
你的意思是Truthy and Falsy Values
:
if ("potato") {
console.log("true")
}
但在這裏你比較字符串「土豆」和真正的,JavaScript的將嘗試轉換爲類似的事情,當你比較兩個值,你說是不是這樣有。
以下是關於此主題的有用文章:[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
@jakeclarkson您的評論應作爲正確答案發布。 +1無論如何 – fcalderan 2012-02-23 12:50:09
@jakeclarkson:我從那裏不明白這就是爲什麼在這裏問。現在清除,謝謝大家。 – Dev555 2012-02-23 12:55:13