有关window.undefined=window.undefined写法的理解

来源:互联网 发布:虚拟定位 源码 编辑:程序博客网 时间:2024/06/04 19:05
    在jquery中我们见到window.undefined=window.undefined的写法,今日又在ext中见到window["undefined"]=window["undefined"],对其写法非常不理解,将自身赋给自身有什么意义,在网上狂搜一番也没有明确的解释,后来看到ext注释写了这么一句:for old browsers,很明显是为了兼容老的浏览器,思虑半天,似乎有了些理解。

// Global undefined variablewindow.undefined = window.undefined; 
    这句代码是什么意思呢?查阅了很多文档,才知道。

    早期的浏览器undefined并不是全局变量,也就是说你不可以写像下面的代码来判断一个变量是不是undefined

if (a == undefined) {   alert('a is undefined!'); } 
    你必须写成

if (typeof( a )== 'undefined') {   alert('a is undefined!'); } 
    这样判断很麻烦的。所以window.undefined = window.undefined这句代码就是把undefined设为全局变量。

    window本来是没有undefined属性的,所以window.undefined的值就是undefined,把undefined赋值给window.undefined属性,undefined就变成全局变量了。

    现在的浏览器都没有这个问题了,估计这个是针对IE 6以前的浏览器。

    在较老的浏览器中,如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;  /oid函数永远返回undefinedvar undefined = function(){}();var undefined = void 0;

    只要等号后的表达式返回undefined即可 


原创粉丝点击