《编写可维护的JavaScript》(三) ---语句和表达式

90 阅读2分钟

语句和表达式

对于所有流程控制语句都不应该省略花括号,包括但不限于:

  • 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只用来遍历对象