JavaScript中的null和undefined

來源:互聯網
上載者:User
javascript

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的字串容易拼字錯誤,對用習慣了的強型別語言的角度來看也顯得不專業。



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。