2017-01-16 39 views
-1

爲什麼這個代碼的輸出是18.我不明白爲什麼第一條件是真的。如果有人能向我解釋這將有所幫助。爲什麼一個if(somestring)是真的Javascript?

var x = 5; 
var y = 1; 

if(!!"false"){ 
    x = x + 10; 
    y = 3; 
}; 
if(!!false) { 
    x = x + 10; 
    y = y + 8; 
}; 
alert(x+y) 

感謝

+0

看到因爲這是JavaScript是如何定義的。在這種情況下,它就是'!'的工作原理:任何(且僅)「false-y」值在否定時都爲真。所觀察到的差異是''false''是* not *「false-y」值,因爲它是非空字符串,因此'!「false」'爲假。 – user2864740

+0

如果布爾運算符被應用於非空字符串,它總是計算爲真,例如console.debug(布爾(「false」))返回true。當你使用邏輯非運算符時,表達式被轉換爲場景後面的布爾值,然後兩個非運算符將值觸發爲false並返回true。 –

回答

1

,因爲一個非空的字符串是在JavaScript中truthy value!!(truthy value)將始終爲真第一if語句將始終執行自!!"false"如此。第二個if語句總是失敗,因爲false是一個布爾值(即falsy value),所以!!(falsy value)的輸出爲false。

由於第一if語句正在執行的x值會遞增到15y3最後,結果將是1815 + 3)。

3

這是因爲字符串"false"在轉換爲boolean時評估爲true。儘管它存儲文本false它有沒有關係false值。 因此它的計算結果爲true,否定兩次,結果爲true

JavaScript中只有幾個「falsy」值 - 評估爲false的值。你可以閱讀關於那些for example here

  • false
  • 0(零)
  • ""
  • null
  • undefined
  • NaN

鏈接的網站顯示出非常類似你的例子:

var a = !!(0); // variable is set to false 
var b = !!("0"); // true 

對結果的唯一理由是這樣的事實,即是falsy,但「0」

+0

謝謝馬丁。你的回答對我很有幫助。 –

+0

@MohitDagar然後請考慮接受這是正確的關閉問題 – DelightedD0D

1

!!"false" is boolean true,所以它會進入第一個if條件。

在此條件下,x的新值將爲15,新值y將爲3,總和可達18。

在第二if條件!!false設置爲false所以它不會循環 所以最後的值往裏走是18您在警報

相關問題