在Javascript中有兩個(gè)值用來代表類似空值的概念,undefined和null,這兩個(gè)很容易被混淆,他們表示的是兩個(gè)不同的概念。
先說說undefined:
Javascript中的變量是弱類型的(關(guān)于這個(gè)我想就不用我多解釋啦), 所以聲明變量的時(shí)候只需使用var關(guān)鍵字即可。如果是像C這樣的強(qiáng)類型語言, 聲明變量的時(shí)候如果沒有指定初始值,那么會(huì)給他一個(gè)默認(rèn)值,比如int變量的默認(rèn)值是0。但是在Javascript這樣的弱類型語言中,沒有辦法確定到底該給這樣的變量一個(gè)什么樣的默認(rèn)值,比如我聲明一個(gè)變量
var v1;
是給他false還是0,或者是'' ?
因?yàn)闆]有類型,所以無法確定。 在Javascript中對于這種生命后沒有給定初始值的變量,就給他一個(gè)undefined。不過前提是這個(gè)變量必須已經(jīng)聲明,如果對于沒有聲明過的標(biāo)識符,就會(huì)出錯(cuò)。看看下面的代碼。
1 var v1;
2 alert(v1); //undefined
3 alert(v2); //報(bào)錯(cuò)
再來說說null,Javscript有幾個(gè)基本類型,Number,String,Boolean,Object。對于Object 類型的變量,他有兩種情況,一種是他是一個(gè)對象的實(shí)例,另一種他是一個(gè)空引用null,熟悉類似Java這樣面向?qū)ο笳Z言的朋友應(yīng)該很容易理解。對于這兩種情況,他們的類型都是Object。Javascript中的變量,在給他賦值的時(shí)候,才
會(huì)確定它的類型,比如下面這樣。
1 var v1 = 1;
2 var v2 = true;
3
4 alert(typeof v1); //number
5 alert(typeof v2); //boolean
6
7 v2 = new Date();
8 alert(typeof v2); //object
9
10 v2 = "str";
11 alert(typeof v2); //string
12
13 v2 = null;
14 alert(typeof v2); //object
可以看到,null在 Javascript中代表一個(gè)特殊的Object類型的值,他用來表示空引用的概念,如果要將一個(gè)標(biāo)識符聲明稱object類型,但是暫時(shí)不給他實(shí)例,那么就可以將它先初始化為null,以便以后使用。
不一定絕對正確,簡單來說,對于所有變量,只要聲明后還沒有指定初始值 ,那么他就是undefined,如果是Object類型用來表示空引用的概念,那么就是用null來表示。