js中isNaN、Number.isNaN,isFinite、Number.isFinite的区别

本文深入探讨了JavaScript中判断数值是否为NaN及是否为有限数的两种方法:isNaN与isFinite,及其ES6改进版Number.isNaN和Number.isFinite。通过对比分析,解释了这些方法在数据类型转换上的差异,提供了详细的测试代码示例。

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

判断是否是NaN的方法isNaN

全局作用域中,有个方法,叫isNaN,在判断数据的时候,会将数据做类型转换(可以判断字符串,布尔值等类型)

ES6为了纠正数据类型转换的问题,提供了Number.isNaN方法,只能判断数字中的NaN,不会做类型转换

 

判断数字是有限的方法isFinite

全局作用域中,提供了isFinite,可以判断是否是有限的,判断的不够准确(会对字符串,布尔值等做转换)

ES6为了纠正这个问题,提供过滤Number.isFinite方法,只能判断数字类型是否是有限的

总结区别: isNaN和isFinite方法都是window对象的方法,他们在判断数据的时候会对数据做类型转换,转换完再判断,所以判断有时候是不准确的。而Number.isNaN和Number.isFinite是es6新出的,对Number对象的拓展方法,它们进行判断的时候不会转化类型,所以判断更准确。

举例如下: 

 isNaN('abc') => true(判断时进行了类型转化,把‘abc’转化为了NaN)      Number.isNaN('abc') => false(没有进行类型转换)

 isFinite('123') => true(判断时进行了类型转化,把‘123’转化为了123)     Number.isFinite('123') => false(没有进行类型转换)

下面提供测试代码,详细看区别:

// 定义几个数字
// 创建NaN
var num1 = +'abc';
// 创建正无穷 Infinity
var num2 = 1/0;
// 创建负无穷 -Infinity
var num3 = -1/0;
// 创建一个正零 0
var num4 = 0/1; 
// 创建一个负零 -0
var num5 = -0/1;

// 如何判断一个数是否是NaN
console.log(isNaN(num1))		// NaN true
console.log(isNaN(20))		// 20 false
console.log(isNaN('abc'))	// 'abc' true
console.log(isNaN('123'))	// '123' false

// 测试Number.isNaN
console.log(Number.isNaN(num1)) 	// NaN true
console.log(Number.isNaN(num2))		// Infinity false
console.log(Number.isNaN('abc'))	// 'abc' false
console.log(Number.isNaN('123'))	// '123' false

// 如何判断一个数字是有限的
console.log(isFinite(num1))		// NaN false
console.log(isFinite(num3))		// -Infinity false
console.log(isFinite(-123.456))	// -123.456 true
console.log(isFinite('abc'))		// 'abc' false
console.log(isFinite('123'))		// '123' true
console.log(isFinite(true))		// true true
console.log(isFinite(undefined))// undefined false

// 测试Number.isFinite()
console.log(Number.isFinite(num1))		// NaN false
console.log(Number.isFinite(num3))		// -Infinity false
console.log(Number.isFinite(-123.456))	// -123.456 true
console.log(Number.isFinite('abc'))		// 'abc' false
console.log(Number.isFinite('123'))		// '123' false
console.log(Number.isFinite(true))		// true false
console.log(Number.isFinite(undefined))	// undefined false

面试中常考:

+'abc' => NaN     

0/0    => NaN

1/0    => Infinity

-1/0   => -Infinity

0/1    => 0  

-0/1   => -0

值为false的数据一共有6个:0, NaN,’’, false, undefined, null

这六个值转化成数字值是NaN有两个NaN, undefined。剩下四个都是0

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值