个人学习笔记,具体参考:http://es6.ruanyifeng.com/#docs/style
块级作用域
(1)let 取代 var
(2)全局常量和线程安全,推荐const字符串
(1)静态使用单引号const a = ‘foobar’;
(2)动态使用反引号
const b =
foo${a}bar
;解构赋值
优先解构赋值的有:
(1)使用数组成员对变量赋值
(2)函数的参数如果是对象的成员,对参数进行解构赋值
(3)函数返回多个值,优先对返回值采用对象解构对象
(1)单行定义的对象,最后一个成员不以逗号结尾。多行定义的对象,最后一个成员以逗号结尾
(2)对象尽量静态化,一旦定义,就不得随意添加新的属性。如果添加属性不可避免,要使用Object.assign方法。
(3)如果对象的属性名是动态的,可以在创造对象的时候,使用属性表达式定义。
(4)对象的属性和方法,尽量采用简洁表达法数组
(1)使用扩展运算符(…)拷贝数组。const itemsCopy = […items];
(2)使用 Array.from 方法,将类似数组的对象转为数组。
const foo = document.querySelectorAll(‘.foo’);
const nodes = Array.from(foo);函数
(1)立即执行函数可以写成箭头函数的形式。
(2)那些需要使用函数表达式的场合,尽量用箭头函数代替。
(3)箭头函数取代Function.prototype.bindconst boundMethod = (…params) => method.apply(this, params)
(4)简单的、单行的、不会复用的函数,建议采用箭头函数。如果函数体较为复杂,行数较多,还是应该采用传统的函数写法。
(5)所有配置项都应该集中在一个对象,放在最后一个参数,布尔值不可以直接作为参数。function divide(a, b, { option = false } = {}) {
}(6)不要在函数体内使用 arguments 变量,使用 rest 运算符(…)代替。
(7)使用默认值语法设置函数参数的默认值function handleThings(opts = {}) {
// …
}Map 结构
注意区分 Object 和 Map,只有模拟现实世界的实体对象时,才使用 Object。如果只是需要key: value的数据结构,使用 Map 结构。因为 Map 有内建的遍历机制。let map = new Map(arr);
for (let key of map.keys()) {
console.log(key);
}
for (let value of map.values()) {
console.log(value);
}
for (let item of map.entries()) {
console.log(item[0], item[1]);
}Class
(1)总是用 Class,取代需要 prototype 的操作。
(2)使用extends实现继承模块
(1)使用import取代require。import { func1, func2 } from ‘moduleA’;
(2)使用export取代module.exports.如果模块只有一个输出值,就使用export default
import React from ‘react’;
class Breadcrumbs extends React.Component {
render() {
return(3)不要在模块输入中使用通配符。
(4)如果模块默认输出一个函数,函数名的首字母应该小写。
(5)如果模块默认输出一个对象,对象名的首字母应该大写。ESLint 的使用
用ESLint 工具检查代码规范