|
underfined和"undefined"的區(qū)別大家一眼就能看出來。在一般的認(rèn)知下,我們認(rèn)為undefined是JScript提供的一個(gè)"關(guān)鍵字",而"undefined"卻毫無懸念的就是一個(gè)字符串,只是引號(hào)內(nèi)的內(nèi)容長得和undefined一個(gè)樣。undefined和"undefined"的區(qū)別雖然是十分明顯的,但它們的聯(lián)系也是緊密的。
仔細(xì)閱讀JScript手冊,其實(shí)這個(gè)underfined是一個(gè)"已定義"的Global值,而不是它的字面意義所表達(dá)的未定義。我們看下面這個(gè)代碼示例,很有趣:






執(zhí)行的結(jié)果是:

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






這下結(jié)果應(yīng)該是什么呢?顯示"object"和"undefined"嗎?當(dāng)然不是了,兩個(gè)alert調(diào)用都將顯示"undefined"。
所以u(píng)ndefined是腳本引擎定義的一個(gè)常量,它在腳本引擎初始化完畢后存在。它的實(shí)際作用是用來表示一個(gè)已定義的變量的未初始化狀態(tài)(uninitialized),比如var i;,這時(shí)這個(gè)i的值就是undefined,而i是實(shí)實(shí)在在define了的,只是未初始化。這時(shí)我們就可以寫這樣的表達(dá)式來對i做判斷,比如if ( i == undefined )。如果從未在代碼中出現(xiàn)過的變量被使用,這時(shí)的未定義的概念就是不undefined所描述的未初始化了,而是說明該變量完全未被登記到腳本引擎的上下文中。使用類似if ( abc == undefined )的語句,將得到類似上圖中的第二個(gè)錯(cuò)誤提示。
在實(shí)際使用中,如果使用typeof來判斷變量是否未定義,是可以完全兼容未定義(undefined)和未初始化(uninitialized)兩種情況的,只是很多時(shí)我不喜歡使用 if ( typeof xxx == 'undefined' ) 這樣的寫法,因?yàn)閘iteral的字符串容易拼寫錯(cuò)誤,對用習(xí)慣了的強(qiáng)類型語言的角度來看也顯得不專業(yè)。
JavaScript技術(shù):JScript中的undefined和&quot;undefined&quot;的區(qū)別,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。