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