码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2015-06-05 00:46:05      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:javascript   严格模式   属性重复   报错   

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

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

标签:javascript   严格模式   属性重复   报错   

原文地址:http://blog.csdn.net/xingqiliudehuanghun/article/details/46369289

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!