編碼風(fēng)格與規(guī)范

1筷频、let取代var 強(qiáng)制

let完全可以取代var,因?yàn)閮烧哒Z義相同前痘,而且let沒有副作用截驮。

2、字符串采用單引號和反引號 強(qiáng)制

const a = 'foobar';
const b = `foo${a}bar`;

3际度、采用解構(gòu)賦值方式 建議

const arr = [1, 2, 3, 4];
// 常規(guī)寫法
const first = arr[0];
const second = arr[1];
// 建議寫法
const [first, second] = arr;

const obj = { left, right, top, bottom };
// 常規(guī)寫法
const left = obj.left;
const right= obj.right;
// 建議寫法
const { left, right } = obj;

// 常規(guī)寫法
function getFullName(obj) {
    const firstName = obj.firstName;
    const lastName = obj.lastName;
}
// 建議寫法
function getFullName({ firstName, lastName  }) {
}

4、對象盡量靜態(tài)化 推薦

對象盡量靜態(tài)化涵妥,一旦定義乖菱,就不得隨意添加新的屬性。如果添加屬性不可避免蓬网,要使用Object.assign方法窒所。

// 不推薦如下寫法
const user = {
    name: '韓晗'
}
user.sex = '男';
user.age = 38;

// 推薦寫法
const user = {
    name: '韓晗',
    sex: null
}
Object.assign(user, { age: 38 });

5、使用擴(kuò)展運(yùn)算符(...)拷貝數(shù)組 推薦

// 常規(guī)寫法
const itemsCopy = [];
const len = items.length;
for (const i = 0; i < len; i++) {
    itemsCopy[i] = items[i];
}

// 推薦寫法
const itemsCopy = [...items];

6帆锋、簡單的吵取、單行的、不會復(fù)用的函數(shù)锯厢,采用箭頭函數(shù) 建議

// 常規(guī)寫法
[1, 2, 3].map(function (x) {
    return x * x;
});

// 建議的寫法
[1, 2, 3].map((x) => {
    return x * x;
});

// 更好的寫法
[1, 2, 3].map(x => x * x);

注意:箭頭函數(shù)不但可以使編碼更簡潔皮官,而且綁定了 this脯倒。

7、不要在函數(shù)體內(nèi)使用 arguments 變量捺氢,使用 rest 運(yùn)算符(...)代替 強(qiáng)制

// 禁止的寫法
function concatenateAll() {
    const args = Array.prototype.slice.call(arguments);
    return args.join('');
}

// 替換的寫法
function concatenateAll(...args) {
    return args.join('');
}

8藻丢、使用默認(rèn)值語法設(shè)置函數(shù)參數(shù)的默認(rèn)值 強(qiáng)制

// 禁止的寫法
function handleThings(status) {
    status = status || 0;
}

// 替換的寫法
function handleThings(status = 0) {
}

9、用Class取代需要prototype的操作 推薦

// 常規(guī)寫法
function User() {
    const name = '韓晗';
}
User.prototype.getName = function() {
    ...
}

// 推薦的寫法
class User{
    const name = '韓晗';
    getName () {
        ...
    }
}

10摄乒、堅(jiān)持使用ES6原生模塊語法 強(qiáng)制

1 堅(jiān)持使用import取代require
2 堅(jiān)持使用export取代module.exports
3 import進(jìn)來的對象都是要用到的悠反,暫時不用的刪除或者注釋掉

11、類和類中方法的命名規(guī)范 強(qiáng)制

1 類名采用大駝峰方式命名馍佑,實(shí)例名采用小駝峰方式命名
2 類中方法采用小駝峰方式命名
3 內(nèi)部方法名前面加下劃線斋否,表示私有方法僅限內(nèi)部調(diào)用
4 以上命名方式同樣適用于對構(gòu)造函數(shù)及內(nèi)部方法的命名

12、變量命名規(guī)范 強(qiáng)制

1 常數(shù)采用全大寫+匈牙利命名法

// 例如:
const IMAGE_DEFAULT_WIDTH = 600;

2 變量拭荤、傳參茵臭、常量等采用小駱駝命名法

// 例如:
let index = 0;
const departmentName = 'IT部';
function getFullName(firstName, lastName) {
    ...
}

