NaN和Infinity,null和undefined

为什么80%的码农都做不了架构师?>>>   hot3.png

作者:汪娇娇

日期:2016.10.10

看到这个标题,大家对这4个变量应该都不陌生,但若说起他们的差别或者是举个小栗子判断结果,估计就有点晕乎乎的了。

1、NaN和Infinity

那先来说说JavaScript的数据类型,有Number、字符串、布尔值、对象等等,而NaN和Infinity就属于Number类型。先说说它俩的差别:

NaN; // NaN表示Not a Number,当无法计算结果时用NaN表示
Infinity; // Infinity表示无限大,当数值超过了JavaScript的Number所能表示的最大值时,就表示为Infinity

举个栗子:

2 / 0; // Infinity
0 / 0; // NaN

并且NaN有个特例,我们都知道相等运算符有两种:== 和 ===。

== 比较,它会自动转换数据类型再比较;

=== 比较,它不会自动转换数据类型,如果数据类型不一致,返回false,如果一致,再比较。

但NaN却和所有的值都不相等,包括它自己:

NaN===NaN;  //false;

唯一能判断NaN的方法是通过IsNaN()函数:

isNaN(NaN); // true

2、null和undefined

null和undefined恰好都是JavaScript的数据类型。

在其他语言中,也有类似JavaScript的null的表示,例如Java也用null,Swift用nil,Python用None表示。

(1)null表示"没有对象",即该处不应该有值。典型用法是:

        a、作为函数的参数,表示该函数的参数不是对象。

        b、作为对象原型链的终点。

举个栗子:

Object.getPrototypeOf(Object.prototype) // null

(2)undefined表示"缺少值",就是此处应该有一个值,但是还没有定义。典型用法是:

        a、变量被声明了,但没有赋值时,就等于undefined。

        b、调用函数时,应该提供的参数没有提供,该参数等于undefined。

        c、对象没有赋值的属性,该属性的值为undefined。

        d、函数没有返回值时,默认返回undefined。

举个栗子:

var i; i // undefined 
function f(x){console.log(x)} f() // undefined
var o = new Object(); o.p // undefined 
var x = f(); x // undefined

事实证明,这并没有什么卵用,区分两者的意义不大。大多数情况下,我们都应该用null,undefined仅仅在判断函数参数是否传递的情况下有用。

举个栗子:

function add(a,b){
	var c=a+b;
	console.log(a+","+b+","+c);
}
add(1,2);//结果是1,2,3
add(1,null);//结果是1,null,1
add(1);//结果是1,undefined,NaN

 

转载于:https://my.oschina.net/jojo76/blog/756236

你可能感兴趣的:(NaN和Infinity,null和undefined)