NaN是什么

百度百科:NaN(Not a Number,非数字)是计算机科学中数值数据类型的一类值,表示未定义或不可表示的值。
虽然 NaN 是“Not a Number”,但是它的类型还是数值类型

console.log(typeof NaN === "number"); //true

NaN 和任何东西都不相等——甚至是它自己本身!

console.log(NaN === NaN); //false

那么为什么NaN不相等呢?因为NaN表示一个非数字的数值类型

var str = '666';
const obj = {age:18};
console.log(isNaN(str));//flase;
console.log(isNaN('666'));//false;
console.log(isNaN(obj));//true;

为什么console.log(isNaN(str)) 和 console.log(isNaN(‘666’)) 会是flase?变量str和‘’不是字符串吗?

其实isNaN()会先将参数转为Number 类型,(Number(),非parseInt()或Math.floor()),再判断是否为NaN ,所以在类型转换失败或运算错误时值为NaN,返回true,其他全为false,再来看一种情况

console.log(isNaN(''));//false
Number(""); //0

isNaN()在使用的时候会存在隐式转换, 其内部使用 Number() 方法尝试将操作的内容转换为数字,如果用isNaN简单的判断input的输入内容是否非数字,如果输入空字符就可能出现永远执行不到else的内容

console.log(Number(''));//0
console.log(Number(" "));//0

继续

var str = '666a';
console.log(isNaN(str));//true

在str变量中随便加入一个非数字的字符,这时结果就是true了,那么回答之前说的NaN为什么不等于NaN
==用于一般比较,===用于严格比较,==在比较的时候可以转换数据类型,===严格比较,只要类型不匹配就返回false

var num = 666;
let str = '666';
console.log(num == str);//true
console.log(num === str);//false

在之前定义的str 和 obj中,都是非数字类型都可以转换成NaN

console.log(typeof str);//string
console.log(typeof obj);//object

类型都不相等,所以NaN不等于NaN,但是有人问了同类型的就可以相等吗?转换成NaN还是不行,NaN表示的一个非法的数字,他具体是什么我们都不知道,又来一个NaN,他又是什么我们也不知道,这两个NaN原来的类型完全无法确定,所以结果肯定是false。

在ES6新的 Number.isNaN() 函数,一个不同的函数,比全局 isNaN() 函数更可靠

 

转载自:https://blog.csdn.net/qq_16918865/article/details/104600450

posted @ 2022-07-20 09:36  阳光下的向日葵  阅读(849)  评论(0)    收藏  举报