2016-02-28 44 views
1

在Javascript中,我發現這一點:楠的Javascript

if (!NaN) 
    console.log('do sth'); 

此代碼的工作,但如果我寫:

if (NaN) 
    console.log('do sth'); 

這一個是不行的。我不太瞭解這背後的邏輯。

+8

NaN是虛假的。 http://stackoverflow.com/questions/22600248/is-nan-falsy-why-nan-false-returns-false。如果你想檢查是否NaN,有一個叫做isNaN的特殊函數https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN – Hypaethral

+1

*「我不是真的理解這個背後的邏輯「 - 即使不知道代碼是否合理,NaN是什麼意思,因爲如果'!something'是真的,那麼邏輯上'something'是錯誤的。因此(再次,即使不知道NaN是什麼),您會期望執行其中一個console.log()語句,但不會執行其他語句... – nnnnnn

回答

2

NaN是在JavaScript中一個特殊的數字被用來象徵非法編號又名不-A-數,比如當嘗試乘以數量與串等

現在,在JS,有是falsy values的概念。正如你所看到的NaN被歸類爲一個falsy值。

這就是爲什麼當你執行以下命令:

if(NaN) { 
    console.log("something"); 
} 

..它不工作,因爲NaN被評估爲假。因此,類似地,if(!NaN)條件評估爲真。

+0

「NaN是一個特殊號碼」是什麼意思? NaN的意思是「不是一個數字」,所以它絕對不是一個數字,尤其不是一個「特殊數字」。 –

+3

如果你檢查'typeof NaN'的值,你會得到''number''。同樣,如果你檢查'NaN.constructor.name'的輸出,你將會得到'「Number」'。因此,爲什麼我說這是一個特殊的數字。 –

+1

@RocoCTZ - 嘗試'typeof NaN'。你會看到它是一個「數字」。 – jfriend00