关于 jquery 的第二个参数 undefined
来源:互联网 发布:吉利知豆d1 编辑:程序博客网 时间:2024/05/16 04:22
在看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('===============================');
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即可。
- 关于 jquery 的第二个参数 undefined
- 关于 jquery 的第二个参数 undefined
- jQuery()方法的第二个参数详解
- 关于sprintf_s第二个参数的用法
- 关于main函数的第二个参数
- jquery()方法 第二个参数详解
- setTimeout的第二个参数
- jQuery函数的第二个参数获取指定上下文中的DOM元素
- 简谈jQuery选择器的第二个参数Context对象以及jQuery对象转换成DOM对象的方法
- 关于 UnixDomaiSocket 中 send(; ; ; ) 的第二个参数使用 char *str 的可行性验证
- 关于listen的第二个参数backlog的一些问答见解
- 关于listen的第二个参数backlog的一些问答见解
- 关于Linux socket编程之listen函数的第二个参数backlog.
- 讨论:GetMessage()的第二个参数使用
- CList第二个参数的意思(原创)
- addEventListener第二个参数的handleEvent
- GTK+中GtkFileChooser的第二个参数
- [php] json_encode 的第二个参数详解
- Javascript MVC —— View
- android基础->拖动效果(Gallery)
- java pipe and filter
- 使用JLINK GDBSERVER调试U-BOOT的方法
- jquery的extend和fn.extend
- 关于 jquery 的第二个参数 undefined
- Hibernate Criteria 多层次查询关联问题
- UML用例图之泛化(generalization)、扩展(extend)和包含(include)关系--UML一波流系列讲解
- ubuntu下安装jdk(介绍两种方法)
- vivi中基于NOR FLASH的相关代码
- Practice_3: heap class
- Practice_4: BST class
- 脚本军火库:回到 Gradle 项目的顶层
- 个人源码管理:如何在本机配置自己的SVN Repository (图解)