============== jQuery编码规范 ============== .. meta:: :description: jQuery核心模块的编码规范,用在自己的javascript项目里也不错,就是有几点和python的编码规范不一致,比如鼓励用tab缩进,也许是担心js空格太多增大文件大小。 :keywords: jquery javascript coding style guideline 原文: http://docs.jquery.com/JQuery_Core_Style_Guidelines jQuery核心模块的编码规范,用在自己的javascript项目里也不错,就是有几点和python的编码规范不一致,比如鼓励用tab缩进,也许是担心js空格太多增大文件大小。 .. 目录:: 空格 ==== * 使用tab进行缩进 * 代码中多用点空格 .. code-block:: javascript // 错: if(blah==="foo"){ foo("bar","baz",{zoo:1}); } // 对: if ( blah === "foo" ) { foo( "bar", "baz", {zoo: 1} ); } * 左花括号前面一定要有空格 * 行内不要使用tab .. code-block:: javascript var a = true, c = false, // yay b = false; // grrr * 空行不要有空格 * 行尾不要有空格 等价判断 ======== 尽量使用严格的等价判断符 `===` ,尽量不用 `==` 。 代码块 ====== * `if/else/for/while/try` 要使用花括号,且要换行。 * 代码块一定要用花括号括起来: .. code-block:: javascript // 错: if ( true ) blah(); // 对: if ( true ) { blah(); } 不要把语句和判断条件放在同一行: .. code-block:: javascript // 错: if ( true ) return; if ( true ) blah(); // 对: if ( true ) { return; } if ( true ) { blah(); } * `else/else if/catch` 要和花括号在同一行: .. code-block:: javascript if ( blah ) { baz(); } else { baz2(); } 例外: `else if` 的情况, `else` 就不要加花括号了: .. code-block:: javascript } else if ( test ) { blah(); } // 没必要: } else { if ( test ) { blah(); } } * 不要使用三元操作符取代 `if/else` 语句。 * 不要使用 `object && object.method()` 取代 `if/else` 语句,除非在条件判断中。 函数调用 ======== * 参数两边要加一个空格 .. code-block:: javascript foo( true ); foo( "blah" ); 例外:如果已经在函数调用中的话,里面的函数调用可以不加空格: .. code-block:: javascript foo( bar(true) ); 例外:函数,对象,数组字面量,如果是唯一参数的话,可以紧贴括号: .. code-block:: javascript foo(function() { }); foo([ ]); foo({ }); * 空函数调用不需要加空格: .. code-block:: javascript foo(); * 逗号和冒号后面一定要跟空格 数组和对象 ========== * 空对象和数组不需要填入空格: .. code-block:: javascript [] {} * 逗号和冒号后面一定要跟空格 赋值 ==== * 赋值语句一定要跟分号。 * 分号后面一定要换行。 类型检查 ======== * String: `typeof object === "string"` * Number: `typeof object === "number"` * Boolean: `typeof object === "boolean"` * Object: `typeof object === "object"` * Plain Object: `jQuery.isPlainObject(object) `_ * Function: `jQuery.isFunction(object) `_ * Array: `jQuery.isArray(object) `_ * Element: `object.nodeType` * null: `object === null` * null or undefined: `object == null` * undefined: - Global Variables: `typeof variable === "undefined"` - Local Variables: `variable === undefined` - Properties: `object.prop === undefined` 正则表达式 ========== 只准用 `.test()` 和 `.exec()` 。不准用 `"string".match()` 。 字符串 ====== 字符串一定要用双引号,不能用单引号。 节点 ==== * 使用 `.nodeName` 而非 `.tagName` * 使用 `.nodeType` 来判断节点的类型(不要用 `.nodeName` ) * 不要手动往节点上挂自定义的属性,一定要使用 `.data()` 。