JScript中的undefined和"undefined"的區(qū)別
更新時間:2007年03月08日 00:00:00 作者:
JScript中用于表示未定義的undefined標識符到底是表示什么未定義?它和"undefined"(包括"在內(nèi))又有什么區(qū)別和聯(lián)系呢?為什么有的時候可以使用undefined來和變量做比較,而有的時候又不行呢?
underfined和"undefined"的區(qū)別大家一眼就能看出來。在一般的認知下,我們認為undefined是JScript提供的一個"關(guān)鍵字",而"undefined"卻毫無懸念的就是一個字符串,只是引號內(nèi)的內(nèi)容長得和undefined一個樣。undefined和"undefined"的區(qū)別雖然是十分明顯的,但它們的聯(lián)系也是緊密的。
仔細閱讀JScript手冊,其實這個underfined是一個"已定義"的Global值,而不是它的字面意義所表達的未定義。我們看下面這個代碼示例,很有趣:

<script language="javascript">
alert(undefined);
alert(variable);
</script>
執(zhí)行的結(jié)果是:

我們稍微修改一下上面的代碼,添加一個typeof調(diào)用來看看:
<script language="javascript">
alert(typeof undefined);
alert(typeof variable);
</script>
這下結(jié)果應(yīng)該是什么呢?顯示"object"和"undefined"嗎?當然不是了,兩個alert調(diào)用都將顯示"undefined"。
所以undefined是腳本引擎定義的一個常量,它在腳本引擎初始化完畢后存在。它的實際作用是用來表示一個已定義的變量的未初始化狀態(tài)(uninitialized),比如var i;,這時這個i的值就是undefined,而i是實實在在define了的,只是未初始化。這時我們就可以寫這樣的表達式來對i做判斷,比如if ( i == undefined )。如果從未在代碼中出現(xiàn)過的變量被使用,這時的未定義的概念就是不undefined所描述的未初始化了,而是說明該變量完全未被登記到腳本引擎的上下文中。使用類似if ( abc == undefined )的語句,將得到類似上圖中的第二個錯誤提示。
在實際使用中,如果使用typeof來判斷變量是否未定義,是可以完全兼容未定義(undefined)和未初始化(uninitialized)兩種情況的,只是很多時我不喜歡使用 if ( typeof xxx == 'undefined' ) 這樣的寫法,因為literal的字符串容易拼寫錯誤,對用習(xí)慣了的強類型語言的角度來看也顯得不專業(yè)。
underfined和"undefined"的區(qū)別大家一眼就能看出來。在一般的認知下,我們認為undefined是JScript提供的一個"關(guān)鍵字",而"undefined"卻毫無懸念的就是一個字符串,只是引號內(nèi)的內(nèi)容長得和undefined一個樣。undefined和"undefined"的區(qū)別雖然是十分明顯的,但它們的聯(lián)系也是緊密的。
仔細閱讀JScript手冊,其實這個underfined是一個"已定義"的Global值,而不是它的字面意義所表達的未定義。我們看下面這個代碼示例,很有趣:

<script language="javascript">
alert(undefined);
alert(variable);
</script>執(zhí)行的結(jié)果是:

我們稍微修改一下上面的代碼,添加一個typeof調(diào)用來看看:

<script language="javascript">
alert(typeof undefined);
alert(typeof variable);
</script>這下結(jié)果應(yīng)該是什么呢?顯示"object"和"undefined"嗎?當然不是了,兩個alert調(diào)用都將顯示"undefined"。
所以undefined是腳本引擎定義的一個常量,它在腳本引擎初始化完畢后存在。它的實際作用是用來表示一個已定義的變量的未初始化狀態(tài)(uninitialized),比如var i;,這時這個i的值就是undefined,而i是實實在在define了的,只是未初始化。這時我們就可以寫這樣的表達式來對i做判斷,比如if ( i == undefined )。如果從未在代碼中出現(xiàn)過的變量被使用,這時的未定義的概念就是不undefined所描述的未初始化了,而是說明該變量完全未被登記到腳本引擎的上下文中。使用類似if ( abc == undefined )的語句,將得到類似上圖中的第二個錯誤提示。
在實際使用中,如果使用typeof來判斷變量是否未定義,是可以完全兼容未定義(undefined)和未初始化(uninitialized)兩種情況的,只是很多時我不喜歡使用 if ( typeof xxx == 'undefined' ) 這樣的寫法,因為literal的字符串容易拼寫錯誤,對用習(xí)慣了的強類型語言的角度來看也顯得不專業(yè)。
相關(guān)文章
JavaScript保存并運算頁面中數(shù)字類型變量的寫法
這篇文章主要介紹了JavaScript保存并運算頁面中數(shù)字類型變量的寫法,當你在頁面中需要不停運算一個數(shù)字變量時非常有用,普通的寫法不能正常運算,使用本文方法就可以,需要的朋友可以參考下2015-07-07
JavaScript數(shù)學(xué)對象(Math)方法舉例詳解
這篇文章主要給大家介紹了關(guān)于JavaScript數(shù)學(xué)對象(Math)方法的相關(guān)資料,Math(數(shù)學(xué))對象的作用是執(zhí)行普通的算數(shù)任務(wù),文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-03-03
Javascript中3種實現(xiàn)繼承的方法和代碼實例
這篇文章主要介紹了Javascript中3種實現(xiàn)繼承的方法和代碼實例,這3種方法分別為對象冒充、原型繼承、上二者的混合,需要的朋友可以參考下2014-08-08
JS多個異步請求 按順序執(zhí)行next實現(xiàn)解析
這篇文章主要介紹了js多個異步請求 按順序執(zhí)行next實現(xiàn)解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-09-09
JS 截取字符串substr 和 substring方法的區(qū)別
JS 截取字符串substr 和 substring方法的區(qū)別,需要的朋友可以參考下,根據(jù)需要自行選擇。2009-10-10
用Div仿showModalDialog模式菜單的效果的代碼
用Div仿showModalDialog模式菜單的效果的代碼...2007-03-03

