概念对象或数组直接量时差距引擎对剩下逗号的拍卖

那种错误已经一而再犯了,三次用Ext做abcc的demo,一回是abcc查询模块。
js报错分为三种:语法错误和运行错误

1、js引擎在代码载入时开展语法分析,如果js写的不专业则语法分析通不过。那时候的谬误称为语法错误
2、语法分析通过了,js引擎会执行代码。执行时期暴发的失实称为运行错误

不相同引擎处理那2种错误的提示不太雷同。如下:

var p = {name:"Jack",age:33,};//注意33后有个逗号
    p.toString = function() {return "姓名:" +this.name + ",年龄:" + this.age};
console.log(p);
alert(p);//姓名:Jack,年龄33

firefox下测试,引擎会忽略33后的逗号,可以经过语法检查,在执行期也不会报错
IE6/7下测试,语法分析期就报错了,当然也不会进去执行期了。
只是在IE8下一度修复此问题,不会报错了。其他浏览器也不会报错。

小结下:此错误很难发现,平时是不小心就加了个逗号,或者定义了一个广大特性的靶子或数组后来又要删减其中的一些而不小心留下了剩余的逗号。

//不规范的写法
var p = {name:"Jack",age:33,};
var ary = ["one","two","three",];
//规范的写法
var p = {name:"Jack",age:33};
var ary = ["one","two","three"];

其它,定义数组直接量时也恐怕遇到那几个题目,如数组最终多了个逗号

var ary = [1,2,];
console.log(ary.length);

IE6/7/8 输出length为3,IE9及其余浏览器为2。ECMAScript 5 11.1.4
其中有段表达了应当忽视最终的逗号。但直到IE9才促成该专业。其余浏览器则没问题。

ECMAScript 5 11.1.4 写道:

Array elements may be elided at the
beginning, middle or end of the element list. Whenever a comma in the
element list is not preceded by an AssignmentExpression (i.e., a comma
at the beginning or after another comma), the missing array element
contributes to the length of the Array and increases the index of
subsequent elements. Elided array elements are not defined. If an
element is elided at the end of an array, that element does not
contribute to the length of the Array.

有人一度拔取了数组的这么些特点创制出了所谓《天底下最短的IE判断

var ie = !-[1,]; 
alert(ie); 

但在IE9下被截止了。不要选取这么些Bug去看清浏览器。