undefined與null的區(qū)別

在常見的強(qiáng)類型語言中宵蛀,通常有一個表示“空”的值,比如NULL县貌。但是在JavaScript中术陶,空(或者叫“無值”)有兩種選擇:undefined和null。在javascript中除了這兩個值其他都是對象煤痕。其他的基本類型都有其他對象的保證類型梧宫。但是typeof null 返回的是object接谨,這是一個一直未修復(fù)的bug。

相似之處

都是完全不可變的塘匣,沒有屬性和方法脓豪,也不能給其屬性賦值。事實(shí)上忌卤,試圖訪問或定義一個屬性將會引發(fā)一個類型錯誤(TypeError)扫夜。正如它們的名字暗示的那樣,它們是完全無效的值驰徊。

不同之處

一個重要的區(qū)別笤闯,服務(wù)于不同的目的和理由。區(qū)分這兩個值棍厂,你可以認(rèn)為undefined代表一個意想不到的沒有值而null作為預(yù)期沒有值的代表颗味。
使用Object.prototype.toString.call()形式可以具體打印類型。

undefined

undefined實(shí)際上代表了不存在的值牺弹。
有許多的方法產(chǎn)生一個undefined值的代碼脱衙,它通常遇到當(dāng)試圖訪問一個不存在的值時。在這種情況下例驹,在JavaScript這種動態(tài)弱類型語言中捐韩,只會默認(rèn)返回一個undefined值,而不是上升為一個錯誤:

  • 任何聲明變量時沒有提供一個初始值鹃锈,都會有一個為undefined的默認(rèn)值
  • 當(dāng)試圖訪問一個不存在的對象屬性或數(shù)組項(xiàng)時荤胁,返回一個undefined值
  • 如果省略了函數(shù)的返回語句,返回undefined
  • 函數(shù)調(diào)用時未提供的值結(jié)果為undefined參數(shù)值
  • void操作符也可以返回一個undefined值屎债。像Underscore的庫使用它作為一個防御式的類型檢查仅政,因?yàn)樗遣豢勺兊模梢栽谌魏紊舷挛囊蕾嚪祷豼ndefined
  • undefined是一個預(yù)定義的全局變量(不像null關(guān)鍵字)初始化為undefined值

null

通常用作一個空引用一個空對象的預(yù)期盆驹,就像一個占位符圆丹。typeof的這種行為已經(jīng)被明確認(rèn)為一個錯誤,雖然提出了修正躯喇,出于后兼容的目的辫封,這一點(diǎn)已經(jīng)保持不變。這就是為什么JavaScript環(huán)境從來沒有設(shè)置一個值為null;它必須以編程方式完成廉丽。
使用null的情況:

  • Dom倦微,它是獨(dú)立于語言的,不屬于ECMAScript規(guī)范的范圍正压。因?yàn)樗且粋€外部API欣福,試圖獲取一個不存在的元素返回一個null值,而不是undefined焦履。
  • 如果你需要給一個變量或?qū)傩灾付ㄒ粋€不變值拓劝,將它傳遞給一個函數(shù)雏逾,或者從一個函數(shù)返回null,null幾乎是最好的選擇郑临。
  • JavaScript使用undefined并且程序員應(yīng)該使用null校套。
  • 通過分配null值,有效地的清除引用牧抵,并假設(shè)對象沒有引用其他代碼笛匙,指定垃圾收集,確毕洌回收內(nèi)存妹孙。

Object.prototype.toString調(diào)用過程

  • 如果值是undefined,返回"[object Undefined]"
  • 如果值為null获枝,則返回"[Object Null]"
  • 讓O作為調(diào)用ToObject同時傳遞this值作為參數(shù)的結(jié)果值蠢正。
  • 讓class是O的內(nèi)部屬性[[Class]]的值。
  • 返回的結(jié)果連接三個字符串"[object ",class,和"]"的結(jié)果的字符串值省店。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嚣崭,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子懦傍,更是在濱河造成了極大的恐慌雹舀,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件粗俱,死亡現(xiàn)場離奇詭異说榆,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)寸认,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進(jìn)店門签财,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人偏塞,你說我怎么就攤上這事唱蒸。” “怎么了灸叼?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵神汹,是天一觀的道長。 經(jīng)常有香客問我怜姿,道長慎冤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任沧卢,我火速辦了婚禮,結(jié)果婚禮上醉者,老公的妹妹穿的比我還像新娘但狭。我一直安慰自己披诗,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布立磁。 她就那樣靜靜地躺著呈队,像睡著了一般。 火紅的嫁衣襯著肌膚如雪唱歧。 梳的紋絲不亂的頭發(fā)上宪摧,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天,我揣著相機(jī)與錄音颅崩,去河邊找鬼几于。 笑死,一個胖子當(dāng)著我的面吹牛沿后,可吹牛的內(nèi)容都是我干的沿彭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼尖滚,長吁一口氣:“原來是場噩夢啊……” “哼喉刘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起漆弄,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤睦裳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后撼唾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體推沸,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年券坞,在試婚紗的時候發(fā)現(xiàn)自己被綠了鬓催。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡恨锚,死狀恐怖宇驾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情猴伶,我是刑警寧澤课舍,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站他挎,受9級特大地震影響筝尾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜办桨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一筹淫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧呢撞,春花似錦损姜、人聲如沸饰剥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽汰蓉。三九已至,卻和暖如春棒卷,著一層夾襖步出監(jiān)牢的瞬間顾孽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工比规, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留若厚,地道東北人。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓苞俘,卻偏偏與公主長得像盹沈,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子吃谣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內(nèi)容