3 臨時變量或私有變量前可以用'_'開頭

// '_'開頭臨時變量必須是局部變量
// 例如:
for(const i = 0; i < items.length; i++{
    const _img = document.createElement('img');
    ...
}

4 通用變量

// 除i,j,n,e,或一元二次方程中的a,b,c等約定俗成單字符變量外穷劈,禁止在代碼中出現(xiàn)單字符變量
// 例如:
for(const u of userArray) {
    ...
}

// tmp或temp用于臨時變量
// 例如:
let total = 0;
for(const i = 0; i < 100; i++) {
    const tmp = i * i;
    total += tmp;
}

// 用items代表通用數(shù)組對象笼恰,用item代表從數(shù)組中遍歷出來的單個對象
for(const item of items) {
    ...
}

// 用args代表通用傳參數(shù)組,arg1,arg2,arg3...分別代表單個傳參
function equation(...args) {
    const arg1 = args[0];
    const arg2 = args[1];
    const arg3 = args[2];
    const arg4 = args[3];
    return arg1 * arg2 + arg3 * arg4;
}

// 用params代表通用對象型傳參
function equation(params) {
    return params.a * params.b + params.c * params.d;
}

// 用settings歇终、opts或者prots代表通用配置項(xiàng)
// settings代表設(shè)置
// opts是options的縮寫社证,也代表配置
// prots是properties的縮寫,代表配置
function ImageViewer(opts) {
    const options = Object.assign({}, defaultOpts, opts);
    ...
}

// flag评凝、type與status
// flag通常用于表示布爾型或簡單如'1,2,3'這樣的數(shù)字型數(shù)據(jù)
// type用于代表數(shù)字或其他枚舉的分類追葡,分類可以少也可以非常之多
// status通常用于代表數(shù)據(jù)的狀態(tài)位,也是可以很少也可以非常之多
let flag = false;
let type = 1;
let status = 0;

// 以上所有的通用變量均可作為變量后綴出現(xiàn)
// 例如:
let userStatus = 1;        // 用戶狀態(tài)
const pageType = 2;        // 頁面類型
const pluginProts = {};    // 插件配置

5 類型修飾后綴

// 序號采用index奕短,整數(shù)采用num宜肉,浮點(diǎn)型采用float
let rowIndex = 1;        // 行順序號
let docNum = 155;        // 稿件數(shù)量
let lengthFloat = 89.5;    // 長度通常是整
數(shù)型的,加上float作為后綴后翎碑,就明確了變量的實(shí)際類型

// 字符串采用str谬返,布爾型采用'is'作為前綴
const sex = 1;
const sexStr = ['女', '男', '未知'][sex];
const isMen = sex == 1;

// 數(shù)組采用array,集合采用set/map日杈,對象采用obj遣铝,JSON采用json
const userObj = {};
const userJson = {};
const userArray = [];    // 不建議采用list作為后綴
const userSet = new Set();
const userMap = new Map();

// 類和函數(shù)修飾后綴
const xxxModel;        //  model對象實(shí)例
const xxxDao;            // Dao層實(shí)例
const xxxService;        // Service層實(shí)例
const xxxFn;            // 函數(shù)
const xxxCb;            // 回調(diào)函數(shù)(強(qiáng)調(diào):為了避免回調(diào)'cb'與采編'cb'的命名歧義,系統(tǒng)中用全大寫'CB'代表采編莉擒,'XCB'代表新采編)

6 描述后綴

// 頁面元素型描述后綴
const xxxElem;        // xxx通用元素
const xxxInp;        // xxx輸入框
const xxxChk;        // xxx復(fù)選框
const xxxRad;        // xxx單選框
const xxxSel;        // xxx下拉列表
const xxxTxta;        // xxx文本域
const xxxBtn;        // xxx按鈕
const xxxForm;        // xxx表單
const xxxBox;        // xxx盒子酿炸,常用指代容器
const xxxDiv;        // xxx div元素
const xxxLi;        // xxx li元素

// 業(yè)務(wù)實(shí)體型描述后綴
const xxxDoc;    // xxx稿件
const xxxAudio;    // xxx音頻
const xxxImage;    // xxx圖片
const xxxVideo;    // xxx視頻
const xxxProcess;    // xxx流程
const xxxPublish;    // xxx發(fā)布線路,是對渠道涨冀、產(chǎn)品的總稱
const xxxChannel;    // xxx渠道填硕,渠道下是具體的產(chǎn)品
const xxxProduct;    // xxx產(chǎn)品
const xxxReport;    // xxx報道
const xxxCount;    // xxx數(shù)
const xxxDescription;    // xxx描述,有時也用于表示留痕
const xxxAttachment;    // xxx附件
const xxxDept;    // xxx部門
const xxxPDept;    // xxx父級部門
const xxxBy;    // xxx人鹿鳖,例如:uploadBy表示上傳人
const xxxLat;    // xxx緯度
const xxxLon;    // xxx經(jīng)度
const xxxFull;    // xxx完整路徑扁眯,例如:departmentNameFull代表從頂級部門到當(dāng)前部門的完成部門路徑
const xxxCategory;    // xxx分類
const xxxPostil;    // xxx批注

13壮莹、通用縮寫 強(qiáng)制

說明 全拼 縮寫
函數(shù) function func/fn
回調(diào) callback cb
配置,選項(xiàng)配置 options opts
配置恋拍,屬性配置 properties prots
參數(shù) parameters params
對象 object obj
請求 request req
響應(yīng) response res
源頭/資源 source/resource src/resrc
異步 asynchronization asyn
同步 synchronization sync
文本 text txt
stream stm
服務(wù) server svr
計(jì)算 calculate calc
變化 change chg
點(diǎn)擊 click clk
命令 command cmd
控制 control ctrl
當(dāng)前 current cur
長度 length len
參數(shù) argument arg
默認(rèn) default def
動態(tài) dynamic dyna
環(huán)境 Environment env
擴(kuò)展 extend ex/ext
執(zhí)行 execute exec
插入 insert ins
實(shí)例 instance inst
管理/管理者 Manage/Manager mg/mgr
采編/新采編 caibian/xincaibian CB/XCB
部門 department depart/dept
中間 middle mid
乘法 multiply mul
打印 print prn
發(fā)布 public pub
引用垛孔、參考 reference ref
注冊/注冊人 regist/register reg/regr
元素 element elem
輸入框 input inp
下拉列表 select sel
復(fù)選框 checkbox chk
單選框 radiobox rad
文本域 textarea txta
按鈕 button btn
文檔 document doc
關(guān)聯(lián)、關(guān)系 relationship/relation rel
消息 message mesg/msg
column col
錯誤 error err
詳情施敢、信息 infomation info
導(dǎo)航 navigation nav
操作 operation opt
流程 process proc
微信 weixin wx
微博 weibo wb
臉書 facebook fb
推特 twitter tw
優(yōu)兔 youtube ytb

14周荐、注釋規(guī)范 強(qiáng)制

1 模塊聲明

寫在文件的最上面,說明文件的用途僵娃,所屬目錄概作,作者及其他

/**
 * ajax請求工具函數(shù)庫
 * @module app/common/utils
 * @author 韓晗
 */

/**
 * 與用戶、組部默怨、權(quán)限相關(guān)的Dao層類
 * @module app/main/core/service
 * @author 韓晗
 */

2 類注釋

在命名規(guī)范的前提下讯榕,根據(jù)約定大于說明的原則,可以不寫注釋匙睹,例如:UserDao愚屁、UserService等
如果需要給類寫注釋,建議說明以下信息
a 類的用途簡要說明痕檬,通常用一行
b 如果作者與當(dāng)前模塊作者不一致霎槐,則聲明作者

/**
 * 與用戶相關(guān)的API層Dao類
 */

/**
 * 與用戶相關(guān)的Service服務(wù)類
 * @author 王翔
 */

3 函數(shù)及方法注釋

/**
 * GET方式ajax請求API接口的共通方法
 * @param {string} url api接口地址
 * @param {object} params 接口請求參數(shù)
 * @param {function} callback 回調(diào)函數(shù)
 * @returns {void} 回調(diào)方式,無返回
 */

4 變量說明注釋

采用在行尾單行注釋的方式梦谜,一行說明一個變量

let userType = 0;    // 用戶類型:0管理員 1普通用戶 2注冊會員 

5 代碼塊說明注釋

代碼塊說明注釋通常是對注釋下方同一業(yè)務(wù)邏輯代碼的說明
采用單行注釋符'//'注釋丘跌,需要多行說明文字的時候,采用多個單行注釋符注釋

強(qiáng)烈建議將同一邏輯的代碼塊說明寫在一起

/** 不好的寫法 */
// 如果type=1唁桩,則將兩個數(shù)相乘并返回
if (type == 1) {
    return num1 * num2;
}
// 如果type=2闭树,則將兩個數(shù)相加并返回
else if (type == 2) {
    return num1 + num2;
}
// 否則返回0
else {
    return 0;
}

/** 推薦的寫法 */
// 判斷type的值,執(zhí)行不同的計(jì)算方式并返回
// 如果type=1荒澡,則將兩個數(shù)相乘并返回
// 如果type=2报辱,則將兩個數(shù)相加并返回
// 否則,直接返回0
if (type == 1) {
    return num1 * num2;
} else if (type == 2) {
    return num1 + num2;
} else {
    return 0;
}

6 Bug修改或需求疊加時的注釋

修改的代碼塊前后要增加2或4個斷行
操作類型:add新增 | edit修改 | delete刪除
開發(fā)類型:BUG改錯誤 | FUN修改或疊加邏輯

// 韓晗<edit> start
// 2019-03-21 <BUG> 解決計(jì)算時沒有判斷邊界的錯誤
// return x * y;

const result = x * y;
if (result > 100000) {
    result = 100000;
}
return result;

// 韓晗<edit> end

15单山、Git提交說明書寫格式

Git提交的說明格式如下:
【{掛欄主題(或關(guān)鍵字)信息}】{提交內(nèi)容說明}
例如:
【新增】新增人員選擇彈窗面板開關(guān)項(xiàng)及相關(guān)組件目錄
【修改捏肢、刪除】修改了人員選擇彈窗的樣式,解決取消按鈕失效問題饥侵,同時刪除了沒用的css文件
【A輪沖刺測試】解決了在特殊情況下,插入文字稿失敗的bug

16衣屏、張帆老師提出的新要求 強(qiáng)制

1躏升、項(xiàng)目禁止使用Jquery或其他第三方函數(shù)庫
2、項(xiàng)目中引用任何第三方插件狼忱、組件需要經(jīng)過張帆老師同意

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末一睁,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子佃却,更是在濱河造成了極大的恐慌者吁,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件饲帅,死亡現(xiàn)場離奇詭異复凳,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)灶泵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門育八,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人赦邻,你說我怎么就攤上這事髓棋。” “怎么了惶洲?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵按声,是天一觀的道長。 經(jīng)常有香客問我恬吕,道長签则,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任币呵,我火速辦了婚禮怀愧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘余赢。我一直安慰自己芯义,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布妻柒。 她就那樣靜靜地躺著扛拨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪举塔。 梳的紋絲不亂的頭發(fā)上绑警,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天,我揣著相機(jī)與錄音央渣,去河邊找鬼计盒。 笑死,一個胖子當(dāng)著我的面吹牛芽丹,可吹牛的內(nèi)容都是我干的北启。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼咕村!你這毒婦竟也來了场钉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤懈涛,失蹤者是張志新(化名)和其女友劉穎逛万,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體批钠,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡宇植,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了价匠。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片当纱。...
    茶點(diǎn)故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖踩窖,靈堂內(nèi)的尸體忽然破棺而出坡氯,到底是詐尸還是另有隱情,我是刑警寧澤洋腮,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布箫柳,位于F島的核電站,受9級特大地震影響啥供,放射性物質(zhì)發(fā)生泄漏悯恍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一伙狐、第九天 我趴在偏房一處隱蔽的房頂上張望涮毫。 院中可真熱鬧,春花似錦贷屎、人聲如沸罢防。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咒吐。三九已至,卻和暖如春属划,著一層夾襖步出監(jiān)牢的瞬間恬叹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工同眯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留绽昼,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓须蜗,卻偏偏與公主長得像硅确,于是被迫代替她去往敵國和親肿孵。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容