JavaScript中null和undefined

zhaodeng 7年前發布 | 10K 次閱讀 JavaScript開發 JavaScript

JavaScript的數據類型大體分為兩類:原始類型和對象類型。其中,原始類型包括數字、字符串和布爾值。此外,JavaScript中還有兩個特殊的原始值:null(空)和undefined(未定義),它們不是數字、字符串和布爾值,它們通常分別代表各自特殊類型中唯一的成員。

null

null是JavaScript語言的關鍵字,它表示一個特殊值,常用來描述“空值”。對null執行typeof預算,結果返回字符串“object"(如下圖),所以說,也可以將null認為是一個特殊的對象值,它的含義是“非對象”。但實際上,通常認為null是它自有類型的唯一的一個成員,它可以表示數字、字符串、對象是“無值”的。

typeof(null); // object

undefined

undefined也可以用來表示值的空缺。它和null不一樣,它不是關鍵字,它是變量的一種取值,表明變量沒有初始化,在查詢對象的屬性或數組元素的值時返回undefined,則說明這個屬性或元素不存在。如果函數沒有返回任何值,則返回undefined。引用沒有提供實參的函數形參的值也只會得到undefined。undefined是預定義的全局變量,它的值就是“未定義”。

null和undefined相同之處

null和undefined都是完全不可變的值,都沒有屬性和方法,也不能給它們添加屬性或者賦值(因為它們根本沒有屬性)。如果試圖定義一個屬性將會引發一個類型錯誤(如下圖),它們是完全無效的值。

在 JavaScript中,“ 沒有值 ”代表的布爾值是false,這意味著他們在條件上下文中會被被計算為false,如if語句中。

注意:使用相等操作符 ( == )比較這兩個值和其他false值是不相等的,如果比較它們兩個是相等的,但是不全等(===),因為類型不一樣。

疑問:既然 null和undefined在if判斷語句中都表示為false,為什么不能和false值相等呢?

用等于( ==)操作符將false對象和其他對象進行比較的時候,會發現,只有0和空字符串等于false;undefined和null對象并不等于false對象,而null和undefined是相等的。所以,可以把0、空字符串和false歸為一類,稱為“假值”;把null和undefined歸為一類,稱為"空值"。( 個人理解:也就是說在 JavaScript中,假值和空值都有一個共性,那就是在作為if的條件分支時,均被視為false ;應用"!"操作之后得到的均為true )

舉例說明一下:

if語句中,null舉例說明

if語句中,undefined舉例說明

null和undefined區別

null和undefined基本是同義的,只有一些細微的差別。

1、null是一個表示“沒有”的對象,轉為數值時為0;undefined是一個表示"未定義"的原始值,轉為數值時為NaN。

2 、 null 表示“沒有對象”,即該處不應該有值。 undefined 表示 " 缺少值 " ,就是此處應該有一個值,但是還沒有定義。

3 、 null 和 undefined 通過 typeof 判斷出的結果不一樣。

備注:有資料顯示, typeof 的這種行為已經被確認為一個錯誤,雖然提出了修正,出于后兼容的目的,這一點已經保持不變。

擴展:

在 ECMAScript 3中,undefined是可讀/寫的變量,可以給它賦任意值。這個錯誤在ECMAScript 5中做了修正,undefined在該版本中是只讀的。

null經常被用于顯式地指定變量為無效(object= null)當一個引用不再是必需的,通過分配null值,有效地清除引用,并假設對象沒有引用其他代碼,指定垃圾收集,確保回收內存。有時也會在定義變量時,初始化為null;

undefined很少或者說不建議用在任何地方,undefined經常會出現在許多的方法代碼中。通常遇到當試圖訪問一個不存在的值時,只會默認返回一個undefined值,而不是上升為一個錯誤。 任何聲明變量時沒有提供一個初始值,都會有一個為undefined的默認值。

總結:可以把 undefined認為是表示系統級的、出乎意料的、或者是類似錯誤的值的空缺,而null是表示程序級的、正常的或在意料之中的值的空缺。如果想把它們賦值給變量或者屬性,或將它們作為參數傳人函數,最佳選擇是使用null。

 

來自:http://www.cnblogs.com/webhome/p/6272940.html

 

 本文由用戶 zhaodeng 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!