ECMAScript中NaN的详细解读

NaN在ECMAScript中表示非数值,用于避免数值运算出错导致程序中断。isNaN()函数用来检测一个值是否是非数值,它会尝试将参数转为数值,无法转换时返回true。对于对象,isNaN()会先调用valueOf(),若不成功则调用toString()来判断能否转换成数值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

NaN:

Not a Number,即非数值。是一个特殊的数值。

这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。例如,在其他编程语言中,任何数值除以非数值都会导致错误,从而停止代码执行。但在ECMAScript(发音:“ek-ma-script”)中,任何数值除以非数值都会返回NaN,因此不会影响其他代码的执行。
NaN本身有两个非同寻常的特点。首先,任何涉及NaN的操作(例如NaN/10)都会返回NaN,这个特点在多步计算中有可能导致问题。其次,NaN与任何值都不相等,包括NaN本身。


console.log(NaN == NaN)	//false
console.log(NaN+10);	//NaN
console.log(NaN-10);	//NaN
console.log(NaN*10);	//NaN
console.log(NaN/10);	//NaN
console.log("*****************************************");
console.log(10/String);	//NaN
console.log(10/Object);	//NaN
console.log(10/"Hello");//NaN
console.log("Hello"/10);//NaN
console.log("*****************************************");
console.log(10/true);	//10
console.log(true/10);	//0.1
console.log(10/false);	//Infinity
console.log(false/10);	//0
console.log(10/"");		//Infinity
console.log(""/10);		//0
console.log(10/null);	//Infinity
console.log(null/10);	//0
console.log("*****************************************");
console.log(10/undefined);//NaN
console.log(undefined/10);//NaN

针对NaN的这两个特点:ECMAScript定义了isNaN()函数。这个函数接受一个参数,该参数可以是任何类型,而函数会帮我们确定这个参数是否“不是数值”。isNaN()在接收到一个值之后,会尝试将这个值转换为数值。某些不是数值的值会直接转换为数值,例如“10”或Boolean值。而任何不能被转换为数值的值都会导致这个函数返回true。

请看下面例子:

console.log(isNaN(NaN));	//true
console.log(isNaN(10));		//false(10是一个数值)
console.log(isNaN("10"));	//false(可以被转换成数值10)
console.log(isNaN("Hello"));//true(不能被转换成数值)
console.log(isNaN(""));		//false(可以被转换成数值0)
console.log(isNaN(true));	//false(可以被转换成数值1)
console.log(isNaN(false));	//false(可以被转换成数值0)
console.log(isNaN(null));	//false(可以被转换成数值0)
console.log(isNaN(undefined));//true

isNaN()适用于对象。在基于对象调用isNaN()函数时,会首先调用对象的valueOf()方法,然后确定该方法返回的值是否可以转换为数值。如果不能,则基于这个返回值再调用toString()方法,再测试返回值。而这个过程也是ECMAScript中内置函数和操作符的一般执行流程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值