视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
详细介绍JavaScript代码风格指南
2020-11-27 20:24:08 责编:小采
文档

单行注释

  • 行尾:用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()

    下载本文
    显示全文
    专题