javascript优化--03高质量编码

使用Object的直接量实例构造轻量级的字典:

  • 使用for/in循环,使用对象字面量来构建,并确保不增加Object.prototype属性来导致for/in循环;(考虑到兼容性,如Array.prototype是允许增加属性的);
  • 如果确实需要在Object.prototype中增加属性那么使用Object.defineProperty
    Object.defineProperty(Object.prototype, 'allkeys', {
        value : function () {
            var reuslt = [];
            for(var key in this) {
               result.push(key);    
            }
            reutrn result;
        },
         writable: true;
         enumberable: false;
         configurable: true;
    })

防止原型污染:

  • 使用null,Object.create:  var a = Object.create(null);

使用hasOwnProperty方法避免原型污染:

  • 考虑到要检测的对象的hasOwnProperty可能被污染:
    var hasOwn = {}.hasOwnProperty;
    hasOwn.call(obj,'proto');
    ------------------------------------------
    function Dict(elems) {
       this.elems = elems || {};
    }
    Dict.prototype.has = function(key) {
      return {}.hasOwnPrototype.call(this.elems, key);
    }
    Dict.prototype.set = function(key, val) {
      this.elems[key] = val;
    }
    Dict.prototype.remove = function (key) {
      delete this.elems[key];
    }

使用数组而不是字典类存储有序集合:

  • 使用for/in循环来枚举对象属性应当与顺序无关;
  • 如果聚集运算字典中的数据,确保聚集操作与顺序无关;

避免在枚举期间修改对象:

  • 如果被枚举的对象在枚举期间添加了新的属性,则不能保证for/in循环的行为是可预见的;
  • 当迭代对象时,使用while或者for替代while;

使用迭代方法:

  • 可以使用迭代方法代替for循环增加可读性;
  • 在需要提前终止循环的情况下,仍然使用传统循环;
  • 早类数组对象上复用通用的数组方法;[].forEach.call();
原文地址:https://www.cnblogs.com/jinkspeng/p/4148330.html