javascript的非数值转换为数值和NaN

javascript有3个函数可以把非数值转换为数值:Number()、parseInt()、parseFloat()。

=================================================================

Number()能够用来其余数据类型(此函数平日很少使用)。

parseInt()、parseFloat()专门用于把字符串转换成数值(相比较常用的哦)。

=================================================================

尽管如此Number()不常用,然而大家仍然要说下它的转换规则:

【1】即使是Boolean值,true和false将各自被撤换为1和0。

【2】如如若数字值,只是简短的传入和再次来到。

【3】如果是null值,返回0。

【4】如果是undefined,返回NaN。

【5】即便是字符串,遵守下列规则:

     
1)、假设字符串中只含有数字(包括前边带正号或负号的景观),则将其转会为十进制数值,既”1″变成1,”123″变成123,但是”012″会变成11(注意:前导的零被忽略了);

     
2)、如果字符串中含有有效的浮点格式,如”1.1″,将其转移为对应的浮点数值(同样也会忽视前导零);

     
3)、假诺字符串中涵盖有效的十六进制格式,如”0xf”则将其更换为同样大小的十进制整数值;

      4)、要是字符串是空的(不分包其他字符),则将其更换为0;

      5)、倘诺字符串中富含除上述格式之外的字符,则将其转移为NaN;

【6】假使是目标,则调用对象的valueOf方法,然后遵照前边的条条框框转换再次回到的值。尽管转换的结果是NaN,则调用对象的toString()方法,然后再一次依据前面的平整转换重返的字符串值。

说了这样多,我们看下例子吗:

var num1 = Number("Hello world");      //NaN
var num2 = Number("");                 //0
var num3 = Number("000011");           //11
var num4 = Number(true);               //1

 由于Number()函数在更换字符串时比较复杂而且不够合理,由此在处理函数的时候更常用parseInt()函数。

===================================================================================

【1】parseInt():从字符串中领到整数,碰着非数字,就终止,不在看前面的。

【2】parseInt()函数可以分辨出各类整数格式(2、8、10、16进制度),默认是10进制。

比方要转换其他进制,要带上第二个参数:转换时接纳的基数(即多少进制),默认10进制可以不带第二个参数。

【3】parseInt()函数在下边意况会唤起NaN:

              1)、第一个字符不是数字字符或者负号;

              2)、转换空字符串

下面来看点示例:

var num1 = parseInt("22.5");               //22
var num2 = parseInt("1234blue");           //1234
var num3 = parseInt("blue1234");           //NaN
var num4 = parseInt("");                   //NaN


var num5 = parseInt("AF", 16);             //175(指定了16作为第二参数,字符串可以不带前面的"0x")


var num6 = parseInt("10", 2);              //2(按二进制解析)
var num7 = parseInt("10", 8);              //8(按八进制解析)
var num8 = parseInt("10", 10);             //10(按十进制解析)
var num9 = parseInt("10", 16);             //16(按十六进制解析)

鉴于parseInt()函数可以分析很多进制,为了避免不当解析,我们指出无论在怎么状态下都要指定基数。

===============================================================================

【1】parseFloat():提取首个浮点数,即小数。也足以领悟为,字符串中的第一个小数点有效,第二个小数点无效,因此它背后的字符串将被忽略。

举个例证:”22.34.5″会被更换为22.34。

【2】parseFloat()转换规则:

                      1)、只分析十进制值,没有第二参数指定基数的用法。

                      2)、与parseInt()有分别,parseFloat()会向来忽略前导的零。

                     
3)、可以十八前方议论的享有浮点数值格式,也囊括十进制整数格式,但十六进制格式的字符串则一贯会被撤换成0。

                     
4)、倘使字符串包含的是一个可解析为整数的数(没有小数点,或是小数点前面都是零),则赶回整数。

下面看下示例:

var num1 = parseFloat("22.5");               //22.5
var num2 = parseFloat("22.34.5.6");          //22.34
var num3 = parseFloat("1234blue");           //1234
var num4 = parseFloat("0xA");                //0(十六进制)
var num5 = parseFloat("0908.5");             //908.5(忽略前导零)
var num6 = parseFloat("3.125e7");            //31250000(没有小数点,或者小数点后面都是零)

==============================================================================

【1】下面提到了NaN,这什么样的NaN?

答:不是数值(非数值),字面全拼为:Not a Number

【2】NaN的效应是何许???

答:用于表示一个自然要回去数值的操作数未回来数值的图景(这样就不会抛出荒谬了)。

【3】NaN的特点是怎么???

答:1)、任何关联NaN的操作(例如NaN/10)都会回来NaN,那个特性在多步统计中有可能导致问题。

     2)、NaN与其它值都不等于,包括NaN本身

    
3)、在ECMAScript中,任何数值除以0都会回来NaN,由此不会影响其他代码的实施。(那里有某些要提议,任何数值除以0都会重回NaN,那是原书的传教,但实质上唯有0除以0才回再次来到NaN,正数除以0重回Infinity,负数除以0再次回到-Infinity)

下面看一个例子:

alert(NaN == NaN);      //false

【4】什么是isNaN()函数???

答:这么些函数接受一个参数,该参数可以是此外类型,而函数会帮大家确定那个参数是否“不是数值(NaN)”。

【4】isNaN()函数的表征是怎么样???

答:1)、在接受到一个值后,会尝试将这一个值转换为数值。

     2)、某些不是数值的值会直接转换为数值,例如字符串”10″或是Boolean值

     3)、任何不可以被转移为数值的值都会导致这一个函数重回true。

    
4)、也适用于对象,在应用时会首先调用对象的valueOf()方法,然后在规定该形式重回的值是否足以变换为数值,假诺不可能,则依照这一个重临值在调用toString()方法,再测试再次回到值。

下边看下示例:

alert(isNaN(NaN));             //true
alert(isNaN(10));              //false(10是一个数值)
alert(isNaN("10"));            //false(可以被转换成数值10)
alert(isNaN("blue"));          //true(不能转换成数值)
alert(isNaN(true));            //false(可以被转换成数值1)