DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> 關於JavaScript >> javascript中的undefined 與 null 的區別 補充篇
javascript中的undefined 與 null 的區別 補充篇
編輯:關於JavaScript     

之前發不過類似的文章
JavaScript null和undefined區別分析

JavaScript Undefined,Null類型和NaN值區別

先說說undefined:
Javascript中的變量是弱類型的(關於這個我想就不用我多解釋啦), 所以聲明變量的時候只需使用var關鍵字即可。如果是像C這樣的強類型語言, 聲明變量的時候如果沒有指定初始值,那麼會給他一個默認值,比如int變量的默認值是0。但是在Javascript這樣的弱類型語言中,沒有辦法確定到底該給這樣的變量一個什麼樣的默認值,比如我聲明一個變量
var v1;
是給他false還是0,或者是'' ?
因為沒有類型,所以無法確定。 在Javascript中對於這種生命後沒有給定初始值的變量,就給他一個undefined。不過前提是這個變量必須已經聲明,如果對於沒有聲明過的標識符,就會出錯。看看下面的代碼。
復制代碼 代碼如下:
var v1;
alert(v1); //undefined
alert(v2); //報錯

    再來說說null,Javscript有幾個基本類型,Number,String,Boolean,Object。對於Object 類型的變量,他有兩種情況,一種是他是一個對象的實例,另一種他是一個空引用null,熟悉類似Java這樣面向對象語言的朋友應該很容易理解。對於這兩種情況,他們的類型都是Object。Javascript中的變量,在給他賦值的時候,才
會確定它的類型,比如下面這樣。
復制代碼 代碼如下:
var v1 = 1;
var v2 = true;

alert(typeof v1); //number
alert(typeof v2); //boolean

v2 = new Date();
alert(typeof v2); //object

v2 = "str";
alert(typeof v2); //string

v2 = null;
alert(typeof v2); //object

    可以看到,null在 Javascript中代表一個特殊的Object類型的值,他用來表示空引用的概念,如果要將一個標識符聲明稱object類型,但是暫時不給他實例,那麼就可以將它先初始化為null,以便以後使用。
    不一定絕對正確,簡單來說,對於所有變量,只要聲明後還沒有指定初始值 ,那麼他就是undefined,如果是Object類型用來表示空引用的概念,那麼就是用null來表示。
下面是一些補充:
null :表示無值;
undefined : 表示一個未聲明的變量,或已聲明但沒有賦值的變量,或一個並不存在的對象屬性。==運算符將兩者看作相等。如果要區分兩者,要使用===或typeof運算符。
使用if (!object){}兩者就都包含了
補充:2006.12.6
復制代碼 代碼如下:
var obj = "aaa";
var nullobj;
if (obj == null || obj == undefined || (!obj) ){
alert("obj is null");
}
if (nullobj == null){
alert("obj is null");
}
if (nullobj == undefined){
alert("obj is undefined ");
}
if ( !nullobj ){
alert("! obj ");
}

關於undefined和"undefined的補充(2007/1/30):
JScript中用於表示未定義的undefined標識符到底是表示什麼未定義?它和"undefined"(包括"在內)又有什麼區別和聯系呢?為什麼有的時候可以使用undefined來和變量做比較,而有的時候又不行呢?
underfined和"undefined"的區別大家一眼就能看出來。在一般的認知下,我們認為undefined是JScript提供的一個"關鍵字",而"undefined"卻毫無懸念的就是一個字符串,只是引號內的內容長得和undefined一個樣。undefined和"undefined"的區別雖然是十分明顯的,但它們的聯系也是緊密的。
仔細閱讀JScript手冊,其實這個underfined是一個"已定義"的Global值,而不是它的字面意義所表達的未定義。我們看下面這個代碼示例,很有趣:
復制代碼 代碼如下:
<script language="Javascript">
alert(undefined);
alert(variable);
</script>

執行的結果是:
我們稍微修改一下上面的代碼,添加一個typeof調用來看看:
復制代碼 代碼如下:
<script language="Javascript">
alert(typeof undefined);
alert(typeof variable);
</script>

這下結果應該是什麼呢?顯示"object"和"undefined"嗎?當然不是了,兩個alert調用都將顯示"undefined"。
所以undefined是腳本引擎定義的一個常量,它在腳本引擎初始化完畢後存在。它的實際作用是用來表示一個已定義的變量的為初始化狀態(uninitialized),比如var i;,這時這個i的值就是undefined,而i是實實在在define了的,只是未初始化。這時我們就可以寫這樣的表達式來對i做判斷,比如if ( i == undefined )。如果從未在代碼中出現過的變量被使用,這時的未定義的概念就是不undefined所描述的未初始化了,而是說明該變量完全未被登記到腳本引擎的上下文中。使用類似if ( abc == undefined )的語句,將得到類似上圖中的第二個錯誤提示。
在實際使用中,如果使用typeof來判斷變量是否未定義,是可以完全兼容未定義(undefined)和未初始化(uninitialized)兩種情況的,只是很多時我不喜歡使用 if ( typeof xxx == 'undefined' ) 這樣的寫法,因為literal的字符串容易拼寫錯誤,對用習慣了的強類型語言的角度來看也顯得不專業。
undefined:未定義 如聲明一個變量而不賦值給它,或使用一個不存在的對象屬性
null:空值 這個真的不好理解
好象是為了兼容以前的浏覽器(IE4.0才有undefined吧)而把null和undefined認為是相同
復制代碼 代碼如下:
<script language="javascript">
var msg="使用未聲明的變量undef_x: ";
if(typeof(undef_x)=="undefined")msg+="undefined ";
else msg+="defined ";
msg+="\n";
msg+="聲明變量後未賦值undef_null_x: ";
var undef_null_x;
if(typeof(undef_null_x)=="undefined")msg+="undefined ";else msg+="defined ";
if(undef_null_x==null)msg+="null ";else msg+="not null";
msg+="\n";
msg+="變量賦值null null_x: ";
var null_x=null;
if(typeof(null_x)=="undefined")msg+="undefined ";else msg+="defined ";
if(null_x==null)msg+="null ";else msg+="not null";
msg+="\n";
msg+="變量賦\"\"值 x: ";
var x="";
if(typeof(x)=="undefined")msg+="undefined ";else msg+="defined ";
if(x==null)msg+="null ";else msg+="not null";
alert(msg);
</script>

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved