为什么isNaN(null)的结果是false?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
woximiemie 2017-11-03 22:40:58

老师上面有一点说错了 ——0除以0会返回NaN,但是其他数除以0则不会返回NaN而是Infinity。


至于isNaN(null)的结果是false的原因:

null不是一个数字,但与数字运算时会将它转化为一个数字,而且转化的结果是0。+null、-null、null/1、null*1,结果都是0。null/0=NaN。而isNaN()的运作机制是会首先尝试将这个参数转换为数值,然后才会对转换后的结果是否是NaN进行判断。所以isNaN(null)就等于isNaN(0),所以返回的结果为false。

  • Miss路 #1
    老师并没有说0除以0会返回多少啊,也没有说其他数除以0会返回多少,你从哪儿看出来老师说错了……
    2017-11-05 14:12:27
  • woximiemie 回复 Miss路 #2
    哈哈,是我错了,我只是向帮老师表达得更仔细一些^_^
    2017-11-08 14:43:41
Miss路 2016-12-29 23:11:56

isNaN(x),如果 x 是特殊的非数字值 NaN(或者能被转换为这样的值),返回的值就是 true。如果 x 是其他值,则返回 false。

isNaN() 函数可用于判断其参数是否是 NaN,该值表示一个非法的数字(比如被 0 除后得到的结果)。

如果把 NaN 与任何值(包括其自身)相比得到的结果均是 false,所以要判断某个值是否是 NaN,不能使用 == 或 === 运算符。正因为如此,isNaN() 函数是必需的。

也就是说如果isNaN函数的参数不是Number类型, isNaN()会首先尝试将这个参数转换为数值,然后才会对转换后的结果是否是NaN进行判断。因此,对于能被强制转换为有效的非NaN数值来说( 值得一提的是,空字符串和布尔值会被强制转换为数值0或1)返回false值。常见的集中返回值:

isNaN(NaN);       // true

isNaN(undefined); // true

isNaN({});        // true

isNaN(true);      // false

isNaN(null);      // false

isNaN(37);        // false

// strings

isNaN("37");      // false: 可以被转换成数值37

isNaN("37.37");   // false: 可以被转换成数值37.37

isNaN("");        // false: 空字符串被转换成0

isNaN(" ");       // false: 包含空格的字符串被转换成0

// dates

isNaN(new Date());                // false

isNaN(new Date().toString());     // true

isNaN("blabla")   // true: "blabla"不能转换成数值


问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
HTML5与CSS3实现动态网页 2018
  • 参与学习       1887    人
  • 提交作业       4643    份
  • 解答问题       5760    个

有HTML和CSS基础,却不知道如何进阶?本路径带你通过系统学习,完成从“会做网页”到“做出好的动态网页”的蜕变,迈出成为前端工程师的第一步。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师