英溯IT论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 5880|回复: 0

js中判断一个变量是否为数字类型的疑问

[复制链接]

105

主题

113

帖子

588

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
588
发表于 2023-4-24 15:05:03 | 显示全部楼层 |阅读模式

用typeof(a)=="number"  不用.isNaN()。

1.typeof(a)=="number" 是true,但是a instanceof Number却为false,不理解

2.isNaN()不能判断一个变量是否为数字类型,isNaN(123)值为false,isNaN('123')值也为false。
isNaN() 的实际作用跟它的名字isNaN并不一致,isNaN(NaN)值为true,isNaN(Number("xyz"))值为true,isNaN(“abc”)值为true,isNaN(123/0)值为false,

所以它实际是将不能转换成number类型的其他类型及其自身NaN都判断为true,而除了其自身NaN外所有的number类型都判断为false(NaN的类型也是number),

能转换成number类型的其他类型也判断为false,比如‘123’类型是string,但判断为false。
typeof(num)=="number" 较为准确,但NaN也是number类型,Number("xyz")也是number类型,如果你只要区分123跟‘123’,那就没什么问题了,可以用typeof(num)==="number"。 如果要排除除数为0的情况,要再判断(num!==Infinity),即(typeof(num)=="number")&&(num!==Infinity)。
再全面一点:(typeof(num)==="number")&&(num!==Infinity)&&!isNaN(num)

资料:
Number.isNaN()已经被添加到了ECMAScript 6中,Firefox已经实现了。
代码如下:
Number.isNaN = function (value) {
return typeof value === 'number' && isNaN(value);
};


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|英溯IT论坛 ( 沪ICP备13022730号-6 )

GMT+8, 2024-12-22 14:39 , Processed in 0.100667 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表