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

昨天改一个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%保险的,多做测试还是非常必要的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值