今天碰到一个问题,关于isNaN()函数的.
在看定义的时候发现如果是字符串都会返回true.但是当字符串为数字的时候,返回的确是false.想请教下这里有什么没注意到的吗?
今天碰到一个问题,关于isNaN()函数的.
在看定义的时候发现如果是字符串都会返回true.但是当字符串为数字的时候,返回的确是false.想请教下这里有什么没注意到的吗?
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
}
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
isNaN,”令人费解的怪异行为“那一节提及了,会先进行Number转型再判断。
文档一般来说只要MDN和ECMA是可以信任的。