JavaScript中Null和Undefined的區別

Null:

null是js中的關鍵字,表示空值,null可以看作是object的一個特殊的值,如果一個object值爲空,表示這個對象不是有效對象。

Undefined:

undefined不是js中的關鍵字,其是一個全局變量,是Global的一個屬性,以下情況會返回undefined:

1)使用了一個未定義的變量;var i;

2)使用了已定義但未聲明的變量;

3)使用了一個對象屬性,但該屬性不存在或者未賦值;

4)調用函數時,該提供的參數沒有提供:

function func(a){

   console.log(a);      

}

func();//undefined

 5)函數沒有返回值時,默認返回undefined

var aa=func();

aa;//undefined

相同點:

都是原始類型的值,保存在棧中變量本地

兩者的區別:

1.類型不一樣:

console.log(typeOf undefined);//undefined

console.log(typeOf null);//object

2.轉化爲值時不一樣:undefined爲NaN ,null爲0

console.log(Number(undefined));//NaN
console.log(Number(10+undefined));//NaN
console.log(Number(null));//0
console.log(Number(10+null));//10

 3.undefined===null;//false

    undefined==null;//true

何時使用:

null當使用完一個比較大的對象時,需要對其進行釋放內存時,設置爲null;

var arr=["aa","bb","cc"];

arr=null;//釋放指向數組的引用

        先說null,它表示一個特殊值,常用來描述“空值”。對null執行typeof運算,結果返回字符串“object”,也就是說,可以將null認爲是一個特殊的對象值,含義是“非對象”(感覺怪怪的)。實際上,通常認爲null是它自有類型的唯一一個成員,它可以表示數字、字符串和對象是“無值”的。

  JavaScript還有第二個值來表示值的空缺,就是undefined啦,用未定義的值表示更深層次的“空值”。undefined出現有4種情況:①變量聲明但沒有初始化時②要查詢的對象屬性或數組的元素不存在時③如果函數沒有任何返回值,則返回undefined④引用沒有提供實參的函數形參的值也只會得到undefined。

  兩者相同點:①正如前面所說,它們都是“假值”,也就是說JavaScript期望使用一個布爾值時,它們都會被轉換成false;②它們兩個都不包含任何屬性和方法;③在根據需要轉換成對象時兩者都會報異常,即throws TypeError。

  兩者不同點:①null是JavaScript語言的關鍵字,而undefined是JavaScript預定義的全局變量,不是關鍵字。並且,在ECMAScript 3中,undefined是可讀、可寫的變量,可以給它賦任何值,這個錯誤在ECMAScript 5中做了修正,在該版本中undefined是隻讀的(看到網上說現在的瀏覽器基本上都是支持ECMAScript 5了,不知道爲什麼我在瀏覽器中給undefined賦值沒有報錯,只是並沒有改變它的值);②執行typeof運算,null返回“object”字符串,undefined返回“undefined”字符串;③undefined在根據需要自行轉換爲字符串是轉換爲"undefined",而null轉換爲"null";④undefined在根據需要自行轉換爲數字時轉換爲NaN,而null轉換爲0。

  至於把null和undefined做比較,null == undefined 返回true,null === undefined 返回false。可以認爲undefined是表示系統級的、出乎意料的或類似錯誤的值的空缺,而null是表示程序級的、正常的或在意料之中的值的空缺。如果想把它們賦值給變量或屬性或者當做參數傳入函數,最好選擇使用null。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章