Node编码规范

来源:互联网 发布:淘宝评论在哪里看 编辑:程序博客网 时间:2024/06/16 15:20
1.缩进采用2个空格缩进,而不是tab缩进。空格在编辑器中与字符是等宽的,而tab可能因编辑器的设置不同。2个空格会让代码看起来更紧凑、明快。2.变量声明永远用var声明变量,不加var时会将其变成全局变量,这样可能会意外污染上下文,或是被意外污染。3.空格在操作符前后需要加空格,比如+、-、*、%、=等操作符前后都应该存在一个空格,此外,在小括号前后应该存在空格。4.单双引号的使用由于双引号在别的场景下使用较多,在Node中使用字符串时尽量使用单引号,这样无需转义,如:var html = '<a href="http://codejs.org">CNode</a>';而在JSON中,严格的规范是要求字符串用双引号,内容中出现双引号时,需要转义。5.大括号的位置一般情况下,大括号无需另起一行,如:if (true){//some code}6.逗号逗号用于变量声明的分隔或是元素的分隔。如果逗号不在行结尾,前面需要一个空格。此外,逗号不允许出现在行首。7.分号给表达式结尾添加分号。尽管JavaScript编译器会自动给行尾添加分号,但还是会带来一些误解。8.变量名变量名都采用小驼峰式命名,即除了第一个单词的首字母不大写外,每个单词的首字母都大写,词与词之间没有任何符号,如:var adminUser = {};9.方法命名方法命名与变量命名一样,采用小驼峰式命名。与变量不同的是,方法名尽量采用动词或判定词汇。如:var getUser = function(){};var isAdmin = function(){};10.类命名类名采用大驼峰式命名,即所有单词的首字母都大写。如:function User{}11.常量命名作为常量时,单词的所有字母都大写,并用下划线分割,如:var PINK_COLOR = "pink";12.文件命名命名文件时,请尽量采用下划线分割单词,比如child_process.js和string_decode.js。如果你不想将文件暴露给其他用户,可以约定以下划线开头,如_linklist.js。13.包名也许你有贡献模块并将其打包发布到NPM上。在包名中,尽量不要包含js或node的字样,它是重复的。包名应当适当短且有意义的,如:var express = require('express');14.比较操作在比较操作中,如果是无容忍的场景,请尽量使用===代替==,否则你会遇到下面这样不符合逻辑的结果:'0' == 0;//true'' == 0;//true'0' === '';//false此外,当判断容忍假值时,可以无需使用===或==。在下面的代码中,当foo是0、undefined、null、false、''时,都会进入分支:if (!foo) {//some code}15.字面量请尽量使用{}、[]代替new Object()、new Array(),不要使用string、bool、number对象类型,即不要调用new string、new Boolean和new Number。16.作用域在JavaScript中,需要注意一个关键字和一个方法,它们是with和eval(),容易引起作用域混乱。17.数组与对象在JavaScript中,数组其实也是对象,但是两者在使用时有些细节需要注意。    1>.字面量格式    创建对象或者数组时,注意在结尾用逗号分        隔。如果分行,一行只能一个元素,示例代码如下:    var foo = ['hello','world'];    var bar = {      hello:'world',      pretty:'code'      };      2>.for in 循环      使用for in循环时,请对对象使用,不要对数组使用,示例代码如下:      var foo = [];      foo[100] = 100;      for (var i in foo){      console.log(i);      }      for (var i = 0;i < foo.length; i++){      console.log(i);      }      在上述代码中,第一个循环只打印一次,而第二个循环则打印0~100,这并不满足预期值。      3>.不要把数组当做对象使用      尽管在JavaScript内部实现中可以把数组当做对象来使用,如下所示:      var foo = [1,2,3];      foo['hello']='world';      这在for in迭代时,会得到所有值:      for(var i in foo){        console.log(foo[i]);      }      也许你只是想得到hello而已。18.异步在Node中,异步使用非常广泛并且在实践过程中形成了一些约定,这是以往不曾在意的点。   1.异步回调函数的第一个参数应该是错误指示   并不是所有回调函数都需要将第一个参数设计为错误对象。但是一旦涉及异步,将会导致try catch无法捕捉到异步回调期的异常。将第一个参数设计为错误对象,告知调用方是一个不错的约定。示例代码如下:   function (err,data){   };    这个约定被很多流程控制库所采用。遵循这个约定,可以享受社区流程控制库带来的业务编写遍历。    2.执行传入的回调函数    在异步方法中一旦有回调函数传入,就一定要执行它,且不能多次执行。如果不执行,可能造成调用一直等待不结束,多次执行也可能会造成未期望的后果。19.类与模块关于如何在JavaScript中实现继承,有各种各样的方式,但在Node中我们只推荐一种,那就是类继承的方式。另外,在Node中,如果要将一个类作为一个模块,就需要在意它的导出方式。    1.类继承    一般情况下,我们采用Node推荐的类继承方式,示例代码如下:    function Socket(options){    //...    stream.Stream.call(this);    //...    }    util.inherits(Socket,stream.Stream);    2.导出    所有供外部调用的方法或变量均需挂载在exports变量上。当需要将文件当做一个类导出时,需要通过如下的方式挂载:    module.exports = Class;    而不是通过    exports = Class;    私有方法无需因为测试等原因导出给外部,所以无需挂载。

–内容总结来自《深入浅出Nodejs》