`
zhouyrt
  • 浏览: 1172641 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

定义对象或数组直接量时不同引擎对多余逗号的处理

阅读更多

这种错误已经我已经多次犯了,一次用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.
 

 

 

 

分享到:
评论

相关推荐

    js定义对象或数组直接量时各浏览器对多余逗号的处理(json)

    总结来说,虽然现代浏览器大多已经能够正确处理对象和数组直接量中的多余逗号,但考虑到不同浏览器的历史兼容性问题,开发者在编写JavaScript代码时应该尽量避免在对象或数组的最后一个元素后面添加逗号,以保证代码...

    JavaScript之数组(Array)详解

    数组字面量表示法通过方括号`[]`直接定义数组,元素之间用逗号分隔。在数组字面量中,如果最后一个元素后面有多余的逗号,会导致不同浏览器的解释差异,尤其是在IE8及更早版本的浏览器中。 数组中的每个项目都通过...

    JSON校验格式化工具

    4. 数组中的元素用逗号分隔,可以包含其他对象或数组。 5. 值可以是字符串、数字、布尔值、null、数组或对象。 6. JSON不允许使用单引号来定义字符串,只能使用双引号。 7. 注释在JSON中是不被允许的,这是与...

    JavaScript期末复习题.doc

    - 多维数组使用`toString()`时,只会处理最外层数组,内部数组会被转换为字符串形式,而不会展开。 7. **数组操作的影响**: - `sort()`方法会改变原数组,按字母顺序排序数组元素。 - `slice()`返回新数组,不...

    json_validate

    JSON规范要求数据以键值对的形式存在,键必须是字符串,用双引号括起来,值可以是各种数据类型,如字符串、数字、布尔值、数组、对象或null,并且键值对之间使用逗号分隔。 在提供的链接中,虽然没有直接的详细内容...

    springmybatis

    MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录. orm工具的基本思想 无论是用过的hibernate,mybatis,你都可以法相他们有一个...

    JavaScript代码因逗号不规范导致IE不兼容的问题

    使用正则表达式,\s*}可以找到数组或对象末尾可能存在的多余逗号。不过,这种方法存在局限性,例如无法检测出被注释掉的代码中的错误逗号。 其次,文章建议可以采用JavaScript压缩工具,比如yuicompressor,来压缩...

    C语言编译出错信息详解

    - **数组的界限符"]"丢失**:定义数组时,缺少了关闭的方括号,这会导致错误。确保数组定义完整。 - **数组大小太大**:如果定义的数组超过了可用内存的限制,编译器会报错。需要减少数组的大小或优化内存使用。 ...

    语法列表:采用字符串元胞数组,并根据标准语法返回带有逗号和“和”的单个字符串-matlab开发

    在MATLAB的最新版本中,`join` 函数特别适用于字符串处理,它可以有效地连接字符串数组或元胞数组,而 `cellfun` 则可以对单元格数组中的每个元素应用函数,使得代码更加灵活和高效。 在实际应用中,这样的功能可能...

    TC2.0

    typedef用于类型别名定义,但不能在声明或定义变量时直接使用,而应使用其别名。 ### in-line assembly not allowed 不允许使用内联汇编。在某些编译模式下,内联汇编代码可能被禁用,以确保代码的跨平台兼容性或...

    asp 数组 重复删除函数(脚本之家增强版)

    在ASP(Active Server Pages)编程中,处理数组时经常会遇到需要去除重复元素的需求。本文将详细介绍一个经过测试且优化过的ASP数组去重函数——`cxarraynull`,该函数能够有效地帮助开发者解决数组中重复元素的问题...

    GCC核心扩展.doc

    宏展开时,arg会被替换为实际的参数列表,而##运算符用于处理没有参数时的特殊情况,避免多余的逗号。 5. **标号元素初始化(Designated Initializers)** 在标准C中,数组和结构的初始化值必须按照它们的顺序给出...

    DataFormater

    例如,一个未格式化的JSON字符串可能紧凑地排列在一起,而通过格式化,可以将其转换为易读的多行形式,每个键值对之间用逗号分隔,对象用花括号包围,数组用方括号包围。 其次,XML作为结构化数据的标记语言,被...

    C语言编译中的常见错误

    * 定义数组时指定的数组长度不是常量表达式 * 结构体或联合类型的定义后缺少分号 * 缺少说明,通常是因为缺少分界符如逗号、分号、右圆括号等所引起的 * Default 部分放到了 switch 结构之外,一般是因为花括号不...

    C语言错误形式讲解(适用于英文基础较弱者)

    枚举定义中的语法错误,例如缺少逗号或括号不匹配等。检查枚举定义的语法,确保格式正确。 #### 31. Enumeration constant syntax error (枚举常量语法错误) 枚举成员定义中的语法错误,如缺少等号或使用了非法...

    C语言出错提示英汉对照

    当定义了两个或多个具有相同名称但不同作用域的对象时,会出现此错误。例如,局部变量与全局变量同名,导致编译器无法确定使用哪一个。解决方法是重命名其中一个变量,或者调整作用域。 #### Argument list syntax ...

    C++常见错误.pdf

    在定义数组时,如果没有指定数组的大小,编译器会报此错误。确保在定义数组时提供一个整数作为大小。 #### 五、数组尺寸太大 (Array size too large) 当数组的大小超过了编译器或系统允许的最大值时会出现此错误。...

    你必须知道的495个C语言问题

    1.24 我在一个文件中定义了一个extern数组,然后在另一个文件中使用,为什么sizeof取不到数组的大小? 声明问题 1.25 函数只定义了一次,调用了一次,但编译器提示非法重声明了。 *1.26 main的正确定义是什么...

    c++出错提示英汉对照表

    65. **Size of array 'xxx' depends on unprocessed entity 'yyy'** - 数组'xxx'的大小依赖于未处理的实体'yyy':数组的大小依赖于尚未完全定义的实体。确保所有依赖项在数组声明之前都已经完全定义。 66. **Size ...

Global site tag (gtag.js) - Google Analytics