平時工作中雖然有eslint這些工具幫助我們規範一下基本的程式碼,但更多的還是需要我們自身去注重一下程式碼質量,以下是我個人的一些經驗總結筆記,應該還有很多不足和優化的地方,希望大家多多指教哈,多討論
1.不要用var,能使用const不用let
2.避免隱式轉換,使用全等(===)進行判斷
3.不要寫冗餘判斷,比如
flag : a === b ? true : false 不建議
flag : a === b 建議
複製程式碼
4.if判斷超過3個分支需優化,考慮使用策略模式
if(a === 'a'){
title = '標題1'
} else if(a === 'b'){
title = '標題2'
} else if(a === 'c'){
title = '標題3'
} else {
title = '標題4'
}
建議
const objMap = {
a:'標題1',
b:'標題2',
c:'標題3',
}
title = objMap[a] || '標題4'
複製程式碼
5.不要留空程式碼塊,或空方法,如:
if(a){
}else{
//業務邏輯
}
複製程式碼
6.判斷陣列是否有值 不需要 arr.lenth > 0 ,直接 arr.length
7.Array型別儘量使用forEach map等這些方法,看上去更簡潔,資料不多的情況下,和for迴圈效能,可忽略
8.從執行效率角度,能用Array解決的就不要用Object
9.遍歷物件使用Object.keys方式
10.從某物件取多個欄位時,超過3個屬性賦值最好抽成一個方法,不然看上起太冗餘了
const param = {
name : options.name,
phone : options.phone,
address : options.address,
city : options.city
}
建議
const feildArr = ['name','phone','city','address']
const param = {}
feildArr.forEach(feild => {
param[feild] = options[feild]
})
複製程式碼
11.如果只是普通的方法或者回撥,能用箭頭函式就用箭頭函式,不要在專案中顯式繫結或暫存this,除非特殊場景需要
12.不要在template寫大量的判斷表示式,這樣會別人看程式碼感覺很懵逼,可以在data內宣告變數,在業務方法裡進行處理和註釋,比如:
<div v-if="obj && obj.name && obj.phone && obj.addess"></div>
複製程式碼
13.多次判斷物件深層屬性時,不要增加判斷次數,對於物件巢狀過深的,最好先將物件進行快取
const openId = res && res.data && res.data.openId || ''
const codeId = res && res.data && res.data.codeId ||''
建議
if(res && res.data){
const _data = res.data
const openId = _data.openId || ''
const codeId = _data.codeId || ''
}
或者
let openId = '',codeId = '';
try{
const _data = res.data
openId = _data.openId
codeId = _data.codeId
} catch(e){
}
複製程式碼