2012-07-18 47 views
4

怎樣的JavaScript如果條件決定了它的價值?看下面這個例子:怎麼做,如果條件評估它的價值在JavaScript

<script type="text/javascript"> 

var bar = ("something" == true); 
alert(bar); // 1 

if ("something") { 
    alert("hey!"); // 2 
} 

</script> 

爲什麼我到一個點// 2,而在// 1「酒吧」是假的?

我可以看到bar值獲取幾乎相同的方式計算的,如果條件,或不?

+0

這裏的問題可能是'=='在'==='上的不可預測性。 – 2012-07-18 16:59:28

+1

Ahh the [JavaScript truth table](http://stackoverflow.com/a/1998224/419956)... – Jeroen 2012-07-18 16:59:51

+0

[在Javascript中,爲什麼「0」等於false,但不是自身錯誤?] (http://stackoverflow.com/questions/7615214/in-javascript-why-is-0-equal-to-false-but-not-false-by-itself) – 2012-07-18 17:01:37

回答

2

這是因爲JavaScript的強制類型轉換引擎是如何工作的。當你說

"something" == true 

JavaScript調用ToNumber在你的「東西」字符串來比較它與布爾值。 「某物」會產生不等於真的NaN。

然而,只有

if("something") 

檢查如果字符串是truthy。因爲它不是一個空字符串,它實際上是真的。

這裏更多:http://webreflection.blogspot.co.il/2010/10/javascript-coercion-demystified.html

4

"something" == true是假的,因爲字符串和布爾必須強迫可以比較的類型。然而,if("something")工作,因爲一個非空字符串是truthy值。

1

這是因爲在第一種情況下,JavaScript的會嘗試以比較作爲字符串(點亮"something" == "true"),這將是錯誤的。

但是,在第二種情況下,表達式的結果爲"something",當投射到布爾值時,結果爲true

See here for details.

+0

但是'「true」== true'也會評估爲'false'。如果它只是比較字符串(就像你指出的那樣),這應該是'真實的'。 – Sujay 2012-07-18 17:15:22

1
if("something") 

的聲明之上將返回true因爲"something"是一個有效的字符串。它會返回false,如果它是一個空字符串("")。這也恰好與數(0回報false,但1回報true)。

"something"==true中,兩者都轉換爲字符串,然後檢查(「something」==「true」,這將返回false)。

0

事情並不是如此JavaScript處理如果語句,因爲它是如何JavaScript強制對象類型。

一個非空字符串是truthy,雖然它不等於true。如果您嘗試"something != false,您可以檢查這個,它返回true

正因爲如此,很多人主張在JavaScript中嚴格比較以避免這些缺陷。

例如:

"something" !== false // true 
"something" === true // false 
"" === false   // false 
0 === false   // false 

要讀了這一點,有一噸的物品。我推薦Douglas Crockford

+0

現在我很困惑,爲什麼''something == == false'和'「something == true'都是錯誤的? – 2012-07-18 17:22:05

+0

因爲當== ==試圖做它的類型強制的事情時,'true','false'和''something''總是出現不同的值。在這種情況下並不奇怪,考慮到「東西」不是一個布爾值(因此比較它們是沒有意義的)。 – cHao 2012-07-18 17:26:58

+0

再次閱讀,它說'(「something」!= false)'和'(「something」== false)'' – 2012-07-18 18:04:09