JavaScript中的null和undefined有什麼區別?

我想知道JavaScript中nullundefined之間的區別。 javascript


#1樓

因爲typeof返回undefined,所以undefined是一種類型,其中null表示一個初始化器,該變量表示沒有對象(Javascript中的幾乎全部對象都是對象)。 java


#2樓

null和undefined都用於表示缺乏某些值。 函數

var a = null;

初始化並定義。 測試

typeof(a)
//object

null是JavaScript中的對象 this

Object.prototype.toString.call(a) // [object Object]

var b;

b是未定義和未初始化的 lua

未定義的對象屬性也是未定義的。 例如,在對象c上未定義「 x」,而且若是您嘗試訪問cx,它將返回未定義。 spa

一般,咱們將null分配給未定義的變量。 prototype


#3樓

null是表示沒有值的特殊關鍵字。 code

將其視爲一個值,例如: 對象

  • 「 foo」是字符串,
  • 布爾值true,
  • 1234是數字
  • null未定義。

undefined屬性表示還沒有爲變量分配包含null的值。 喜歡

var foo;

已定義的空變量爲數據類型undefined null


他們兩個都表明一個沒有值的變量的值

null並不表明沒有價值的字符串 -空與字符串


喜歡

var a = ''; 
console.log(typeof a); // string 
console.log(a == null); //false 
console.log(a == undefined); // false

如今若是

var a;
console.log(a == null); //true
console.log(a == undefined); //true

var a; 
console.log(a === null); //false 
console.log(a === undefined); // true

因此每一個人都有本身的使用方式

undefined用它來比較變量數據類型

null使用它來清空變量的值

var a = 'javascript';
a = null ; // will change the type of variable "a" from string to object

#4樓

在JavasSript中,有5種原始數據類型String,Number,Boolean,null和undefined。 我將嘗試用一些簡單的例子來解釋

能夠說咱們有一個簡單的功能

function test(a) {

     if(a == null){
        alert("a is null");
     } else {
        alert("The value of a is " + a);
     }
  }

也在上面的函數中if(a == null)與if(!a)相同

如今,當咱們調用此函數而不傳遞參數a時

test(); it will alert "a is null";
   test(4); it will alert "The value of a is " + 4;

var a;
alert(typeof a);

這將給未定義; 咱們已經聲明瞭一個變量,但沒有給該變量賦任何值; 可是若是咱們寫

var a = null;
alert(typeof a); will give alert as object

因此null是一個對象。 以某種方式,咱們爲'a'分配了null值


#5樓

nullundefined是兩種不一樣的對象類型,它們具備如下共同點:

  • 二者都只能保存一個值,分別爲nullundefined
  • 二者都沒有屬性或方法,而且嘗試讀取其中任何一個的屬性都將致使運行時錯誤(對於全部其餘對象,若是嘗試讀取不存在的屬性,則會獲得未定義的值);
  • ==!=運算符認爲nullundefined值彼此相等,而別無其餘。

可是,類似之處到此結束。 一次,關鍵字nullundefined的實現方式存在根本差別。 這並不明顯,可是請考慮如下示例:

var undefined = "foo";
WScript.Echo(undefined); // This will print: foo

undefinedNaNInfinity只是預初始化的「超全局」變量的名稱-它們在運行時進行初始化,而且能夠被具備相同名稱的常規全局或局部變量覆蓋。

如今,讓咱們嘗試使用null進行相同的操做:

var null = "foo"; // This will cause a compile-time error
WScript.Echo(null);

糟糕! nulltruefalse是保留關鍵字-編譯器不容許您將它們用做變量或屬性名稱

另外一個區別是, undefined是原始類型,而null是對象類型(表示沒有對象引用)。 考慮如下:

WScript.Echo(typeof false); // Will print: boolean
WScript.Echo(typeof 0); // Will print: number
WScript.Echo(typeof ""); // Will print: string
WScript.Echo(typeof {}); // Will print: object
WScript.Echo(typeof undefined); // Will print: undefined
WScript.Echo(typeof null); // (!!!) Will print: object

此外,在數字上下文中處理nullundefined的方式也存在重要區別:

var a; // declared but uninitialized variables hold the value undefined
WScript.Echo(a === undefined); // Prints: -1

var b = null; // the value null must be explicitly assigned 
WScript.Echo(b === null); // Prints: -1

WScript.Echo(a == b); // Prints: -1 (as expected)
WScript.Echo(a >= b); // Prints: 0 (WTF!?)

WScript.Echo(a >= a); // Prints: 0 (!!!???)
WScript.Echo(isNaN(a)); // Prints: -1 (a evaluates to NaN!)
WScript.Echo(1*a); // Prints: -1.#IND (in Echo output this means NaN)

WScript.Echo(b >= b); // Prints: -1 (as expected)
WScript.Echo(isNaN(b)); // Prints: 0 (b evaluates to a valid number)
WScript.Echo(1*b); // Prints: 0 (b evaluates to 0)

WScript.Echo(a >= 0 && a <= 0); // Prints: 0 (as expected)
WScript.Echo(a == 0); // Prints: 0 (as expected)
WScript.Echo(b >= 0 && b <= 0); // Prints: -1 (as expected)
WScript.Echo(b == 0); // Prints: 0 (!!!)

當在算術表達式或數值比較中使用null時,它變爲0-false類似,它基本上只是一種特殊的「零」。 另外一方面, undefined是真正的「無」,當您嘗試在數字上下文中使用它時,它會變爲NaN (「非數字」)。

請注意, nullundefined==!=運算符處獲得特殊處理,可是您可使用表達式(a >= b && a <= b)來測試ab的真數值相等性。

相關文章
相關標籤/搜索