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)