前言
沒有規矩 不成方圓
-
用
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入門》
其他細節待補充