编程风格

1.缩进
行首的空格和 Tab 键,都可以产生代码缩进效果(indent)。

Tab 键可以节省击键次数,但不同的文本编辑器对 Tab 的显示不尽相同,有的显示四个空格,有的显示两个空格,所以有人觉得,空格键可以使得显示效果更统一。

无论你选择哪一种方法,都是可以接受的,要做的就是始终坚持这一种选择。不要一会使用 Tab 键,一会使用空格键。

2.区块
如果循环和判断的代码体只有一行,JavaScript 允许该区块(block)省略大括号。如:

if (a)
  b();
  c();

上面代码的原意可能是下面这样。

if (a) {
  b();
  c();
}

但是,实际效果却是下面这样。

if (a) {
  b();
}
  c();

因此,建议总是使用大括号表示区块。

另外,区块起首的大括号的位置,有许多不同的写法。最流行的有两种,一种是起首的大括号另起一行。

block
{
  // ...
}

另一种是起首的大括号跟在关键字的后面。

block {
  // ...
}

一般来说,这两种写法都可以接受。但是,JavaScript 要使用后一种,因为 JavaScript 会自动添加句末的分号,导致一些难以察觉的错误。

return
{
  key: value
};

// 相当于
return;
{
  key: value
};

上面的代码的原意,是要返回一个对象,但实际上返回的是undefined,因为 JavaScript 自动在return语句后面添加了分号。为了避免这一类错误,需要写成下面这样

return {
  key : value
};

因此,表示区块起首的大括号,不要另起一行。

3.行尾的分号
分号表示一条语句的结束。JavaScript 允许省略行尾的分号。
3.1不使用分号的情况
(1)for 和 while 循环

for ( ; ; ) {
} // 没有分号

while (true) {
} // 没有分号

注意,do…while循环是有分号的。

do {
  a--;
} while(a > 0); // 分号不能省略

(2)分支语句:if,switch,try

if (true) {
} // 没有分号

switch () {
} // 没有分号

try {
} catch {
} // 没有分号

(3)函数的声明语句

function f() {
} // 没有分号

注意,函数表达式仍然要使用分号

var f = function f() {
};

以上三种情况,如果使用了分号,并不会出错。因为,解释引擎会把这个分号解释为空语句。

3.2分号的自动添加
除了上一节的三种情况,所有语句都应该使用分号。但是,如果没有使用分号,大多数情况下,JavaScript 会自动添加。这种语法特性被称为“分号的自动添加”(Automatic Semicolon Insertion,简称 ASI)。具体情况不做过多结束,但由于解释引擎自动添加分号的行为难以预测,因此编写代码的时候建议不要省略行尾的分号。避免与其他脚本合并时,排在前面的脚本最后一行语句没有分号,导致运行出错的问题。

4.相等和严格相等
JavaScript 有两个表示相等的运算符:“相等” == 和“严格相等”===。

相等运算符会自动转换变量类型,造成很多意想不到的情况。

0 == ''// true
1 == true // true
2 == true // false
0 == '0' // true
false == 'false' // false
false == '0' // true
' \t\r\n ' == 0 // true

因此,建议不要使用相等运算符==,只使用严格相等运算符===。

5.自增和自减运算符
自增(++)和自减(–)运算符,放在变量的前面或后面,返回的值不一样,很容易发生错误。事实上,所有的++运算符都可以用 +=1 代替。

++x
// 等同于
x += 1;

改用+= 1,代码变得更清晰了。

建议自增(++)和自减(–)运算符尽量使用 += 和 -= 代替。

6.全局变量
JavaScript 最大的语法缺点,可能就是全局变量对于任何一个代码块,都是可读可写。这对代码的模块化和重复使用,非常不利。

因此,建议避免使用全局变量。如果不得不使用,可以考虑用大写字母表示变量名,这样更容易看出这是全局变量,比如UPPER_CASE。

7.变量声明
JavaScript 会自动将变量声明“提升”(hoist)到代码块(block)的头部。

if (!x) {
  var x = {};
}

// 等同于
var x;
if (!x) {
  x = {};
}

这意味着,变量x是if代码块之前就存在了。为了避免可能出现的问题,最好把变量声明都放在代码块的头部。

for (var i = 0; i < 10; i++) {
  // ...
}

// 写成
var i;
for (i = 0; i < 10; i++) {
  // ...
}

上面这样的写法,就容易看出存在一个全局的循环变量i。

另外,所有函数都应该在使用之前定义。函数内部的变量声明,都应该放在函数的头部。

参考链接:http://www.2ality.com/2013/07/meta-style-guide.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值