目录
块级作用域
①let取代var:ES6 提出了两个新的声明变量的命令:let和const。其中,let完全可以取代var,因为两者语义相同,而且let没有副作用。var命令存在变量提升效用,let命令没有这个问题。
②全局常量和线程安全:在let和const之间,建议优先使用const,尤其是在全局环境,不应该设置变量,只应设置常量。
const优于let有几个原因。一个是const可以提醒阅读程序的人,这个变量不应该改变;另一个是const比较符合函数式编程思想,运算不改变值,只是新建值,而且这样也有利于将来的分布式运算;最后一个原因是 JavaScript 编译器会对const进行优化,所以多使用const,有利于提高程序的运行效率,也就是说let和const的本质区别,其实是编译器内部的处理不同。
字符串
静态字符串一律使用单引号或反引号,不使用双引号。
动态字符串使用反引号。
| // bad const a = "foobar"; const b = 'foo' + a + 'bar'; // acceptable const c = `foobar`; // good const a = 'foobar'; const b = `foo${a}bar`; |
解构赋值
使用数组成员对变量赋值时,优先使用解构赋值。
函数的参数如果是对象的成员,优先使用解构赋值。
如果函数返回多个值,优先使用对象的解构赋值,而不是数组的解构赋值。这样便于以后添加返回值,以及更改返回值的顺序。
| const arr = [1, 2, 3, 4];
// bad const first = arr[0]; 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 }) { }
// bad function processInput(input) { return [left, right, top, bottom]; }
// good function processInput(input) { return { left, right, top, bottom }; }
const { left, right } = processInput(input);
|
对象
单行定义的对象,最后一个成员不以逗号结尾。多行定义的对象,最后一个成员以逗号结尾。
| // bad const a = { k1: v1, k2: v2, }; const b = { k1: v1, k2: v2 };
// good const a = { k1: v1, k2: v2 }; const b = { k1: v1, k2: v2, }; |
对象尽量静态化,一旦定义,就不得随意添加新的属性。如果添加属性不可避免,要使用Object.assign方法。
如果对象的属性名是动态的,可以在创造对象的时候,使用属性表达式定义。
另外,对象的属性和方法,尽量采用简洁表达法,这样易于描述和书写。
数组
使用扩展运算符(...)拷贝数组。
使用 Array.from 方法,将类似数组的对象转为数组。
| // bad const len = items.length; const itemsCopy = []; let i;
for (i = 0; i < len; i++) { itemsCopy[i] = items[i]; }
// good const itemsCopy = [...items];
const foo = document.querySelectorAll('.foo'); const nodes = Array.from(foo); |
函数
立即执行函数可以写成箭头函数的形式。
那些使用匿名函数当作参数的场合,尽量用箭头函数代替。因为这样更简洁,而且绑定了 this。
简单的、单行的、不会复用的函数,建议采用箭头函数。如果函数体较为复杂,行数较多,还是应该采用传统的函数写法。
所有配置项都应该集中在一个对象,放在最后一个参数,布尔值不可以直接作为参数。
本文介绍了ES6中的一些最佳实践,包括使用let替代var避免变量提升,利用const创建全局常量以提高程序效率,以及字符串的静态与动态表示。此外,详细阐述了解构赋值在数组和对象中的应用,提倡使用对象解构以方便扩展。在对象定义上,推荐单行定义时省略尾随逗号,并尽量使对象静态化。对于数组,推荐使用扩展运算符进行拷贝,以及Array.from方法转换类似数组对象。最后,文章强调了箭头函数在简洁性和this绑定上的优势,以及函数参数和返回值的处理方式。
1041

被折叠的 条评论
为什么被折叠?



