isNaN()函数的返回问题

今天碰到一个问题,关于isNaN()函数的.

clipboard.png

在看定义的时候发现如果是字符串都会返回true.但是当字符串为数字的时候,返回的确是false.想请教下这里有什么没注意到的吗?

clipboard.png

阅读 4k
5 个回答

isNaN,”令人费解的怪异行为“那一节提及了,会先进行Number转型再判断。

文档一般来说只要MDN和ECMA是可以信任的。

isNaN会先对括号里的值进行隐式类型转换,是字符串数字的,会将string类型转化为number类型,再进行判断。
但如果是 isNaN("2005avc")此时无法转换为number类型 就会返回true了

ES标准里对 isNaN 的定义

图片描述

以及 ToNumber的定义

图片描述

所以我们还可以发现

isNaN(undefined); // true
isNaN(null); // false

对于String就是按照字面量的方式转换为数字,所以么

function toNumber(x) { return +x;}
toNumber("0xF"); // 15
toNumber("0o17"); // 15
toNumber("0b1111"); // 15

首先要明白isNaN这个函数为什么存在。这个函数的存在是因为当判断一个值是不是number类型的时候,不能排除这个值是不是NaN,因为在js中NaN不等于任何值,包括他自己。

typeof NaN === 'number' //true

就像上面的例子,返回true,但实际上NaN不是一个number,所以就有了isNaN函数,当判断一个值是不是number的时候可以这么写

function isNumber(num){
    return typeof num === 'number' && !isNaN(num) ? true : false
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题