美文网首页
JavaScript编码规范

JavaScript编码规范

作者: 吃不胖的茶叶蛋 | 来源:发表于2018-07-06 10:38 被阅读5次

    1 结构

    1.1 缩进

    [强制]使用4个空格作为一个缩进层级

    [强制] switch 下的 case 和 default 必须增加一个缩进层级。
    示例:

    // good
    switch (variable) {
    
        case '1':
            // do...
            break;
    
        case '2':
            // do...
            break;
    
        default:
            // do...
    
    }
    
    // bad
    switch (variable) {
    
    case '1':
        // do...
        break;
    
    case '2':
        // do...
        break;
    
    default:
        // do...
    
    }
    

    1.2 空格

    [强制] 二元运算符两侧必须有一个空格,一元运算符与操作对象之间不允许有空格

    var a = !arr.length;
    a++;
    a = b + c;
    

    [强制] 用作代码块起始的左花括号 { 前必须有一个空格。

    // good
    if (condition) {
    }
    
    while (condition) {
    }
    
    function funcName() {
    }
    
    // bad
    if (condition){
    }
    
    while (condition){
    }
    

    [强制] if / else / for / while / function / switch / do / try / catch / finally 关键字后,必须有一个空格。

    // good
    if (condition) {
    }
    
    while (condition) {
    }
    
    (function () {
    })();
    

    [强制] 在对象创建时,属性中的 : 之后必须有空格,: 之前不允许有空格。

    // good
    var obj = {
        a: 1,
        b: 2,
        c: 3
    };
    
    // bad
    var obj = {
        a : 1,
        b:2,
        c :3
    };
    

    [强制] 函数声明、具名函数表达式、函数调用中,函数名和 ( 之间不允许有空格。

    // good
    function funcName() {
    }
    
    var funcName = function funcName() {
    };
    
    funcName();
    
    // bad
    function funcName () {
    }
    
    var funcName = function funcName () {
    };
    

    [强制] , 和 ; 前不允许有空格。

    // good
    callFunc(a, b);
    
    // bad
    callFunc(a , b) ;
    

    [强制] 单行声明的数组与对象,如果包含元素,{} 和 [] 内紧贴括号部分不允许包含空格。

    // good
    var arr1 = [];
    var arr2 = [1, 2, 3];
    var obj1 = {};
    var obj2 = {name: 'obj'};
    var obj3 = {
        name: 'obj',
        age: 20,
        sex: 1
    };
    
    // bad
    var arr1 = [ ];
    var arr2 = [ 1, 2, 3 ];
    var obj1 = { };
    var obj2 = { name: 'obj' };
    var obj3 = {name: 'obj', age: 20, sex: 1};
    

    1.3 换行

    [强制] 每行不得超过 120 个字符。

    [强制] 运算符处换行时,运算符必须在新行的行首。

    // good
    if (user.isAuthenticated()
        && user.isInRole('admin')
        && user.hasAuthority('add-admin')
        || user.hasAuthority('delete-admin')
    ) {
        // Code
    }
    
    var result = number1 + number2 + number3
        + number4 + number5;
    
    
    // bad
    if (user.isAuthenticated() &&
        user.isInRole('admin') &&
        user.hasAuthority('add-admin') ||
        user.hasAuthority('delete-admin')) {
        // Code
    }
    
    var result = number1 + number2 + number3 +
        number4 + number5;
    

    [建议] 对于 if...else...、try...catch...finally 等语句,推荐使用在 } 号后添加一个换行 的风格,使代码层次结构更清晰,阅读性更好。

    if (condition) {
        // some statements;
    }
    else {
        // some statements;
    }
    
    try {
        // some statements;
    }
    catch (ex) {
        // some statements;
    }
    

    1.4 语句

    [强制] 不得省略语句结束的分号。

    [强制] 在 if / else / for / do / while 语句中,即使只有一行,也不得省略块 {...}。

    // good
    if (condition) {
        callFunc();
    }
    
    // bad
    if (condition) callFunc();
    if (condition)
        callFunc();
    

    2 命名

    [强制] 变量 使用 Camel命名法。

    var loadingModules = {};
    

    [强制] 常量 使用 全部字母大写,单词间下划线分隔 的命名方式。

    var HTML_ENTITY = {};
    

    [强制] 函数以及函数的参数 使用 Camel命名法。

    function stringFormat(theBells) {
    }
    

    [强制] 类 使用 Pascal命名法。

    function TextNode(options) {
    }
    

    [强制] 由多个单词组成的缩写词,在命名中,根据当前命名法和出现的位置,所有字母的大小写与首字母的大小写保持一致。

    function XMLParser() {
    }
    
    function insertHTML(element, html) {
    }
    
    var httpRequest = new HTTPRequest();
    

    [强制] 类名 使用 名词。

    function Engine(options) {
    }
    

    [建议] 函数名 使用 动宾短语。

    function getStyle(element) {
    }
    

    3 注释

    3.1 单行注释:

    [强制] 必须独占一行。// 后跟一个空格,缩进与下一行被注释说明的代码一致。

    3.2 多行注释:

    [建议] 避免使用 /.../ 这样的多行注释。有多行注释内容时,使用多个单行注释。**

    3.3 函数/方法注释

    [强制] 函数/方法注释必须包含函数说明,有参数和返回值时必须使用注释标识。

    [强制] 参数和返回值注释必须包含类型信息和说明。

    /**
     * 函数描述
     *
     * @param {string} p1 参数1的说明
     * @param {string} p2 参数2的说明,比较长
     *     那就换行了.
     * @param {number=} p3 参数3的说明(可选)
     * @return {Object} 返回值描述
     */
    function foo(p1, p2, p3) {
        var p3 = p3 || 10;
        return {
            p1: p1,
            p2: p2,
            p3: p3
        };
    }gg
    

    4 语言特性

    4.1 条件

    [强制] 在 Equality Expression 中使用类型严格的 ===。仅当判断 null 或 undefined 时,允许使用 == null。

    解释:

    使用 === 可以避免等于判断中隐式的类型转换。

    示例:

    // good
    if (age === 30) {
        // ......
    }
    
    // bad
    if (age == 30) {
        // ......
    }
    

    4.2 类型抓换

    [建议] 转换成 string 时,使用 + ''。

    // good
    num + '';
    
    // bad
    new String(num);
    num.toString();
    String(num);
    

    [建议] 转换成 number 时,通常使用 +。

    // good
    +str;
    
    // bad
    Number(str);
    

    [强制] 使用 parseInt 时,必须指定进制。

    // good
    parseInt(str, 10);
    
    // bad
    parseInt(str);
    

    [建议] 转换成 boolean 时,使用 !!。

    var num = 3.14;
    !!num;
    

    4.3 字符串

    [强制] 字符串开头和结束使用单引号 '。

    4.4 数组

    [强制] 使用数组字面量 [] 创建新数组,除非想要创建的是指定长度的数组。

    // good
    var arr = [];
    
    // bad
    var arr = new Array();
    

    相关文章

      网友评论

          本文标题:JavaScript编码规范

          本文链接:https://www.haomeiwen.com/subject/yhsvuftx.html