關於 jquery 的第二個參數 undefined

在看jquery的源碼時,看到定義時第二個參數名是undefined,思考了一下,得出結果: 原來是爲了避免使用被污染的 window.undefined

 

測試如下:

console.log(window.undefined==undefined);

var a,b
console.log(a);
console.log(a==undefined);
console.log(b==a);

console.log('========以下代碼在IE8及以下版本中可以執行成功,在IE9+及其它當前瀏覽器中undefine不能被賦值,會失敗=======================');
window.undefined = 'ha';
console.log(a==undefined);
undefined=a;
console.log(a==b);
console.log(undefined==b);

 

===============================================================

在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即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章