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] ;