JS中NaN定义与用法

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,把科学计数法转换成普通数值

### JavaScript 中 NaN 的含义和用法 #### 1. NaN定义 `NaN` 是 JavaScript 中的一个特殊值,表示“非数字”(Not-a-Number)。它通常出现在无法计算出有效数字结果的情况下。例如,将字符串 `"abc"` 转换为数字时会返回 `NaN`[^2]。 #### 2. NaN 的特性 `NaN` 的一个独特之处在于它不等于任何值,包括自身。因此,直接使用比较运算符检测 `NaN` 是不可行的。 ```javascript console.log(NaN === NaN); // false ``` 为了正确检测 `NaN`,可以使用 `isNaN()` 或更推荐的 `Number.isNaN()` 函数[^2]。 #### 3. 检测 NaN 的方法 - **`isNaN()` 函数**:这是一个全局函数,用于检测某个值是否为 `NaN`。然而,`isNaN()` 存在一些局限性,因为它会尝试将非数字类型转换为数字后再进行判断。 ```javascript console.log(isNaN("abc")); // true,因为 "abc" 转换为数字后是 NaN console.log(isNaN("123")); // false,因为 "123" 转换为数字后是 123 ``` - **`Number.isNaN()` 方法**:这是 ES6 引入的一种更可靠的方法,专门用于检测某个值是否为 `NaN`,而不会尝试类型转换。 ```javascript console.log(Number.isNaN(NaN)); // true console.log(Number.isNaN(123)); // false console.log(Number.isNaN("abc")); // false ``` #### 4. NaN 的生成场景 `NaN` 可以通过以下几种方式生成: - 数学运算无法得出有效结果时: ```javascript console.log(Math.sqrt(-1)); // NaN,负数没有平方根 console.log(0 / 0); // NaN ``` - 字符串到数字的无效转换: ```javascript console.log(Number("abc")); // NaN console.log(+ "xyz"); // NaN ``` - 使用一元加号或算术运算符处理非数字字符串时: ```javascript console.log("abc" - 1); // NaN ``` #### 5. 处理 NaN 的方法 如果需要确保某个值不是 `NaN`,可以在计算前验证输入的有效性。例如: ```javascript function safeParse(value) { const num = Number(value); return Number.isNaN(num) ? null : num; // 如果是 NaN,返回 null } console.log(safeParse("123")); // 123 console.log(safeParse("abc")); // null ``` #### 6. NaN 的用途 尽管 `NaN` 表示错误或无效的结果,但它在调试和错误处理中非常有用。通过检查 `NaN`,可以发现潜在的逻辑问题或输入错误。例如,在用户输入验证中,可以检测是否输入了无效的数字[^1]。 --- ### 示例代码 以下是一个综合示例,展示如何生成和检测 `NaN`: ```javascript // 生成 NaN const invalidNumber = Math.sqrt(-1); // NaN const invalidConversion = Number("abc"); // NaN // 检测 NaN console.log(isNaN(invalidNumber)); // true console.log(Number.isNaN(invalidConversion)); // true // 安全处理 NaN function handleInput(input) { const result = +input; if (Number.isNaN(result)) { return "Invalid input"; } return result; } console.log(handleInput("123")); // 123 console.log(handleInput("abc")); // Invalid input ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值