前言
没有规矩 不成方圆
用
let
替换var来定义变量. 如果是常量,使用const
静态字符串
统一用单引号''
,动态拼接成的字符串
统一用反引号
“let staticString = 'This is a static string'; let d = 'dynamic'; let dynamicString = `This is a ${d} string`;
使用数组成员对变量赋值时,尽量用解构赋值
let arr = [1,2,3,4]; let [arr1,arr2] = arr; //arr1 =1, arr2 = 2;
往对象里添加/修改属性时,使用
Object.assign
,而不用松散的.语法
const objectA = {}; Object.assign(objectA, { attr1: 3 }); //objectA{attr1:3}
面向对象的写法一律写成
class
的形式,摒弃原生的prototype的书写方法class A{ constructor(){} prototypeFunA(){} static staticFunA(){} ... }
用extends实现单继承, 摒弃原生的prototype链书写方法的继承
class A{ constructor(){} prototypeFunA(){} static staticFunA(){} ... } class B extends A{ constructor(){ super(); } } let b = new B(); b.prototypeFunA(); B.staticFunA();
用mixin修饰器的方式可以多继承
(es5中可以用call来实现多继承,不过call/apply方法都属于奇技淫巧,不推荐使用了)
,实际上在js中多继承的应用场景并不多见模块的书写, 类似CommonJs规范. 暴露方法/属性统一用export
//moduleA.js export let name = 'Xie Min'; export function fun1(){xxx} export function fun1(){xxx} //或者这样写 //moduleA.js let name = 'Xie Min'; function fun1(){xxx} function fun1(){xxx} export{ name, fun1, fun2, }
引用模块统一用import,摒弃掉
require
. 这里特别注意,import模块的时候路径必须写成相对路径的形式, 比如要写成import {xx} from './moduleA'
而不是import {xx} from 'moduleA'
//index.js import * as moduleA from './moduleA'; moduleA.name; moduleA.fun1(); moduleA.fun2();
结语
部分参考自 阮一峰《ECMAScript 6入门》
其他细节待补充