语句和表达式
对于所有流程控制语句都不应该省略花括号,包括但不限于:
- if
- for
- while
- do..while
- try..catch...finally
花括号的对其方式
作者推荐: 将左花括号放置在块语句中第一句代码的末尾
//good
if(isSame) {
...
}
//不推荐
if(isSame)
{
...
}
块语句间隔
作者推荐: 在左圆括号之前和右圆括号之后各加一个空格,使条件和语法格式间隔起来
//good
if (isSame) {}
switch语句
缩进
有两种缩进风格:
- 每个case语句与switch关键字缩进一个层级
- 从第二个case开始,每条case语句前后各有一个空行
switch (num) {
case "one":
//代码
break;
case "two":
//代码
break;
break:
//代码
}
- 每个case语句与switch关键字对齐
- 每个case语句之间不要有空行
switch (num) {
case "one":
//代码
break;
case "two":
//代码
break;
break:
//代码
}
作者比较倾向于第一种
case的连续执行
作者推荐: 只要是有意为之的case都添加明显的注释
switch (num) {
// 连续执行case
case 'one':
case 'two':
// 代码
break;
case 'third':
//代码
//fall through
default:
//代码
}
default
是否需要default也是一个经常讨论的话题,作者更倾向于: 当不写default的时候,使用注释表述清楚
switch (num) {
case 'one':
//代码
break;
//没有default
}
with
with语句这里直接不推荐使用,非常影响性能: js在编译阶段做了很多优化,其中有些优化就是根据词法做静态分析,并预先确定所有变量和函数的位置,以便于需要时快速找到
但如果使用了with,只有在运行的时候才能知道with的作用域是什么,便不能在词法阶段确定作用域是否修改,如何修改,进而无法预先确定所有变量和函数定义的位置
continue
continue可以跳过当次循环进入下一次循环,作者认为使用continue不如使用条件判断来的直接且更容易理解,所以应尽量避免使用continue,但并不完全禁止
for-in
for-in用于遍历对象的键,但是还能遍历出从原型继承的属性,这往往使代码出现不符合预期的结果,推荐使用for-in循环时配合hasOwnProperty过滤出实例自身方法
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
//执行代码
}
}
还有一种常见的用法,有些开发者会使用for-in遍历数组,这是不推荐的,for-in只用来遍历对象