您的位置:首页 > Web前端 > JavaScript

javascript中undefined和null的区别详解

2014-07-09 14:34 120 查看

一、问题的由来

永远不要直接使用undefined进行变量判断
使用字符串"undefined"对变量进行判断



这里,undefined是原始值,在JS中undefined出现只有两种情况,一种是变量未定义。一种是定义了变量,但是没有赋值。

如果这个地方person未定义,那么利用person===undefined全等判断就会报错,person未定义
但是如果使用typeof来判断,那么就不会报错了.

ep:

alert(person==undefined);//报错personisundefined

alert(typeofperson);//不会报错undefined

二、什么是原始值?

原始值是什么意思呢?

在ECMAScript中,变量可以存放两种类型的值,即原始值和引用值.

原始值(primitivevalue):


原始值是固定而简单的值,是存放在栈(stack)中的简单数据段,也就是说,它们的值直接存储在变量访问的位置.


引用值(referencevalue):


引用值则是比较大的对象,存放在堆(heap)中的对象,也就是说,存储在变量处的值是一个指针(pointer),指向存储对象的内存处.

所有引用类型都集成自Object.


如果一个值是引用类型的,那么它的存储空间将从堆中分配.由于引用值的大小会改变,所以不能把它放在栈中,否则会降低查询速度.相反,存放变量的栈空间中的值是该对象存储在堆中的地址.地址的大小是固定的,所以把它存放在栈中对变量性能无任何负面影响.如图:



有哪些类型是原始类型呢?


原始类型(primitivetype)有以下五种类型:Undefined,Null,Boolean,Number,String

我们可以使用typeof来判断一个是否在某个类型的范围内.


typeof运算符


对变量或值使用typeof运算符将会返回下列值之一:

"undefined"如果变量是Undefined类型的
"boolean"如果变量是Boolean类型的
"number"如果变量是Number类型的
"string"如果变量是String类型的
"object"如果变量是一种引用类型或者Null类型的
注意:

1.返回值为字符串类型.

2.和原始类型比,还差了个null,这个比较特殊,使用typeof(null),返回的是"object",我们将null理解成是object的占位符.


三、最初设计

JavaScript的最初版本是这样区分的:null是一个表示"无"的对象,转为数值时为0;undefined是一个表示"无"的原始值,转为数值时为NaN。


Number(undefined)
//NaN

5+undefined
//NaN




四、目前的用法

但是,上面这样的区分,在实践中很快就被证明不可行。目前,null和undefined基本是同义的,只有一些细微的差别。

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


(1)作为函数的参数,表示该函数的参数不是对象。

(2)作为对象原型链的终点。




Object.getPrototypeOf(Object.prototype)
//null



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


(1)变量被声明了,但没有赋值时,就等于undefined。

(2)调用函数时,应该提供的参数没有提供,该参数等于undefined。

(3)对象没有赋值的属性,该属性的值为undefined。

(4)函数没有返回值时,默认返回undefined。




vari;
i//undefined

functionf(x){console.log(x)}
f()//undefined

varo=newObject();
o.p//undefined

varx=f();
x//undefined



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: