2016-07-06 90 views
3

好吧,所以我一直在學習Javascript三個月,並已經獲得了一些很好的解決幾個任務的機會。在我的書的開始,他們有不同的NaN例子,但它們通常包括像爲什麼NaN有用,在什麼情況下

NaN === NaN;  // false 
Number.NaN === NaN; // false 
isNaN(NaN);   // true 
isNaN(Number.NaN); // true 

事情我甚至看其他計算器職位,我還沒有看到的,我可以在使用它的情況。這就是說,這種全球性財產在什麼情況下對我有幫助?實際計劃中的一些實際情況是什麼?

+0

你可以將NaN與sql'null'進行比較。 「未知」值或發生錯誤。它是有毒的,因爲它會使用NaN本身的NaN本身來做其他事情,例如, 'var foo = 1 + NaN'會給你'NaN',而不是'1'。一旦發生錯誤,您不希望繼續使用該錯誤值,因爲您的結果在此時不明確。和sql null完全一樣,你必須使用專門的工具來檢測它,例如isNaN()'v.s. sql的'是null'。 –

+0

'var helloWorld ='hello world'; isNaN(helloWorld - 1)'簡單的一個。 –

+0

通常,在使用任何類型的算術時,如果您使用來自未知來源(用戶,數據庫,api等)的變量,則有助於檢查您得到的結果是否爲數字,然後再轉到需要更多數學那個價值。 – Jack

回答

1

NaN是從數學運算,這是沒有意義的結果的數量:

Number('abc'); // NaN 
0/0;   // NaN 
Math.sqrt(-1); // NaN 
Math.log(-1); // NaN 
Math.asin(2); // NaN 

當你做一些數學opertion和一些操作數是NaN,它會傳播到結果:

NaN + 2;   // NaN 
NaN * 0;   // NaN 
1/NaN;   // NaN 
Math.pow(NaN, 2); // NaN 
-1

NaN當你有一個不是數字的值(但應該是)時是最有用的。你將只能得到在一些地方從標準API NaN回來,尤其是parseInt

的parseInt函數功能第一個參數轉換爲字符串,分析它,並返回一個整數或NaN。

這裏大部分的價值是,一旦NaN已被引入到數學運算鏈,操作定義(即使他們並沒有意義,與初始操作數,從而產生NaN),並會繼續返回NaN。大多數數學運算符(從the / instructions可以看到)都有一個條款,如果任一操作數已經不是數字,則立即返回NaN

+0

你究竟打算什麼東西是一個數字,但事實證明它不是?只是想知道如何工作。 –

+0

正如@Jack在問題評論中提到的,用戶輸入(或服務器輸入,或者真的是任何外部源)。當您收到無效輸出時,存在'NaN'來保持有效的操作鏈。而不是因爲糟糕的輸入不小心產生了一些op'x/0',你會得到'x/NaN'和一個定義的(如果是垃圾)輸出。 – ssube

+0

@cresjoy'Math.sqrt(-1)'產生'NaN',就像許多其他旨在給出數字的「無效」數學運算一樣。 –

相關問題