javascript 代码规范

代码规范我们应该遵循古老的原则:“能做并不意味着应该做”。

全局命名空间污染

总是将代码包裹在一个立即的函数表达式里面,形成一个独立的模块。

不推荐

var x = ,

   y = ;

console.log(window.x + ' ' + window.y);

推荐

;(function(window){

   'use strict';

   var x = ,

       y = ;

   console.log(window.x + ' ' + window.y);

}(window));

立即执行函数

在立即执行函数里面,如果有用到全局变量应该通过变量传递的方式,让立即执行函数的函数体在调用时,能以局部变量的形式调用,在一定程度上提升程序性能。 
并且应该在立即执行函数的形参里加上undefined,在最后一个位置,这是因为ES3里undefined是可以读写的,如果在全局位置更改undefined的值,你的代码可能得不到逾期的结果。 
另外推荐在立即执行函数开始跟结尾都添加上分号,避免在合并时因为别人的代码不规范而影响到我们自己的代码

不推荐

(function(){

   'use strict';

   var x = ,

       y = ,

       c,

       elem=$('body');

   console.log(window.x + ' ' + window.y);

   $(document).on('click',function(){

   });

   if(typeof c==='undefined'){

       //你的代码

   }

}());

推荐

;(function($,window,document,undefined){

   'use strict';

   var x = ,

       y = ,

       c,

       elem=$('body');

   console.log(window.x + ' ' + window.y);

   $(document).on('click',function(){

   });

   if(typeof c==='undefined'){

       //你的代码

   }

}(jQuery,window,document));

严格模式

ECMAScript 5 严格模式可在整个脚本或独个方法内被激活。它对应不同的 javascript 语境会做更加严格的错误检查。严格模式也确保了 javascript 代码更加的健壮,运行的也更加快速。

严格模式会阻止使用在未来很可能被引入的预留关键字。

你应该在你的脚本中启用严格模式,最好是在独立的 立即执行函数 中应用它。避免在你的脚本第一行使用它而导致你的所有脚本都启动了严格模式,这有可能会引发一些第三方类库的问题。 
不推荐

'use strict';

(function(){

}());

推荐

(function(){

   'use strict';

}());

变量声明

对所有的变量声明,我们都应该指定var,如果没有指定var,在严格模式下会报错,并且同一个作用域内的变量应该尽量采用一个var去声明,多个变量用“,”隔开。 
不推荐

function myFun(){

   x=;

   y=;

}

不完全推荐

function myFun(){

   var x=;

   var y=;

}

推荐

function myFun(){

   var x=,

       y=;

}

使用带类型判断的比较判断

总是使用 === 精确的比较操作符,避免在判断的过程中,由 JavaScript 的强制类型转换所造成的困扰。

如果你使用 === 操作符,那比较的双方必须是同一类型为前提的条件下才会有效。 
不推荐

(function(w){

 'use strict';

 w.console.log('' == ); // true

 w.console.log('' == false); // true

 w.console.log('' == true); // true

 w.console.log(null == undefined); // true

 var x = {

   valueOf: function() {

     return 'X';

   }

 };

 w.console.log(x == 'X');//true

}(window.console.log));

推荐

(function(w){

 'use strict';

 w.console.log('' === ); // false

 w.console.log('' === false); // false

 w.console.log('' === true); // false

 w.console.log(null === undefined); // false

 var x = {

   valueOf: function() {

     return 'X';

   }

 };

 w.console.log(x === 'X');//false

}(window));

变量赋值时的逻辑操作

逻辑操作符 || 和 && 也可被用来返回布尔值。如果操作对象为非布尔对象,那每个表达式将会被自左向右地做真假判断。基于此操作,最终总有一个表达式被返回回来。这在变量赋值时,是可以用来简化你的代码的。 
不推荐

if (!x) {

    if (!y) {

        x = ;

    } else {

        x = y;

    }

}

推荐

x = x || y || ;

分号

总是使用分号,因为隐式的代码嵌套会引发难以察觉的问题。当然我们更要从根本上来杜绝这些问题[1] 。以下几个示例展示了缺少分号的危害:

// 1.

MyClass.prototype.myMethod = function() {

 return ;

}  //这里没有分号

(function() {

})();

//2.

var x = {

 'i': ,

 'j': 

}  // 这里没有分号

//我知道这样的代码你可能永远不会写,但是还是举一个例子

[ffVersion, ieVersion][isIE]();

// 3.

var THINGS_TO_EAT = [apples, oysters, sprayOnCheese]  // 这里没有分号

- == resultOfOperation() || die();

错误结果

