沒有規矩 不成方圓es6
用let
替換var來定義變量. 若是是常量,使用const
數組
靜態字符串
統一用單引號''
, 動態拼接成的字符串
統一用反引號
``app
let staticString = 'This is a static string'; let d = 'dynamic'; let dynamicString = `This is a ${d} string`;
使用數組成員對變量賦值時,儘可能用解構賦值ui
let arr = [1,2,3,4]; let [arr1,arr2] = arr; //arr1 =1, arr2 = 2;
往對象裏添加/修改屬性時,使用Object.assign
,而不用鬆散的.語法
es5
const objectA = {}; Object.assign(objectA, { attr1: 3 }); //objectA{attr1:3}
面向對象的寫法一概寫成class
的形式,摒棄原生的prototype的書寫方法prototype
class A{ constructor(){} prototypeFunA(){} static staticFunA(){} ... }
用extends實現單繼承, 摒棄原生的prototype鏈書寫方法的繼承code
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'
ip
//index.js import * as moduleA from './moduleA'; moduleA.name; moduleA.fun1(); moduleA.fun2();
部分參考自 阮一峯《ECMAScript 6入門》 其餘細節待補充