不同JS环境use strict对重复属性处理的差异

来源:互联网 发布:手机软件显示网络异常 编辑:程序博客网 时间:2024/06/10 10:28

昨天改一个Bug不小心属性名重复了,引出了一个很有意思的小Bug。导致Bug产生的是一段JS对象声明的代码,其结构与如下代码等价。

var fn = function() {    'use strict';     var obj =  {         a: 1,         a: 2       // 因为声明的属性比较多,后面添加的属性不小心与已有的属性重复了       };     return obj};fn();

当时自己在PC的chrome中测试了程序,运行没问题,也在安卓机上做了测试,也没问题。但在iphone中却报错了,导致页面无法正常渲染。通过Safari连接手机进行调试很容易的定位到了出错的代码,从而发现这个很有意思的问题:不同的JS运行环境下严格模式对重复属性的处理策略各有不同。下面我们看下各个运行环境对这段代码的执行情况

  • chrome
  • safari
  • Firefox
  • nodejs

从上面的实验结果可以看出,即使在严格模式下,各个运行环境对部分细节的处理也是不尽相同的。safari和nodejs的严格模式下对象字面量禁止重复属性声明,而chrome和Firefox则没有这方面的限制。chrome和nodejs按说用的同一个脚本引擎,理应表现一致才对,出现这个的差异有点让人费劲。所以即使严格模式下运行通过的代码也不是100%保险的,多做测试还是非常必要的

0 0
原创粉丝点击