首页 > Web开发 > 详细

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

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

昨天改一个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对重复属性处理的差异

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!