1.JavaScript 错误 —— 首先返回 42 的那个 function 被第二个function 当中参数传入调用,接着数字 42 也被“调用”而导致出错。 
2.八成你会得到 ‘no such property in undefined’ 的错误提示,因为在真实环境中的调用是这个样子:xffVersion, ieVersion(). 
3.die 总是被调用。因为数组减 1 的结果是 NaN,它不等于任何东西(无论 resultOfOperation 是否返回 NaN)。所以最终的结果是 die() 执行完所获得值将赋给 THINGS_TO_EAT.

语句块内的函数声明

切勿在语句块内声明函数,在 ECMAScript 5 的严格模式下,这是不合法的。函数声明应该在作用域的顶层。但在语句块内可将函数申明转化为函数表达式赋值给变量。 
不推荐

if (x) {

 function foo() {}

}

推荐

if (x) {

 var foo = function() {};

}

不要使用eval函数

eval() 不但混淆语境还很危险,总会有比这更好、更清晰、更安全的另一种方案来写你的代码,因此尽量不要使用 eval 函数。

数组和对象字面量

1.用数组和对象字面量来代替数组和对象构造器。数组构造器很容易让人在它的参数上犯错。 
不推荐

//数组长度3

var a1 = new Array(x1, x2, x3);

//数组长度2

var a2 = new Array(x1, x2);

//如果x1是一个自然数,那么它的长度将为x1

//如果x1不是一个自然数,那么它的长度将为1

var a3 = new Array(x1);

var a4 = new Array();

正因如此,如果将代码传参从两个变为一个,那数组很有可能发生意料不到的长度变化。为避免此类怪异状况,请总是采用可读的数组字面量。

推荐

var a = [x1, x2, x3];

var a2 = [x1, x2];

var a3 = [x1];

var a4 = [];

2.对象构造器不会有类似的问题,但是为了可读性和统一性,我们应该使用对象字面量。

不推荐

var o = new Object();

var o2 = new Object();

o2.a = ;

o2.b = ;

o2.c = ;

o2['strange key'] = ;

推荐

var o = {};

var o2 = {

 a: ,

 b: ,

 c: ,

 'strange key': 

};

三元条件判断(if 的快捷方法)

用三元操作符分配或返回语句。在比较简单的情况下使用,避免在复杂的情况下使用。没人愿意用 10 行三元操作符把自己的脑子绕晕。 
不推荐

if(x === ) {

 return 'valid';

} else {

 return 'invalid';

}

推荐

return x ===  ? 'valid' : 'invalid';

for循环

使用for循环过程中,数组的长度,使用一个变量来接收,这样有利于代码执行效率得到提高,而不是每走一次循环,都得重新计算数组长度 
不推荐

for(var i=;i<arr.length,i++){

}

推荐

for(var i=,len=arr.length;i<len,i++){

}

重复的dom操作

重复的dom操作,使用一个变量来进行接收很有必要,而不是频繁的去操作dom树,这对性能与代码的整洁及易维护性带来不好的影响 
不推荐

$('.myDiv').find('.span1').text('');

$('.myDiv').find('.span2').text('');

$('.myDiv').find('.span3').text('');

$('.myDiv').find('.span4').text('');

推荐

var mydiv=$('.myDiv');

mydiv.find('.span1').text('');

mydiv.find('.span2').text('');

mydiv.find('.span3').text('');

mydiv.find('.span4').text('');

在jquery .end()可使用的情况下应该优先使用.end()

推荐

        $('.myDiv').find('.span1').text('')

            .end().find('.span2').text('')

            .end().find('.span3').text('')

            .end().find('.span4').text('');

注释规范

在描写注释时,推荐格式化且统一的注释风格,在写注释时尽量描述写代码时的思路,而不是代码做了什么。 
不推荐

//获取订单

function getOrderByID(id){

   var order;

   //...

   return order;

}

方法的注释应该统一用块级注释

推荐

/**

* 根据订单id获取订单详细数据

* @param  {[number]} id [订单ID]

* @return {[order]}    [订单详细信息]

*/

function getOrderByID(id){

   var order;

   //...

   return order;

}

原文:http://mp.weixin.qq.com/s/zslMnG8e9Bh68ELG2SC3Ug

