ES5 以及 DOM 规范–06 编程风格(个人)
编程风格(根据个人喜好总结)
-
缩进:使用tab缩进。
-
区块:使用大括号划分可能引起歧义的区块。同时为了防止自动添加句末分号引起的问题,推荐区块起首的大括号位置跟在关键字的后面。
block { // ... }
-
圆括号:在 JavaScript 中有两种作用,一种表示函数的调用,另一种表示表达式的组合(grouping)。
为了方便区分,最好遵循如下约束
- 表示函数调用时,函数名与左括号之间没有空格。
- 表示函数定义时,函数名与左括号之间没有空格。
- 其他情况时,前面位置的语法元素与左括号之间,都有一个空格。
foo(bar) // 函数定义 return (a+b); // 返回值 if (a === 0) {...} // 判断条件 function foo(b) {...} // 函数调用
-
行尾的分号:一般不要省略,除非语法规定本来就不需要在结尾添加分号。例如判断、循环、函数定义等。
-
全局变量:使用全大写加下划线定义方式
UPPER_CASE
-
with语句:尽量不使用,由于大量使用with语句会导致性能的下降,同时也会给代码的调试造成困难,因此在开发大型应用程序的时候,不建议使用with语句。
语法:with (expression) statement
示例:
定义with语句的目的主要是为了简化多次编写同一个对象的工作,如下面的例子
var qs = location.search.substring(1); var hostName=location.hostname; var url =location.href;
以上编辑行代码都包含location对象,如果使用with语句,可以把上边的代码改写成如下所示:
with(location){ var qs = search.subtring(1); var hostName = hostname; var url = href; }
在这个重写的例子中。使用with语句关联了location对象。这意味着在with语句的代码块的内部,每个变量首先被认为是一个局部的变量,而如果在局部环境中找不到该变量的定义,就会查询location对象中是否有同名的属性。如果发现了同名的属性,则以location对象属性的值作为变量的值。
-
使用严格相等
===
:防止自动转换类型导致的异常。 -
减少影响代码理解的语句合并:建议不要将不同目的的语句,合并成一行。
例如下面的例子,虽然效果相同,但是后者容易引起歧义。
// 推荐写法 a = b; if (a) { // ... } // 语句合并 if (a = b) { // ... } // 容易误理解为 if (a === b){ // ... }
-
为了代码易于理解,建议自增(
++
)和自减(--
)运算符尽量使用+=
和-=
代替。放在变量的前面或后面,返回的值不一样,为了便于理解所以推荐直接加一。
++x // 等同于 x += 1;
-
switch...case
结构建议用对象结构代替,减少因为忘记break、没有大括号导致的流程混乱。示例,将
switch...case
改写成 对象结构// switch...case 结构 function doAction(action) { switch (action) { case 'hack': return 'hack'; case 'slash': return 'slash'; case 'run': return 'run'; default: throw new Error('Invalid action.'); } } // 对象结构 function doAction(action) { var actions = { 'hack': function () { return 'hack'; }, 'slash': function () { return 'slash'; }, 'run': function () { return 'run'; } }; if (typeof actions[action] !== 'function') { throw new Error('Invalid action.'); } return actions[action](); }