语句和表达式
所有的块语句都应当使用花括号。包括:
if
for
while
do…while…
try…catch…finally
//不好的写法
if (condition)
doSomethind();
//不好的写法
if (condition) doSomething();
//好的写法
if (condition) {
doSomethind();
}
//不好的写法
if (condition) { doSomething(); }
花括号的对齐方式
两种风格:第一种将花括号放置在块语句中第一行代码的末尾;第二种将左花括号放置于块语句首行的下一行。
块语句间隔
-
语句名、圆括号、和左花括号之间没有空格间隔
if(condition){
doSomething();
}
-
在左圆括号之前和右圆括号之后各添加一个空格
if (codition) {
doSomething:
}
-
在左圆括号后和右圆括号前各添加一个空格
if ( condition ) {
doSomething();
}
个人比较喜欢第二种,易读但不是太麻烦。
switch语句
缩进
Java风格:
switch (condition) {
case "first":
//code
break;
case "second":
//code
break;
default:
//code
}
每条case语句相对于switch关键字都缩进一个层级
从第二条case语句开始,每条case语句前后都各有一个空行。
Dojo风格:
switch (condition) {
case "first":
//code
break;
case "second":
//code
break;
default:
//code
}
default
很多人认为不论何时都不应当省略default,哪怕default什么都不做。
个人不太喜欢写。
with语句
咱们就尽量不要写with语句了。
for-in循环
最好使用hasOwnProperty()方法来为for-in循环过滤出实例属性。
var prop;
for (prop in object) {
if(object.hasOwnProperty(prop)) {
console.log("...");
}
}
不要把for-in用在数组的遍历上
//不好的写法
var vaules = [1, 2, 3],
i;
for (i in vaules) {
process(item[i]);
}
变量、函数和运算符
变量声明
建议将局部变量的定义作为函数内第一条语句。
function doSomethingWithItems(items) {
var i, len;
var value = 10;
var result = value + 10;
for (i=0, len=items.length; i < len; i++) {
doSomething(items[i]);
}
}
函数声明
推荐先声明JavaScript函数然后使用函数。
function doSomething() {
//code
}
doSomething();
此外,函数声明不应出现在语句块之内。
//不好的写法
if (condition) {
function doSomething() {
//code
}
} else {
function doSomething() {
//code
}
}
函数调用间隔
推荐风格:在函数名和左花括号之间没有空格。
//好的写法
doSomething(item);
//不好的写法:看起来想一个块语句
doSomething (item);
立即调用的函数
匿名函数可以通过在最后加上一对圆括号来立即执行并返回一个值,然后将这个值赋值给变量。
// 不好的写法
var value = function() {
// 函数体
return {
message: "Hi"
}
}();
为了让立即执行的函数能够被一眼看出来,可以将函数用一对圆括号包裹起来。
// 好的写法
var value = (function() {
// 函数体
return {
message: "Hi"
}
}());
严格模式
最好不要再全局作用域中使用"use strict"。
// 不好的写法 - 全局的严格模式
"use strict";
function doSomething() {
// code
}
// 好的写法
function doSomething() {
"use strict";
// code
}
相等
推荐不要使用 == 和 !=,而应当使用 === 和 !==。
eval()
通用原则:严禁使用Function,只在别无他法时使用eval()。setTimeout()和setInterval()也是可以使用的,但不用字符串形式而要用函数。
ECMAScript 5 严格模式对于eval()有着严格的限制,禁止在一个封闭的作用域中使用它创建变量或者函数。
原始包装类型
JavaScript里有三种原始包装类型:String、Boolean和Number。每种类型都代表全局作用域中的一个构造函数,并分别表示各自对用的原始值的对象。
// 不好的做法
var name = new String("Nicholas");
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。