学习 Javascript 的同学们都知道,在数组字面量中每一个元素后都会根由一个小小的“,”逗号。但是就是这一个小小的逗号,让很多人在各种浏览器兼容的问题上头疼不已。
其实,这里的主要原因,就是数值或者属性/值对最后一个元素后面的逗号问题。而这个逗号主要表现的问题,就是 IE8 及以下浏览器和标准浏览器之间的解析差别。那么我们来看举一个栗子。

例如

1
var a = [1,2,3,], b = [,,];

像这样的数组生命形式,在标准浏览器中,例如 Chrome 或者火狐,就会将最后一个逗号省略掉,那么当使用

1
alert(a.length); 或者 alert(b.length);

的时候,就会得到 3 和 2 的结果。因为标准浏览器会忽略最后一个逗号,那么就变为:

1
a = [1,2,3], b = ["",""];

而在 IE8 及以下浏览器中,其却不忽略最后一个逗号,所以其就会变为:

1
a = [1,2,3,""], b = ["","",""];

也就是如果用数组的 length 属性 alert 的话,就会得到 4 和 3。

那么对于对象也是一样的。例如:

1
2
3
4
5
c = {
    x:5,
    y:6,
    z:9,
}

如果在标准浏览器中,最后一个逗号,也就是数字 9 后面的逗号会被忽略,javascript 代码就会正常运行。

而在 IE8 及以下浏览器中,则由于最后一个逗号的存在,浏览器就会报错,此时 javascript 代码则会停止运行。

所以,在写代码的时候,一定要确保数组或者属性/值对最后一个元素后面没有这个逗号。

当然了,对于有没有逗号,标准是规定的是“应该省略最后一个逗号”,所以这里确切的说是非标准浏览器的问题,而不是 Chrome 或者 火狐,这些标准浏览器的问题了。

2 评论

  • :arrow:
  • :grin:
  • :???:
  • :cool:
  • :cry:
  • :shock:
  • :evil:
  • :!:
  • :idea:
  • :lol:
  • :mad:
  • :mrgreen:
  • :neutral:
  • :?:
  • :razz:
  • :oops:
  • :roll:
  • :sad:
  • :smile:
  • :eek:
  • :twisted:
  • :wink: