使用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();

javascript优化--03高质量编码的更多相关文章

  1. javascript优化--01高质量编码

    javascript的浮点数: Javascript的数字都是双精度浮点数: 64位编码数字: 能表达53位精度的整数: 进行位运算时会隐式地转化为32位整数(0,1序列)后计算: 浮点数运算可能会有 ...

  2. javascript优化--04高质量编码

    库和API的设计: 在参数设计中保持好的习惯:如顺序,width,height;top,right,bottom,left;如命名: 将undefined看作没有值而不要表示非特定的值: 在允许0,空 ...

  3. javascript优化--02高质量编码

    方法调用: 通常某个对象调用方法查找该方法并将该对象作为该方法的接受者(this): 使用call自定义接受者 可以调用在给定对象中不存在的方法: 定义高阶函数,允许使用者给回调函数指定接受者: 使用 ...

  4. (第一章)改善JavaScript,编写高质量代码。

    根据<编写高质量代码改善JavaScript程序的188个建议>这本书,来记录我目前所了解的建议方式. 建议1:警惕Unicode乱码 根据ECMA标准规定JavaScript语言可以使用 ...

  5. (第二章)改善JavaScript,编写高质量代码。

    建议34:字符串是非值操作 var a = "javascript"; var b = a; b = b.toUpperCase(); alert(a); //javascript ...

  6. 编写高质量JavaScript代码的68个有效方法

    简介: <Effective JavaScript:编写高质量JavaScript代码的68个有效方法>共分为7章,分别涵盖JavaScript的不同主题.第1章主要讲述最基本的主题,如版 ...

  7. 深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点

    深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点 2011-12-28 23:00 by 汤姆大叔, 139489 阅读, 119 评论, 收藏, 编辑 才华横溢的 ...

  8. 高质量JavaScript代码书写基本要点

    翻译-高质量JavaScript代码书写基本要点 by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/ ...

  9. [转] 翻译-高质量JavaScript代码书写基本要点 ---张鑫旭

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=1173 原文作者:St ...

随机推荐

  1. 使用Angular和Nodejs搭建聊天室

    一,利用Node搭建静态服务器 这个是这个项目的底层支撑部分.用来支持静态资源文件像html, css, gif, jpg, png, javascript, json, plain text等等静态 ...

  2. Java并发编程笔记—基础知识—实用案例

    如何正确停止一个线程 1)共享变量的使用 中断线程最好的,最受推荐的方式是,使用共享变量(shared variable)发出信号,告诉线程必须停止正在运行的任务.线程必须周期性的核查这一变量(尤其在 ...

  3. Ubuntu 16.04 下安装Firefox的Flash插件

    在ubuntu系统环境下面打开优酷视频,发现无法播放视频.Adobe Flash Player 是一款轻量级浏览器插件,具有丰富的 Internet 应用运行时间,提供持续的迷人用户体验.绝妙的音频/ ...

  4. 将服务器上的myql数据库导入本地数据库

    文章是从我的个人博客上粘贴过来的, 大家也可以访问 www.iwangzheng.com 首先登录到服务器上,进入文件夹,我们这边的是m-cms $mysqldump -uroot mos > ...

  5. ZeroMQ安装

    一.ZeroMQ介绍 ZeroMQ是一个开源的消息队列系统,按照官方的定义,它是一个消息通信库,帮助开发者设计分布式和并行的应用程序. 首先,我们需要明白,ZeroMQ不是传统的消息队列系统(比如Ac ...

  6. C++ virtual descructor

    [代码1]  C++ Code  12345678910111213141516171819202122232425262728293031323334353637383940414243444546 ...

  7. 【转】maven仓库快速镜像

    本文转自:http://blog.csdn.net/zuoluoboy/article/details/20007819 国内连接maven官方的仓库更新依赖库,网速一般很慢,收集一些国内快速的mav ...

  8. Java for LeetCode 024 Swap Nodes in Pairs

    Given a linked list, swap every two adjacent nodes and return its head. For example, Given 1->2-& ...

  9. extjs插件开发上传下载文件简单案例

    前台,extjs,框架,mybatis,spring,springMVC,简单的文件上传下载案例. 必要的jar包,commons-fileupload-1.3.1.jar,commons-io-2. ...

  10. JavaScript封装成类

    JavaScript在WEB编程中能起到很大的作用,将一些常用的功能写成JavaScript类库. 将下面代码保存为Common.js 类库功能: 1.Trim(str)--去除字符串两边的空格 2. ...