前端基础:JavaScript 代码风格指南

一.基本格式前端

缩进web

建议每级4个空格,能够给编辑器设置tab = 4个空格,自动转换数组

分号浏览器

不要省略分号,防止ASI(自动插入分号)错误编辑器

行宽函数

每行代码不超过80个字符,过长应该用操做符手动断行学习

断行优化

操做符在上一行末尾,且下一行缩进2级,若是是赋值语句,还应该和等号后面部分对齐code

空行对象

函数声明与函数声明、变量声明与函数声明、函数内部的逻辑块之间都应该有空行隔开

做者尼古拉斯还建议在流程控制块顶部留一个空行,但给的例子不是很明确

命名

  • 变量名/函数名:Camel(驼峰)规则,首词首字母小写,后续词首字母大写,其他部分小写
  • 常量名:C语言式,全大写,下划线分词
  • 构造函数:Pascal规则,全部词首字母大写,其他部分小写

字面量

  • 字符串:双引号包裹,断行用[+]操做符,不要用\转义字符
  • 数值:不要省略小数点先后的部分,不要用八进制形式
  • Null:只把null看成Object的占位符,不要用来检测形参,也不要用来检测未初始化的变量
  • Undefined:应该把全部对象都初始化为null,以区分未定义和未初始化
  • 对象字面量/数组字面量:不要用构造函数方式声明对象和数组

二.注释

P.S.书中有一句很是经典的解释:

Appropriately written comments help tell the story of code, allowing other developers to drop into a part of the story without needing to hear the beginning.

单行注释

  • 行尾:用1级缩进隔开代码,并且//后面要有一个空格
  • 独占一行:用来注释下面,要与被注释的代码保持相同的缩进
  • 行首:用来注释多行代码

多行注释

用来包裹大段注释,推荐Eclipse风格,例如

/*
 * comment line1
 * comment line2
 */

注意:

  • 多行注释上方留一个空行
  • *星号后面留一个空格
  • 多行注释至少三行(由于第一行和最后一行后面不加注释)

在哪里添注释

  • 不能自解释的代码
  • 故意的,但看起来像是有错的地方
  • 针对浏览器的hack

文档注释

应该给各个函数添注释,包括功能描述、参数、返回值、抛出的错误等等,例如推荐的Eclipse风格:

/**
 * 添加指定元素到默认数组
 *
 * @method add
 * @param {Number} 将要添加的元素
 * @return {Boolean} 添加成功/失败
 * @throw {TypeError} 参数类型不匹配
 */function add(item){
    if(typeof item === "number"){
        arr.push(item)
    }
    else{
        throw new TypeError();
    }
}

三.语句和表达式

花括号对齐方式

建议行尾风格,不推荐次行风格

块语句空格

if后的圆括号部分先后各有一个空格,例如:

if (expr) {
    code
}

switch语句

  • 缩进:case与switch对齐,break缩进1级
  • case贯穿:用空行或注释//falls through代表case贯穿是故意的
  • default:保留default或者用注释//no default代表没有default

P.S.《JavaScript语言精粹》的做者道格拉斯认为不该该用case贯穿(称之为鸡肋),由于极易引起bug,而尼古拉斯认为用空行或者注释说明就行了

with语句

不用

for循环

全部变量都应该在函数体顶部声明,包括for循环初始化部分用到的变量,避免hosting(提高)引起bug(可能会屏蔽全局变量)

for-in循环

不要用来遍历数组,用的时候记得加上hasOwnProperty过滤,若是故意遍历原型属性,应该用注释说明

四.变量、函数、操做符

变量声明

函数体 = 变量声明 + 函数声明 + 逻辑语句。用空行隔开各个部分

函数声明

先声明再使用,千万不要把函数声明放在if分支里,由于浏览器理解不一样,并且ES没给标准

函数调用

圆括号先后都不加空格,避免和块语句混淆

匿名函数当即执行

把当即执行的匿名函数用圆括号包裹,避免与匿名函数声明混淆

严格模式

不要在全局做用域开严格模式,只在函数内部开,给多个函数开能够用匿名函数当即执行限定严格模式的做用域

判断等于

只用===和!==

eval

不用eval()和new Function(),用匿名函数优化setTimeout()和setInterval()

基本包装类型

不要用new Boolean(), new String(), new Number()

参考资料

  • 《Maintainable JavaScript》
  • 《JavaScript语言精粹》

 知海匠库web前端课程:http://www.zhihaijiangku.com 系统学习,快速就业。

相关文章
相关标签/搜索