ecmascipt
IE6-8 函数声明和函数表达式
- ie6-8函数名标识符里面可以有
.
, 标准浏览器会报错,如下代码片段一 - ie6-8函数表达式标识符key被外部访问,标准浏览器只能用于内部访问,如下代码片段二
//标准报错
function A(){}
function A.prototype.b(){}
var a=new A();
alert(typeof a.b);
//ie6-8能取到,标准浏览器不行
var a=function b(){};
alert(typeof b);解决方法:不要使用带
.
的函数名标识符,函数表达式标识符不要作为引用的目的出现,出现在标识错误匿名函数等。- ie6-8函数名标识符里面可以有
Firefox对条件语句块内部函数声明处理有差异
//其它浏览器不管 true或者false,都是2,firefox是1 //规范定义是函数声明之后出现在全局环境或者函数体里面,在判断块里面当作是在函数里面,所以后面的会覆盖前面的 function foo(){ if(true){ function bar(){alert(1);} } else{ function bar(){alert(2);} } bar(); foo();
各浏览器中 Date 对象的 getYear 方法的返回值不一致
根据规范,这个方法将返回当前时间的年份值与 1900 的差值,如 1800 年返回 -100,2010 返回 110。但 IE 仅在一个 1900 - 1999 年之间的日期值上调用 getYear 方法时,减去 1900,在其他的日期中返回的是实际的年份,就和 getFullYear 一样。
解决办法
使用Date.prototype.getFullYear() 代替- ie6-8不支持JSON对象及其方法
- Chrome Opera 中 for-in 语句遍历出对象属性的顺序与定义的不同,不要依赖key的排序
- IE6-8不能在 JSON 字符串或对象直接量的最后一个键值对后加 ‘,’
- IE6不能使用下标来访问字符串
- 各浏览器中用 for in 可以遍历对象中被更新的内置方法存在差异
- IE6,IE7,IE8不会忽略数组直接量的末尾空元素
- 元素的内联事件处理函数的特殊作用域在各浏览器中存在差异
- Array.prototype.sort当使用了 comparefn 后返回值不为 -1、0、1时,各引擎实现排序结果不一致
##dom
- IE6 IE7 IE8(Q) 中的 getElementById 方法的参数不区分大小写
- IE 在创建 DOM 树时会忽略某些空白字符