轉(zhuǎn) http://www.cnitblog.com/yemoo/archive/2007/10/11/34712.html
在jquery中我們見到window.undefined=window.undefined的寫法,今日又在ext中見到window["undefined"]=window["undefined"],對(duì)其寫法非常不理解,將自身賦給自身有什么意義,在網(wǎng)上狂搜一番也沒有明確的解釋,后來看到ext注釋寫了這么一句:for old browsers,很明顯是為了兼容老的瀏覽器,思慮半天,似乎有了些理解。
在較老的瀏覽器中,如IE5之前的瀏覽器,undefined并不是window對(duì)象的一個(gè)子對(duì)象,并不是一個(gè)已實(shí)現(xiàn)的系統(tǒng)保留字,而是代表一個(gè)未定義類
型,除了直接賦值和typeof()之外,其它任何對(duì)undefined的操作都將導(dǎo)致異常。如果需要知道一個(gè)變量是否是undefined,只能采用
typeof()的方法:如var v;if (typeof(v) == 'undefined') {//
...}。如果使用if(a==="undefined")則會(huì)報(bào)“undefined未定義”的錯(cuò)誤。
因此為了兼容IE5及之前的
瀏覽器,我們可以使用一些方法來解決這個(gè)問題。本文前面說到的就是其中一種方式。window.undefined=window.undefined;
咋一看很難理解,寫法有點(diǎn)bt,但理解一下就不覺得奇怪了,在較早的瀏覽器中因?yàn)閣indow.undefined不存在所以會(huì)返回undefined,
將此賦給等號(hào)前的window.undefined這樣后面就可以直接使用if(a==="undefined")的判斷方式了。在新版本的瀏覽器中
window.undefined=undefined;因此不會(huì)造成什么負(fù)面影響。
除了使用window.undefined=window.undefined和window["undefined"]=window["undefined"]外,還有很多別的辦法來實(shí)現(xiàn)對(duì)IE5及之前瀏覽器的兼容,如
var undefined = void null; //void函數(shù)永遠(yuǎn)返回undefined
var undefined = function(){}();
var undefined = void 0;
只要等號(hào)后的表達(dá)式返回undefined即可。