专栏首页九彩拼盘的叨叨叨JS模式 之通用模式(译)

JS模式 之通用模式(译)

原文 http://shichuan.github.io/javascript-patterns/

函数定义

创建匿名函数,并将其赋给一个变量。

不建议使用定义全局函数。这会污染全局变量。

条件

使用ifelse的模式以及反模式

获取全局对象

不直接用widows当做全局对象

直接用windows的风险在于,JS代码不只能在浏览器环境能执行。也有可能是在Nodejs之类的环境。

var模式

用一个var定义多个变量

例如

 var a = 1
, b = 2
, sum = a + b
, myobject = {}
, i
, j;

定义提升

函数内变量不管是在哪定义的,其实js在解析时,都会把变量定义放到函数的开始

为了避免变量重名,建议把在函数的变量的定义在函数的开始。

for循环

for循环优化

可优化的方面包括

  • 遍历数组时,在循环前算出要循环的次数(一般是数组长度)。(译者注:对于有JIT的JS引擎,这个这条可以忽略)
  • i+=1代替i++

for-in循环

for-in循环优化

for-in遍历对象属性时,用hasOwnProperty对非原型属性进行过滤。

拓展内建对象的原型

给内建对象(如Array,Object等)的原型上添加属性或方法时,不要覆盖内建对象的原型上属性或方法(即不能同名)

具体做法,例如

if (typeof Object.prototype.myMethod !== "function") {
Object.prototype.myMethod = function () {
// implementation...
};
}

switch模式

增加switch的可读性和健壮性

建议

  • 每个case对齐
  • 每个case后要加break;。特殊情况除外,但也要加注释说明
  • switch最后以default结尾

类型隐式转化

避免类型的隐式转化

两个变量用==比较时,类型会进行隐式转化。用===进行比较,就可以避免类型的隐式转化。

避免eval()

避免使用eval()

使用eval会增加代码的复杂性。同时也增加代码调试的难度。

parseInt进行数字转化

要用第二个参数指定进制

转化数字还可以用

  • +'08'
  • '08' - 0
  • Number('08')

但如果转化08 aaa,上面的几种方式都返回NaN。只有parseInt返回8。

最小化全局变量

在最外面的定义的方法和变量都是全局的

var myglobal = "hello"; 
console.log(myglobal); // "hello"
console.log(window.myglobal); // "hello"
console.log(window["myglobal"]); // "hello"
console.log(this.myglobal); // "hello"

避免方式是

(function(){
    var myglobal = "hello";
})()

全局的问题

全局的各种问题

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • jQuery 写法示例

    Joel
  • DOM 操作写法示例

    Joel
  • BOM 操作写法示例

    Joel
  • (十一) 初遇python甚是喜爱之Files文件读写操作

    各位读者大大们大家好,今天学习python的Files文件读写操作,并记录学习过程欢迎大家一起交流分享。

    亚乐记
  • 学生请假系统设计

    需求分析:学生日常请假出入校门,学生向教师请假,教师在手机中提交请假信息,提交后可按请假时间出校门。教师可查看所有学生请假历史,统计分析,同时家长会看到自己孩子...

    热心的程序员
  • 科学家发明可弯曲电池,推动可弯曲智能设备研发 | 黑科技

    镁客网
  • SpringAOP

    AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对...

    一觉睡到小时候
  • Spring Boot 整合 docker

    Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括...

    程序员果果
  • Spring Boot的GenericApplicationContext使用教程

    教程展示了如何在Spring应用程序中使用GenericApplicationContext 。在该示例中,我们创建了一个Spring Boot控制台应用程序。...

    lyb-geek
  • WCF发布多个服务

    using System; using System.Collections.Generic; using System.Linq; using System....

    hbbliyong

扫码关注云+社区

领取腾讯云代金券