【javascript学习指南】javascript中undefined 与 null 的区别

时间:2019-05-17  来源:其它  阅读:

其实标题里面我已经列出了JavaScript中所有的"空值"和"假值",除了boolean值本身就是true和false这两种情况外,其它数据类型的"空值"主要是undefined和defined这两大类。这些空值的类型分别是:

 代码如下

 typeof(undefined) == "undefined"
 typeof(null) == "object"
 typeof("") == "string"
 typeof(0) == "number"
 typeof(false) == "boolean"

    这五个值的共同点是,在if语句中做判断,都会执行false分支。当然从广义上来看,是说明这些数值都是其对应数据类型上的无效值或空值。还有这五个值作!运算,结果全为:true。

    这几个值中也有不同,其中undefined和null比较特殊,虽然null的类型是object,但是null不具有任何对象的特性,就是说我们并不能执行null.toString()、null.constructor等对象实例的默认调用。所以从这个意义上来说,null和undefined有最大的相似性。看看null == undefined的结果(true)也就更加能说明这点。不过相似归相似,还是有区别的,就是和数字运算时,10 + null结果为:10;10 + undefined结果为:NaN。

    另外""、0和false虽然在if语句表现为"假值",可它们都是有意义数据,只是被作为了"空值"或"假值",因为:"".toString(),(0).toString()和false.toString()都是合法的可执行表达式。

    其实这5个值在上面所说的这些差异里,并不太会给程流程控制带来太大的问题,那么要区分它们什么呢?需要注意区分的是这些值在转换为String时的差异是比较大的,它们到String的转换关系是:

 代码如下

 String(undefined) -> "undefined"
 String(null) -> "null"
 String("") -> ""
 String(0) -> "0"
 String(false) -> "false"

于是,细想之后,写下本文,请各位大侠拍砖。
总所周知:
null == undefined
但是:
null !== undefined
那么这两者到底有啥区别呢?
null
这是一个对象,但是为空。因为是对象,所以 typeof null 返回 "object" 。
null 是 JavaScript 保留关键字。
null 参与数值运算时其值会自动转换为 0 ,因此,下列表达式计算后会得到正确的数值:
表达式:123 + null结果值:123
表达式:123 * null结果值:0
undefined
undefined是全局对象(window)的一个特殊属性,其值是未定义的。但 typeof undefined 返回 "undefined" 。
虽然undefined是有特殊含义的,但它确实是一个属性,而且是全局对象(window)的属性。请看下面的代码:

目前,null和undefined基本是同义的,只有一些细微的差别。null表示没有对象,即该处不应该有值。典型用法:
作为函数的参数,表示该函数的参数不是对象。
作为对象原型链的终点。
 

 代码如下 Object.getprototypeOf(Object.prototype)

//null
 
undefined表示缺少值,就是此处应该有一个值,但是还没有定义。典型用法:
变量被声明了,但没有赋值时,就等于 undefined。
调用函数时,应该提供的参数没有提供,该参数等于 undefined。
对象没有赋值的属性,该属性的值为 undefined。
函数没有返回值时,返回 undefined。
 

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

【javascript学习指南】javascript中undefined 与 null 的区别

http://m.bbyears.com/luyouqishezhi/51556.html

推荐访问:
相关阅读 猜你喜欢
本类排行 本类最新