爲什麼這個代碼的輸出是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)
感謝
爲什麼這個代碼的輸出是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)
感謝
,因爲一個非空的字符串是在JavaScript中truthy value和!!(truthy value)
將始終爲真第一if
語句將始終執行自!!"false"
如此。第二個if語句總是失敗,因爲false
是一個布爾值(即falsy value),所以!!(falsy value)
的輸出爲false。
由於第一if語句正在執行的x
值會遞增到15
,y
將3
最後,結果將是18
(15 + 3
)。
這是因爲字符串"false"
在轉換爲boolean
時評估爲true。儘管它存儲文本false
它有沒有關係到false
值。 因此它的計算結果爲true
,否定兩次,結果爲true
。
JavaScript中只有幾個「falsy」值 - 評估爲false的值。你可以閱讀關於那些for example here。
false
""
null
undefined
NaN
鏈接的網站顯示出非常類似你的例子:
var a = !!(0); // variable is set to false
var b = !!("0"); // true
對結果的唯一理由是這樣的事實,即是falsy,但「0」不。
謝謝馬丁。你的回答對我很有幫助。 –
@MohitDagar然後請考慮接受這是正確的關閉問題 – DelightedD0D
!!"false"
is boolean true
,所以它會進入第一個if
條件。
在此條件下,x
的新值將爲15
,新值y
將爲3,總和可達18。
在第二if
條件!!false
設置爲false
所以它不會循環 所以最後的值往裏走是18
您在警報
看到因爲這是JavaScript是如何定義的。在這種情況下,它就是'!'的工作原理:任何(且僅)「false-y」值在否定時都爲真。所觀察到的差異是''false''是* not *「false-y」值,因爲它是非空字符串,因此'!「false」'爲假。 – user2864740
如果布爾運算符被應用於非空字符串,它總是計算爲真,例如console.debug(布爾(「false」))返回true。當你使用邏輯非運算符時,表達式被轉換爲場景後面的布爾值,然後兩個非運算符將值觸發爲false並返回true。 –