简单编程风格

84 阅读2分钟

1 块级作用域

1.1 let 取代 var

ES6 提出了两个新的声明变量的命令: let和const 。其中, let 完全可以取代 var ,因为两者语义相同,而且 let 没有副作用。

for (let i = 0; i < 10; i++) { 
    console.log(i);
}

上面的代码如果用 var 替代 let ,实际上就声明了一个全局变量i,这显然不是本意。

变量应该只在其声明的代码块内有效, var 命令做不到这点。

1.2 全局常量和线程安全

在let和const 之间,建议优先使用 const ,尤其是在全局环境中,不应该设置变量,只应设置常量。

const 优于 let 有以下几个原因。

  • const 可以提醒阅读程序的人,这个变量不应该改变

  • const 比较符合函数式编程思想,运算不改变值,只是新建值。

  • JavaScript 编译器会对 const 进行优化,所以多使用 const 有利于提供程序的运行效率。

    // bad 
    var a = 1, b = 2, c = 3 ;
    // good 
    const a = l ; 
    const b = 2 ; 
    const c = 3 ;
    // best 
    const [a , b , c] = [l , 2 , 3] ;
    

2 字符串

静态字符串一律使用单引号或反引号,不使用双引号。动态字符串使用反引号。

// bad 
const a = "foobar"; 
const b ='foo' + a + 'bar'; 
​
// acceptable 
const c = `foobar`
​
// good 
const a = 'foobar'; 
const b = `foo${a}bar`;
const c = 'foobar';

3 解构赋值

使用数组成员对变量赋值时,优先使用解构赋值。

const arr= [1 , 2 , 3 , 4];
​
// bad 
const first= arr[O]; 
const second= arr[1];
​
// good
const [first, second] = arr;

函数的参数如果是对象的成员,优先使用解构赋值。

// bad 
function getFullName(user) {
    const firstName = user.firstName; 
    const lastName = user.lastName ;
}
// good 
function getFullName (obj) { 
    const { firstName , lastName } =obj ;
}
​
// best 
function getFullName({ firstName,lastName } ) {
}

4 数组

使用扩展运算符( ... )复制数组。

// bad 
const len = items.length; 
const itemsCopy = [] ; 
let i;
for (i = 0 ; i < len ; i++) { 
    itemsCopy[i] = items[i] ; 
}
// good 
const itemsCopy = [ ... items] ;