JS中NaN定义与用法

    xiaoxiao2021-03-25  85

    NaN,即非数值(Not a Number)是一个特殊的值,这个数值表示本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。比如在其他语言中

    任何数值除以0都会导致错误而终止程序执行。但是在ECMAScript中,会返回出特殊的值,因此不会影响程序的执行。

    var box=0/0;                //NaN;

    var box=12/0;             //Infinity;

    var box=12/0*0;         //NaN;

    可以通过Number.NaN得到NaN的值,任何与NaN进行运算的结果均会为NaN,NaN与自身不相等(NaN不与任何值相等)。

    alert(Number.NaN);  //NaN

    alert(NaN+1);            //NaN

    alert(NaN==NaN);   //false

    ECMAScript提供isNaN()函数,用来判断这个是不是NaN。isNaN()函数在接收到一个值后,会尝试将这个值转换成数值。

    alert(isNaN(NaN));    //true;

    alert(isNaN(25));        //false  25是个数值

    alert(isNaN('25'));      //false  '25'是一个字符串数值,可以转换成数值

    alert(isNaN('Lee'));   //true  'Lee'是个字符串,不能转化成数值

    alert(isNaN(true));    //false  true可以转换成1

    isNaN()函数也适用于对象。在调用 isNaN()函数过程中,首先会调用 valueOf()方法,然 后确定返回值是否能够转换成数值。如果不能,则基于这个返回值再调用 toString()方法, 再测试返回值

    var box={ toString:function(){ return 'lee'; } }; alert(isNaN(box));

    有三个函数可以把非数值转换成数值:Number()、parseInt()和parseFloat()。Number()是转换型函数,可以用于任何数据类型,而另外两个则

    专门用于把字符串转换成数值。

    alert(Number(true));      //1,Boolean类型的true和false分别转换成1和0 alert(Number(25));        //25,数值类型直接返回 alert(Number(null));      //0,空对象返回0 alert(Number(undefined));//NaN,undefined返回NaN

    如果是字符串增寻以下规则:

    1、只包含数值的字符串,会直接转换成十进制数值,如果包含前导0,即会自动去掉

    alert(Number('456'));  //465 alert(Number('070'));  //70

    2、只包含浮点数值的字符串,会直接转换成浮点数值,如果包含前导和后导0,即会自动去掉。

    alert(Number('08.50')); //8.5

    3、如果字符串为空,那么直接转换成0.

    alert(Number(''));  //0

    4、如果不是以上三种字符串类型,则会返回NaN。

    alert(Number('lee123')); //NaN

    5、如果是对象,首先会调用valueOf()方法,然后确定返回值是否能够转化成数值。如果转化的结果是NaN,则基于这个返回值再调用toString()方法,在测试返回值。

    var box={

      toString:function(){

        return '123';   

      }

    };

    alert(Number(box));  //123

    var box={   toString:function(){     return 'lee';      } }; alert(Number(box));  //NaN

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

    alert(parseInt('465lee'));             //465,返回整数部分

    alert(parseInt('lee465lee'));       //NaN,如果第一个不是数值,就会返回NaN

    alert(parseInt('12lee56lee'));    //12,从第一个数值开始取,到最后一个连续数值结束

    alert(parseInt(56.12));               //56,小数点不是数值,会被去掉。

    alert(parseInt(''));                       //NaN,空返回NaN

    parseInt()除了可以识别十进制数,开可以识别八进制和十六进制。

    alert(parseInt('0xA'));         //10,十六进制

    alert(parseInt('070'));         //56,八进制

    alert(parseInt('0xALee'));  //100,十六进制,Lee被自动过滤

    ECMAScript为parseInt()提供了第二参数,用于解决各种的进制转换。

    alert(parseInt('0xAF'));                     //175,十六进制

    alert(parseInt('AF',16));                 //157,第二参数指定十六进制,可以去掉0x前导

    alert(parseInt('AF'));                      //NaN,这里看作字符串,理所当然NaN

    alert(parseInt('101010101',2));  //314,二进制转换

    alert(parseInt('70',8));                  //56,八进制转换

    parseFloat()是用于浮点数值的转换,和parseInt()一样,从第一位解析到浮点数值位置。

    alert(parseFloat('123Lee'));   //123,去掉不能识别的部分 alert(parseFloat('0xA'));         //0,不认识十六进制 alert(parseFloat('123.4.5'));  //123.4,只认一个小数点 alert(parseFloat('0123.400')); //123.4去掉前后导 alert(parseFloat('1.234e7'));   //12340000,把科学计数法转换成普通数值

    转载请注明原文地址: https://ju.6miu.com/read-16161.html

    最新回复(0)