| 
 浏览器兼容性 
从理论上认识事物的工作原理是有用的,但实际影响是至关重要的。当涉及到variable/property creation/deletion时,浏览器遵循标准吗?在大多数是的。 
我写了一个简单的测试包检测Global code、Function code 和Eval code代码delete 运算符的兼容性。测试包同时检查 -- delete运算符的返回值,以及应被删除的属性是否被删除的。delete 运算符返回true或false并不重要,重要的是有DontDelete特性不被删除,反之亦然。 
现代浏览器一般都相当兼容,除了这个我早期提到的这个eval特性。下面的浏览器完全通过测试包:Opera 7.54+、Firefox 1.0+、Safari 3.1.2+、Chrome 4+。 
Safari 2.x 和3.0.4在删除函数参数时有些问题,这些属性似乎没有创建DontDelete,所以可以删除它们。Safari 2.x 甚至有更多问题,删除非引用(例如delete 1)抛出错误;函数声明创建了可删除属性(但奇怪是变量声明不是),在eval中的变量声明成为不可删除的(但函数声明不是)。 
与Safari相似,Konqueror (3.5,但不是 4.3)当删除非引用(例如delete 1)抛出错误,它错误使函数参数可以删除。 
Gecko DontDelete bug 
Gecko 1.8.x浏览器--Firefox 2.x、 Camino 1.x、Seamonkey 1.x等显示一个有趣的bug:对一个属性明确地赋值可以删除它的DontDelete特性,即使该属性是通过变量或函数声明来创建的。 
function foo(){} 
     delete foo; // false (as expected) 
     typeof foo; // "function" (as expected) 
   
     /* now assign to a property explicitly */
   
     this.foo = 1; // erroneously clears DontDelete attribute 
     delete foo; // true 
     typeof foo; // "undefined" 
   
     /* note that this doesn't happen when assigning property implicitly */
   
     function bar(){} 
     bar = 1; 
     delete bar; // false 
     typeof bar; // "number" (although assignment replaced property) 
出乎意料的是,IE5.5 – 8全部通过测试包,删除非引用(例如delete 1)抛出错误(就像在老版的Safari一样)。但事实上有更严重bug存在IE中,这不会立即显现。这些bug都与全局对象相关。 
出处:Denis'Blog
 
责任编辑:bluehearts 
上一页 理解delete [4] 下一页 理解delete [6] 
◎进入论坛网页制作、WEB标准化版块参加讨论,我还想发表评论。
	       |