Javascript Number類型常見迷惑點

1:NaN(Not a Number)函數

表示一個原本要返回數值的操做數沒有返回數值的狀況。在ECMAscript中,任何數除以0會返回NaN【ps:實際上只有0/0會返回NaN】,正(負)數除以0會返回Infinity(-infinity)。spa

NaN自己有兩個非同尋常的特色,一、任何涉及NaN的操做(如:NaN/10)都會返回NaN,二、NaN與任何值都不想等包括NaN自己。code

1 console.log(NaN == NaN);
2 console.log(NaN === NaN);
3 #results
4 //false
5 //false

二、isNaN()函數對象

ECMAScript定義了isNaN()函數,函數接受一個參數,該參數能夠是任何類型,用於判斷傳入的參數是不是「不是數值「。blog

 1 console.log(isNaN(NaN));
 2 console.log(isNaN("10"));
 3 console.log(isNaN(20));
 4 console.log(isNaN("blue"));
 5 console.log(isNaN(true));
 6 #results
 7 //true
 8 //false
 9 //false
10 //true
11 //false

三、數值轉換ip

有3個函數能夠將不是非數值轉換爲數值:Number()、parseInt()、parseFloat()。字符串

   Number():it

   轉型函數Number()能夠用於任何數據類型console

   Number()函數轉換規則:class

   a.若是是數字值,就簡單轉入和返回;

   b.若是是Boolean類型,true和false分別返回1和0;

   c.若是是null值,返回0;

   d.若是是undefined,返回NaN;

   e.若是是字符串,遵循下列規則:

            若是字符串只包含數字,則直接轉換成十進制數值。(若是數字前有0會被忽略,如」0123「轉換成123)。

            若是字符串中包含有效的浮點數形式,將其轉換成對應的浮點數值(前導0依然會被忽略)。

            若是字符串中包含有效的十六進制格式,將其轉換爲相同大小的十進制整數值。

            若是字符串爲空(即不包含任何字符),則轉換成0。

            若是字符串是包含除上述格式之外的其餘格式,則轉換爲NaN。

1 console.log(Number("0x10"));
2 console.log(Number("10abc"));
3 console.log(Number(" "));
4 #results
5 //16
6 //NaN
7 //0

    f.若是是對象,先調用對象的valueOf()方法,而後按照前面的規則返回,若是返回結果爲NaN,則再調用對象的toString()方法,再按照前面的規則轉換返回的字符串值。

另外兩個函數則專門用於把字符串轉換成數值,這3個函數對於一樣的輸入可能會有不一樣的返回結果。

     parseInt():

     parseInt()函數在轉換字符串是,更多的是看其是否符合數字模式。它會忽略字符串前面的空白字符,直到找到第一個非空白字符;若是第一個字符不是數字或者負號,parseInt()會返回NaN,也就是說parseInt()轉換空白字符會返回NaN(與Number()不一樣),parseFloat()也返回NaN。若是第一個是數字字符,parseInt()會繼續解析直到最後一個字符或者遇到了一個非字符。

1 console.log(parseInt("10abc"));
2 console.log(parseInt(" "));
3 console.log(parseInt("0xA"));
4 #results
5 //10
6 //NaN
7 //10

    注意:ECMAScript 5 JavaScript引擎中,parseInt()不具有解析八進制的能力,parseInt('070')輸出70!若是須要讓parseInt()函數將傳入的字符串轉換爲指定進制的數,能夠爲其傳入第二個參數:轉換時使用的技術(即多少進制)。不指定基數意味着讓parseInt()本身決定如何讓解析字符串,因此爲了不錯誤的解析,建議不管什麼狀況下都明確指定基數。

1 console.log(parseInt("AF",16));
2 console.log(parseInt("10",10));
3 console.log(parseInt("10",10));
4 #results
5 //175
6 //10
7 //8

     parseFloat()函數與parseInt()函數相似,從第一個字符開始解析,一直到字符串末尾或者直到碰見第一個無效的浮點數字字符爲止,解析時第一個小數點有效,第二個小數點無效。parseFloat()函數與parseInt()函數除小數點的區別外,第二個區別在於它始終會忽略前導的0,也就是說parseFloat()在解析十六進制數時會返回0.

1 console.log(parseFloat("22.23.2"));
2 console.log(parseFloat("0x10"));
3 #results
4 // 22.23
5 // 0
相關文章
相關標籤/搜索