ExtJS学习笔记一——浏览器兼容性代码
最近想提高一下javascript的语法基础,所以开始学习Ext.js源码,学习过程中才发现还是有好多东西以前没有掌握的。
首先,这一篇先总结一下js中对于针对各浏览器的兼容代码。
一、window.undefined
在IE5以前的老版本浏览器中,除了赋值和typeof使用undefined,其他方式都会异常报错,所以为了让我们可以使用如:
if(value == undefined)来代替if(typeof value == 'undefined')
我们不得不针对老版本的增加兼容器,通过window.undefined来使得在老版本的浏览器中undefined被定义。
二、isBorderBox
在IE这样的非标准浏览器中,存在 quirks mode和 standars mode,而主流的标准浏览器都是standars mode,比如ff,chrome,它们的区别是:
在Standars mode中:
元素真正的宽度 = margin-left + border-left-width + padding-left + width + padding-right + border-right-width + margin-right
在Quirks mode中:
width则是元素的实际宽度,内容宽度 = width - (margin-left + margin-right + padding-left + padding-right + border-left-width + border-right-width)
这样我想大家应该明白为什么要针对不同浏览器的盒子模型来计算宽高度了吧。
三、toString方法
在IE中for in不能遍历Object的toSting等方法,因此在Ext提供的override中,专门针对IE浏览器单独处理了toString方法的重写。
IE9已经可以用for in遍历Object中的toString方法。