js中的NaN
逆战班学习心得
NaN 是英语“not a number”的意思,即“不是一个数”。 有意思的是,虽然NaN表示“不是一个数”,但它本身却是一个数字型值:
console.log(typeof(NaN)); //number
JavaScript中用一个数与0求模将得到NaN,因为是没有意义的,结果“不是一个数”。
console.log(10%0);//NaN
人们通常不会刻意使用NaN,往往在遇到一些计算错误时会得到这个值。
正常来说,减法运算应该返回一个数字,那此时返回什么呢?
例如,当计算结果应该是一个数字,但是确实“得不到数字”时,JavaSeript往往会返回NaN。例如:
console.log("李白"-"杜甫");//NaN
试图让字符串“李白”减另个字符串“杜甫”,这是没法计算出结果的,因为字符串减字符串没有任何意义。
有非数值参与的计算
凡是有 NaN 参与的数学运算 , 结果都是 NaN,例如:
var num; //undefinded
console.log(num+100);//NaN
console.log(num-100);//NaN
console.log(100-'a');//NaN
console.log(100-'100a');//NaN
console.log(100-[1,2,3]);//NaN
JavaScript返回NaN,表达了“不是一个数字”的意义,值得一提的是,这个不正确的减法运算在C++或Java中将产生错误,从而使程序崩溃。
int a=10;
char setString[]="10";
int sum;
sum=a+setString;
cout<<a<<endl;
cout<<setString<<endl;
cout<<sum<<endl;
int a=10;
String s = "10";
int sum;
sum=a+s;
System.out.println(a);
System.out.println(s);
可见JavaScript中设计了NaN一值,可以减少很多程序崩溃的机会。
我们在进行强制类型转换的过程中就会发现,以下返回的都为NaN,例如:
console.log(Number('10a'));//NaN
console.log(Number('aa1'));//NaN
console.log(Number(undefined));//NaN
console.log(Number([1,2,3]))//NaN
console.log(Number(function(){console.log(1)}))//NaN
parseInt() 函数把值转换成整数,但只有对String类型调用这些方法,函数才能正确运行;对其他类型返回的都是NaN。parseInt()方法类型转换处理过程为:在判断字符串是否是数字值之前,先仔细分析该字符串。parseInt()方法首先查看位置0处的字符,判断它是否是个有效数字;如果不是该方法返回NaN,不再继续执行其他操作。
console.log(parseFloat('a1'));//NaN
console.log(parseInt('a1'));//NaN
使用 isNaN() 全局函数来判断一个值是否是 NaN 值,返回结果为true则表示不是一个数,返回结果为false则表示是一个数
console.log(isNaN(100));//false
console.log(isNaN('100'));//false
console.log(isNaN(''));//false
console.log(isNaN(5-2));//false
console.log(isNaN('路漫漫'));//true
console.log(isNaN([1,2,3]));//true
NaN 与所有值都不相等,包括它自己,
console.log(NaN==NaN);//false
console.log(NaN!=NaN);//true
上一篇: 判断nan的方法