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