学习 Javascript 的同学们都知道,在数组字面量中每一个元素后都会根由一个小小的“,”逗号。但是就是这一个小小的逗号,让很多人在各种浏览器兼容的问题上头疼不已。
其实,这里的主要原因,就是数值或者属性/值对最后一个元素后面的逗号问题。而这个逗号主要表现的问题,就是 IE8 及以下浏览器和标准浏览器之间的解析差别。那么我们来看举一个栗子。
例如
var a = [1,2,3,], b = [,,];
像这样的数组生命形式,在标准浏览器中,例如 Chrome 或者火狐,就会将最后一个逗号省略掉,那么当使用
alert(a.length); 或者 alert(b.length);
的时候,就会得到 3 和 2 的结果。因为标准浏览器会忽略最后一个逗号,那么就变为:
a = [1,2,3], b = ["",""];
而在 IE8 及以下浏览器中,其却不忽略最后一个逗号,所以其就会变为:
a = [1,2,3,""], b = ["","",""];
也就是如果用数组的 length 属性 alert 的话,就会得到 4 和 3。
那么对于对象也是一样的。例如:
c = {
x:5,
y:6,
z:9,
}
如果在标准浏览器中,最后一个逗号,也就是数字 9 后面的逗号会被忽略,javascript 代码就会正常运行。
而在 IE8 及以下浏览器中,则由于最后一个逗号的存在,浏览器就会报错,此时 javascript 代码则会停止运行。
所以,在写代码的时候,一定要确保数组或者属性/值对最后一个元素后面没有这个逗号。
当然了,对于有没有逗号,标准是规定的是“应该省略最后一个逗号”,所以这里确切的说是非标准浏览器的问题,而不是 Chrome 或者 火狐,这些标准浏览器的问题了。