2015-09-29 36 views
0

簡單的js代碼片段。爲什麼總是警惕無法理解條件執行流程

「結果爲空」

按我的理解,if塊應該得到執行,因爲result!=""true和警覺

「結果不空」。

<script> 
var result = false; 
if(result != "") 
alert('result is not empty') 
else 
alert('result is empty') 
</script> 
+0

因爲「」是一個虛假值。 – jalooc

回答

2

這是因爲!=做了隱式類型轉換。如果你使用嚴格的版本,!==,它會做你的期望。但鬆散版本!=會將這兩個操作數轉換爲數字,並且""false都會轉換爲0,因此"" != false爲false,因爲它最終(通過一系列卷積)爲0 != 0

此詳細被佈置在Abstract Equality Comparison算法在本說明書中:

  1. ReturnIfAbrupt(X)。
  2. ReturnIfAbrupt(y)。
  3. 如果Type(x)與Type(y)相同,則返回 執行嚴格平等比較x === y的結果。
  4. 如果x爲null且y未定義,則返回true。
  5. 如果x未定義且y爲null,則返回true。
  6. 如果Type(x)是Number和Type(y)是String,則返回比較結果x == ToNumber(y)。
  7. 如果Type(x)是String並且Type(y)是Number,則 返回比較結果ToNumber(x)== y。
  8. 如果Type(x)是布爾型,則返回比較結果ToNumber(x)== y。
  9. 如果Type(y)是布爾型,則返回比較結果x == ToNumber(y)。
  10. 如果Type(x)是String,Number或Symbol且Type(y)是Object,則 返回比較結果x == ToPrimitive(y)。
  11. 如果Type(x)是Object且Type(y)是String,Number或Symbol,則 返回比較結果ToPrimitive(x)== y。
  12. 返回false。

我們可以從上面看到,如果我們用false""展開,取出,然後:

  • 我們按照步驟8,轉換false0,並與0 != ""
  • 重新開始我們按照步驟6,將""轉換爲0,然後再次啓動0 != 0
  • 我們按照步驟3獲得結果false (因爲我們在做!=,而算法是根據==定義的)。
+0

謝謝@Crowder的詳細解答。保持。感謝您的鏈接。 – Keerthivasan

1

Javascript檢查truthy值。

false != "" 

是假

false !== "" 

是真實的,所以你可以嘗試一下。

1

在JavaScript中,兩個虛假的東西可以相等,如在這種情況下,其中result != ""產生false

您需要使用嚴格比較,即!==進行比較。 result !== ""收率爲true

+1

這是另一回事嗎? 'false!=「」'產生'false'。 – Risadinha

+0

@Risadinha謝謝你,推理是正確的,但我換了真假!我糾正了它 – JotaBe