概述
百度百科: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
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
==用于一般比较,===用于严格比较,==在比较的时候可以转换数据类型,===严格比较,只要类型不匹配就返回flase
var num = 666;
let strN = '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() 函数更可靠
最后
以上就是独特美女为你收集整理的NaN是什么?NaN == NaN吗?的全部内容,希望文章能够帮你解决NaN是什么?NaN == NaN吗?所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复