JavaScript中undefined與null的區(qū)別
通常情況下, 當(dāng)我們?cè)噲D訪問(wèn)某個(gè)不存在的或者沒(méi)有賦值的變量時(shí),就會(huì)得到一個(gè)undefined值。Javascript會(huì)自動(dòng)將聲明是沒(méi)有進(jìn)行初始化的變量設(shè)為undifined。
如果一個(gè)變量根本不存在會(huì)發(fā)生什么事:
>>> foo
ReferenceError: foo is not defined
我們得到了一個(gè)錯(cuò)誤信息。我們?cè)谠撟兞可嫌胻ypeof操作符看看它是什么類(lèi)型:
>>> typeof foo
"undefined"
我們得到的結(jié)果為字符串“undefined”。
如果我們聲明一個(gè)變量時(shí)沒(méi)有對(duì)其進(jìn)行賦值,調(diào)用該變量時(shí)并不會(huì)出錯(cuò),但typeof操作符依然會(huì)返回字符串“undefined”。
>>> var somevar;
>>> somevar;
undefined
>>> typeof somevar;
"undefined"
而null值就完全是另外一回事啦。 他不能通過(guò)javascript來(lái)自動(dòng)賦值,也就是說(shuō)必須要我們自己手動(dòng)來(lái)給某個(gè)變量賦值為null:
>>> var somevar = null;
>>> somevar;
null
而且,typeof操作符返回的是一個(gè)對(duì)象!
>>> typeof somevar;
"object"
雖然說(shuō),undefine與null之間的差別不是很大,但是他們?cè)谝恍┧銛?shù)運(yùn)算中表現(xiàn)得非常不一樣:
>>> var i = 1 + undefined; i;
NaN
>>> var i = 1 + null; i;
1
這是因?yàn)閡ndefined和null在被轉(zhuǎn)換為其他基本類(lèi)型時(shí),方法存在一定的區(qū)別,下面我們給出一些可能的轉(zhuǎn)換類(lèi)型。
轉(zhuǎn)換為數(shù)字(把undefined看做字符串,null看做0):
>>> 1 * undefined;
NaN
>>> 1 * null;
0
轉(zhuǎn)換為布爾值:
>>> !!undefined;
false
>>> !!null;
false
轉(zhuǎn)換為字符串(都相應(yīng)的轉(zhuǎn)換為字符串):
>>> ''+undefined;
"undefined"
>>> ''+null;
"null"
以上就是undefined與null的區(qū)別,以及在運(yùn)算是要注意的地方。

浙公網(wǎng)安備 33010602011771號(hào)