良好的代碼編程習慣是一個優秀的軟件工程師的必備素養,也是一個團隊開發易於閱讀、高可維護性的大型項目的基礎;雖然Javascript弱語言的本質給前端開發者帶來了更大的靈活性,但從工程的角度來講這是很是不合理的,也是一個可維護性項目潛在的致命缺陷。爲了不出現‘‘連本身之前寫過的代碼都不忍睹視’’以及‘‘一個團隊成員休假或離職,形成整個項目癱瘓’’的尷尬局面,對於一個大型項目而言,項目的代碼風格,和項目的代碼具備同等重要的地位。html
let
取代var
:提升js變量先聲名、後定義的規範性(var存在變量提高,而let命令會由於暫時性死區報錯,沒有變量提高效果);const
優先於let
:①提醒代碼閱讀人該變量不該該修改;②被無心中修改時報錯;(let、const的本質區別是編譯器內部處理不一樣;Javascript編譯器會對const進行優化,提高程序運行效率);''
或者反引號,不適用雙引號const arr=[1,2,3,4];const [first,second]=arr;
;const person={name:'lili',age:12}; function sayHi({name,age}){ ...};
;// ① 動態屬性表達式 const obj={id:2, name:'San FranciSco', [getKey('eabled')]:true } // ②簡潔表達式 let ref='it is a string'; const atom={ref, value:1, addValue(value){ return atom.value+value }; // ③單行定義對象 let obj={k1:k1,k2:k2:k3:k3}; // ④多行定義對象 let obj2={ k1:'k1', k2:'k2', k3:'k3', }
...
;Array.from()
;// 複製:數組==>數組 let itemsCopy=[...Array1]; // 轉換:類數組==>數組 let foo=document.querySelectorAll('.foo'); let nodes=Array.from(foo);
this
,可取代Function.prototype.bind
功能;...
替換arguments
變量;// ①箭頭函數取代 function.prototype.bind let boundMethod=(...prams)=>method.apply(this,params); // ②布爾參數:不能直接做爲默認參數、可放在最後一個對象 function (a,b,{option:false}={}){//....}
Object
;key:value
的數據結構使用Map
:Map內建有便利機制;extends
實現繼承:extend語法更簡潔,且不存在破壞instance運算的危險;// ① 採用 Class取代property操做 // 使用原型方法propertype function Queue(arr=[]){ this._queue=[...arr]; } Queue.propertype.pop=function(){ let item=this._queue[0]; this._queue.splice(0,1); return item; } //使用類 class實現 class Queue{ constructor(arr=[]){ this._queue=[...arr]; } pop(){ let item=this._queue[0]; this._queue.splice(0,1); return item; } } // ②使用extends實現繼承 // 採用instance算法 function PeekableQueue(contents){ Queue.apply(this,contents); } inherits(PeekableQueue,Queue); PeekableQueue.prototype.peek=function(){ return this._queue[0]; } // 採用extends語法實現繼承 class PeekableQueue extends Queue{ peek(){ return this._queue[0]; } }
import
語法替代require
語法:Module語法是JavaScript模塊的標準語法;export
語法取代nodule.exports
語法:module.exports是CommonJs語法;export default
語法;多個輸出值採用 export {obj1,obj2}
:不可同時使用多個export default
、不可用export default
與普通export
共用;前端
// ①一個模塊輸出多個模塊 import { fn1,fn2} from 'ModuleA'; // ② export取代module.exports語法 let Person={}; module.exports=Person; // CommonJS語法 export default Person; // JavaScript語法 // ③輸出函數 function makeStyleGuide(){}; export default makeStleGuide; // ④輸出類、對象 let StyleGuid={es6:{test:'',include:''}}; export default StyleGuid;
PS:各大公司風格規範連接jscs.infonode