JavaScript常用代码书写规范的更多相关文章

  1. 【转】JavaScript常用代码书写规范

    javascript 代码规范 代码规范我们应该遵循古老的原则:“能做并不意味着应该做”. 全局命名空间污染 总是将代码包裹在一个立即的函数表达式里面,形成一个独立的模块. 不推荐 1 2 3 var ...

  2. WEB标准:标准定义、好处、名词解释、常用术语、命名习惯、浏览器兼容、代码书写规范

    1. WEB标准是什么? “WEB标准”是一系列标准的总称.一般的误区经常把WEB标准说成DIV+CSS.准确的说法应该是:采用W3C推荐的WEB标准中的XHTML1.1结合CSS2.0 样式表制作页 ...

  3. javascript常用代码大全

    http://caibaojian.com/288.html    原文链接 jquery选中radio //如果之前有选中的,则把选中radio取消掉 $("#tj_cat .pro_ca ...

  4. (转)Java代码书写规范

    0. 安装阿里代码规范的eclipse插件 https://www.cnblogs.com/caer/p/7753522.html 1.基本原则 强制性原则:     1.字符串的拼加操作,必须使用S ...

  5. C#中的代码书写规范以及命名规范

    C#代码书写规则: 1. 尽量使用接口,然后使用类实现接口,以提高程序的灵活性. 2.一行不要超过80个字符 3.尽量不要手动更改计算机生成的代码 4.关键的语句写注释 5.建议局部变量在最接近使用它 ...

  6. Unity项目代码书写规范

    以Google的代码规范为主,稍加改动 https://google.github.io/styleguide/csharp-style.html 书写规范 基础写法 Pascal和驼峰混用,参数用驼 ...

  7. C++代码书写规范——给新手程序员的一些建议

    代码就是程序员的面子,无论是在工作中在电脑上写程序代码还是在面试时在纸上写演示代码我们都希望写出整洁,优雅的代码.特别在工作中当我们碰到需要维护别人的代码,或者是多人参与一个项目大家一起写代码的时候, ...

  8. JavaScript常用代码段

    总结一下在各种地方看到的还有自己使用的一些实用代码 1)区分IE和非IE浏览器 if(!+[1,]){ alert("这是IE浏览器"); } else{ alert(" ...

  9. Python代码书写规范

    Python 编码规范 一 代码编排1 缩进.4个空格的缩进(编辑器都可以完成此功能),不要使用Tap,更不能混合使用Tap和空格.2 每行最大长度79,换行可以使用反斜杠,最好使用圆括号.换行点要在 ...

随机推荐

  1. Spark学习之在集群上运行Spark

    一.简介 Spark 的一大好处就是可以通过增加机器数量并使用集群模式运行,来扩展程序的计算能力.好在编写用于在集群上并行执行的 Spark 应用所使用的 API 跟本地单机模式下的完全一样.也就是说 ...

  2. 从壹开始前后端分离【 .NETCore2.1 +Vue 2 +AOP+DI】框架之一 || 前言

    缘起 作为一个.Net攻城狮已经4年有余了,一直不温不火,正好近来项目不是很忙,闲得无聊,搞一搞新技术,一方面是打发无聊的时间,一方面也是督促自己该学习辣!身边的大神都转行的转行,加薪的加薪,本人比较 ...

  3. 从壹开始 [ Nuxt.js ] 之二 || 项目搭建 与 接口API

    前言 哈喽大家周一好,今天的内容比较多,主要就是包括:把前端页面的展示页给搭出来,然后调通接口API,可以添加数据,这两天我也一直在开发,本来想一篇一篇的写,发现可能会比较简单,就索性把项目搭建的过程 ...

  4. React 虚拟 DOM 的差异检测机制

    React 使用虚拟 DOM 将计算好之后的更新发送到真实的 DOM 树上,减少了频繁操作真实 DOM 的时间消耗,但将成本转移到了 JavaScript 中,因为要计算新旧 DOM 树的差异嘛.所以 ...

  5. .NET Core Dapper操作mysql数据库

    前言 现在ORM盛行,市面上已经出现了N款不同的ORM套餐了.今天,我们不谈EF,也不聊神马黑马,就说说 Dapper.如何在.NET Core中使用Dapper操作Mysql数据库呢,让我们跟随镜头 ...

  6. MD5加密Util

    目录 (1)需要导入的包 (2)MD5Util类 (3)使用举例 (1)需要导入的包 <dependency> <groupId>org.apache.commons</ ...

  7. sql语句 汉字转拼音首字母

    (1)------------------------------------------------------------------------------------------------- ...

  8. c/c++ 网络编程 陈硕老师视频理解之ttcp

    ttcp 是干啥的:测试2台机器间的网络传输性能 wiki 功能如下图: 对应的视频是: 4.回顾基础的Sockets API.mkv 5.TTCP代码概览.mkv 6.使用TTCP进行网络传输性能测 ...

  9. SQLServer之删除用户自定义数据库用户

    删除用户自定义数据库用户注意事项 不能从数据库中删除拥有安全对象的用户. 必须先删除或转移安全对象的所有权,才能删除拥有这些安全对象的数据库用户. 不能删除 guest 用户,但可在除 master ...

  10. Ginger的第一篇博客

    怀着无感的心情,没有技术的身体,写下第一篇博客作为标记. 目前应该会搞清楚数据结构上相关的操作.算法,然后用c语言实现后记录在博客. 我是有目标的咸鱼! 2019/4/19