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