JS編碼規(guī)范

Javascript規(guī)范
1 變量命名
1.1 [規(guī)范] 變量和函數(shù)名稱剿另,采用駝峰命名方式箫锤,即第一個單詞以小寫字母開始,從第二個單詞開始以后的每個單詞首字母采用大寫字母

// good

var dashboarPage = {};

var camelCase = ‘命名規(guī)則’;

// bad

var dashboardpage = {};

var DashboardPage = {};

var dashboard_page = {};

1.2 [規(guī)范] 變量或方法名稱雨女,禁止以下劃線結(jié)束

// good

var personName = ‘Jone’;

// bad

var personName_ = ‘Jone’;

1.3 [規(guī)范] 禁止使用拼音方式命名

// good

var warningContent = ‘用戶名不能為空谚攒!’;

// bad

var gaojingneirong = ‘用戶名不能為空!’;

1.4 [建議] 字符串使用單引號 '

// good

var name = 'peter';

// bad

var name = "peter";

2 代碼風(fēng)格
2.1 [規(guī)范] 使用4個空格作為一個縮進(jìn)層級氛堕;不允許使用2個空格或tab字符

// good

if (0 < num) {

    return true;

}

// bad

if (0 < num) {

  return true;    // 縮進(jìn)2個空格

}

// bad

if (0 < num) {

return true;  // 使用tab鍵盤縮進(jìn)

}

2.2 [規(guī)范] 二元運(yùn)算符兩側(cè)必須有一個空格

// good

var sum = 1 + 2;

if (personName === ‘Jone’) {

    runA ();

}

// bad

var sum=1+2;

if (personName===’Jone’) {

    runA ();

}

2.3 [規(guī)范] if / else / for / while / function / switch / do / try / catch / finally 關(guān)鍵字后馏臭,必須有一個空格。

// good

if (condition) {

}

while (condition) {

}

(function () {

})();

// bad

if(condition) {

}

while(condition) {

}

(function() {

})();

2.4 [規(guī)范] if讼稚,while等條件判斷語句中括儒,不能省略大括號

// goog

if (1 === a) {

return true;

}

// bad

If (1 === a) return true;

2.5 [規(guī)范] 用作代碼塊起始的左花括號 { 前必須有一個空格,右大括號 { 必須單獨一行

// good

if (condition) {

}

while (condition) {

}

(function () {

})();

// bad

if(condition) {

}

while(condition) {

}

(function() {

})();

2.6 [規(guī)范] 在對象創(chuàng)建時锐想,屬性中的 : 之后必須有空格帮寻,: 之前不允許有空格

// good

var obj = {

    a: 1,

    b: 2,

    c: 3

};

// bad

var obj = {

    a : 1,

    b:2,

    c :3

};

2.7 [規(guī)范] 函數(shù)聲明、具名函數(shù)表達(dá)式赠摇、函數(shù)調(diào)用中固逗,函數(shù)名和 ( 之間不允許有空格

// good

function funcName() {

}

var funcName = function funcName() {

};

funcName();

// bad

function funcName () {

}

var funcName = function funcName () {

};

funcName ();

2.8 [規(guī)范] 逗號“,”和分號“;”前不允許有空格

// good

callFunc(a, b);



// bad

callFunc(a , b) ;

2.9 [規(guī)范] 行尾不得有多余的空格

2.10 [規(guī)范] 每行不得超過120個字符;超長的不可分割的代碼允許例外藕帜,比如復(fù)雜的正則表達(dá)式烫罩,長字符串不在例外之列

2.11 [建議] 在語句的行長度超過 120 時,根據(jù)邏輯條件合理縮進(jìn)

// good

if (user.isAuthenticated()

    && user.isInRole('admin')

    && user.hasAuthority('add-admin')

    || user.hasAuthority('delete-admin')

) {

    // Code

}

var html = '' // 此處用一個空字符串耘戚,以便整個HTML片段都在新行嚴(yán)格對齊

    + '<article>'

    +    '<h1>Title here</h1>'

    +    '<p>This is a paragraph</p>'

    +    '<footer>Complete</footer>'

    + '</article>';

var html = [

    '<article>',

        '<h1>Title here</h1>',

        '<p>This is a paragraph</p>',

        '<footer>Complete</footer>',

    '</article>'

];

html = html.join('');

foo(

    aVeryVeryLongArgument,

    anotherVeryLongArgument,

    callback

);

// 鏈?zhǔn)秸{(diào)用較長時采用縮進(jìn)進(jìn)行調(diào)整嗡髓。

$('#items')

    .find('.selected')

    .highlight()

    .end();

3 語言特性
3.1 [規(guī)范] 每個 var 只能聲明一個變量

// good

var hangModules = [];

var missModules = [];

var visited = {};

// bad

var hangModules = [],

    missModules = [],

visited = {};

3.2 [建議] 變量必須即用即聲明,不得在函數(shù)或其它形式的代碼塊起始位置統(tǒng)一聲明所有變量收津。

解釋:變量聲明與使用的距離越遠(yuǎn),出現(xiàn)的跨度越大浊伙,代碼的閱讀與維護(hù)成本越高撞秋。雖然JavaScript的變量是函數(shù)作用域,還是應(yīng)該根據(jù)編程中的意圖嚣鄙,縮小變量出現(xiàn)的距離空間吻贿。

3.3 [規(guī)范] 比較相等時,用嚴(yán)格等號===替代==

// good

if (age === 30) {

    // ......

}

// bad

if (age == 30) {

    // ......

}

4 ES6規(guī)范
4.1 [規(guī)范] const定義的變量哑子,必須大寫舅列,用下劃線間隔開來

4.2 [建議] 使用拓展運(yùn)算符 ... 復(fù)制數(shù)組

4.3 [建議] 對數(shù)組使用解構(gòu)賦值肌割。

//good

const [first, second] = arr;

// bad

const first = arr[0];

const second = arr[1];

4.4 [建議] 使用模板字符串替代字符串連接

// good

function sayHi(name){

    return `How are you ${name}?`

}

// bad

function sayHi(name){

    return 'How are you, ' + name + '?';

}

5 注釋規(guī)范
5.1 [建議]文件注釋應(yīng)位于文件的最前面,包含概要說明帐要、版本把敞、版權(quán)聲明、修改時間榨惠;文件注釋必須全部以英文字符表示

/*!

* iODS v3 (http://www.hollysys.com/)

* Hollysys 2019-2020

* srx 2019.9.18

*/

5.2 [規(guī)范]單行注釋奋早,以//開始,后面留一個空格

// good

// this is a comment

5.3 [建議]多行注釋,從第二行起,每行以“空格+”開始械筛,使對齊

/*

* this is a commen

* @param {Array} nodeName 節(jié)點名稱

*/

5.4 [建議]不要將注釋內(nèi)容寫在注釋的開始符和結(jié)束符所在行

// bad

/* start



end */

5.5 [建議]用@method聲明函數(shù)或類方法拢切;函數(shù)有參數(shù)時,必須使用@param路鹰,當(dāng)函數(shù)有返回值時,必須使用@return

/*

* 返回當(dāng)前集合中指定位置的元素

* @method/@class

* @param {Number} [i=0] 位置下標(biāo)。如果為負(fù)數(shù)姓建,則從集合的最后一個元素開始倒數(shù)

* @return {Element} 指定元素

*/

5.6 [建議] 必須使用 @event 標(biāo)識事件,事件參數(shù)的標(biāo)識與方法描述的參數(shù)標(biāo)識相同

/**

* 值變更時觸發(fā)

*

* @event Select#change

* @param {Object} e e描述

* @param {string} e.before before描述

* @param {string} e.after after描述

*/

[if !supportLists]1 [endif]變量命名

[if !supportLists]1.1 [endif][規(guī)范] 變量和函數(shù)名稱枉侧,采用駝峰命名方式引瀑,即第一個單詞以小寫字母開始,從第二個單詞開始以后的每個單詞首字母采用大寫字母

// good

var dashboarPage= {};

var camelCase

= ‘命名規(guī)則’;



// bad

var dashboardpage= {};

var DashboardPage= {};

var dashboard_page= {};

1.2 [endif][規(guī)范] 變量或方法名稱榨馁,禁止以下劃線結(jié)束

// good

varpersonName = ‘Jone’;



// bad

varpersonName_ = ‘Jone’;

1.3 [endif][規(guī)范] 禁止使用拼音方式命名

// good

var

warningContent = ‘用戶名不能為空憨栽!’;



// bad

var

gaojingneirong = ‘用戶名不能為空!’;

1.4 [endif][建議] 字符串使用單引號'

// good

var name= 'peter';



// bad

var name= "peter";

2 代碼風(fēng)格

2.1 [規(guī)范] 使用4個空格作為一個縮進(jìn)層級翼虫;不允許使用2個空格或tab字符

// good

if (0< num) {

   return true;

}



// bad

if (0< num) {

  returntrue;    //縮進(jìn)2個空格

}



// bad

if (0< num) {

       return true;  //使用tab鍵盤縮進(jìn)

}

2.2 [endif][規(guī)范] 二元運(yùn)算符兩側(cè)必須有一個空格

// good

var sum =1 + 2;



if (personName=== ‘Jone’) {

    runA();

}



// bad

varsum=1+2;



if(personName===’Jone’) {

    runA();

}

2.3 [規(guī)范] if / else/ for / while / function / switch / do / try / catch / finally 關(guān)鍵字后屑柔,必須有一個空格。

// good

if(condition) {

}

while(condition) {

}

(function() {

})();


// bad

if(condition){

}
while(condition){

}

(function(){

})();

2.4 [規(guī)范] if珍剑,while等條件判斷語句中掸宛,不能省略大括號

// goog

if (1 ===a) {

       return true;

}



// bad

If (1 ===a) return true;

2.5 [endif][規(guī)范] 用作代碼塊起始的左花括號 { 前必須有一個空格,右大括號{ 必須單獨一行

// good

if(condition) {

}



while(condition) {

}



(function() {

})();

 

// bad

if(condition){

}



while(condition){

}



(function(){

})();

2.6 [endif][規(guī)范] 在對象創(chuàng)建時招拙,屬性中的 : 之后必須有空格唧瘾,: 之前不允許有空格

// good

var obj ={

    a: 1,

    b: 2,

    c: 3

};



// bad

var obj ={

    a : 1,

    b:2,

    c :3

};

2.7 [endif][規(guī)范] 函數(shù)聲明、具名函數(shù)表達(dá)式别凤、函數(shù)調(diào)用中饰序,函數(shù)名和 ( 之間不允許有空格

// good

functionfuncName() {

}



varfuncName = function funcName() {

};



funcName();



// bad

functionfuncName () {

}



varfuncName = function funcName () {

};



funcName();

2.8 [endif][規(guī)范] 逗號“,”和分號“;”前不允許有空格

// good

callFunc(a,b);



// bad

callFunc(a, b) ;

2.9 [endif][規(guī)范] 行尾不得有多余的空格

[if !supportLists]2.10 [endif][規(guī)范] 每行不得超過120個字符;超長的不可分割的代碼允許例外规哪,比如復(fù)雜的正則表達(dá)式求豫,長字符串不在例外之列

[if !supportLists]2.11 [endif][建議] 在語句的行長度超過 120 時,根據(jù)邏輯條件合理縮進(jìn)

// good

if(user.isAuthenticated()

    && user.isInRole('admin')

    && user.hasAuthority('add-admin')

    || user.hasAuthority('delete-admin')

) {

    // Code

}



var html

= '' // 此處用一個空字符串,以便整個HTML片段都在新行嚴(yán)格對齊

    + ''

    +    '

Title here
'

    +    '

This is a paragraph

'

    +    'Complete'

    + '';



var html= [

    '',

        '

Title here
',

        '

This is aparagraph

',

        'Complete',

    ''

];

html =html.join('');



foo(

    aVeryVeryLongArgument,

    anotherVeryLongArgument,

    callback

);



// 鏈?zhǔn)秸{(diào)用較長時采用縮進(jìn)進(jìn)行調(diào)整蝠嘉。

$('#items')

    .find('.selected')

    .highlight()

    .end();

3 [endif]語言特性

3.1 [endif][規(guī)范] 每個 var 只能聲明一個變量

// good

varhangModules = [];

varmissModules = [];

varvisited = {};

// bad

varhangModules = [],

    missModules = [],

visited ={};

3.2 [endif][建議] 變量必須即用即聲明最疆,不得在函數(shù)或其它形式的代碼塊起始位置統(tǒng)一聲明所有變量。

解釋:變量聲明與使用的距離越遠(yuǎn)蚤告,出現(xiàn)的跨度越大努酸,代碼的閱讀與維護(hù)成本越高。雖然JavaScript的變量是函數(shù)作用域罩缴,還是應(yīng)該根據(jù)編程中的意圖蚊逢,縮小變量出現(xiàn)的距離空間。

3.3 [endif][規(guī)范] 比較相等時箫章,用嚴(yán)格等號===替代==

// good

if (age=== 30) {

    // ......

}

// bad

if (age== 30) {

    // ......

}

4 [endif]ES6規(guī)范

4.1 [endif][規(guī)范] const定義的變量烙荷,必須大寫,用下劃線間隔開來

4.2 [endif][建議] 使用拓展運(yùn)算符 ... 復(fù)制數(shù)組

4.3 [endif][建議] 對數(shù)組使用解構(gòu)賦值檬寂。

//good

const[first, second] = arr;



// bad

constfirst = arr[0];

constsecond = arr[1];

4.4 [endif] [建議] 使用模板字符串替代字符串連接

// good

functionsayHi(name){

    return `How are you ${name}?`

}

// bad

functionsayHi(name){

    return 'How are you, ' + name + '?';

}

5 [endif]注釋規(guī)范

5.1 [endif][建議]文件注釋應(yīng)位于文件的最前面终抽,包含概要說明、版本桶至、版權(quán)聲明昼伴、修改時間;文件注釋必須全部以英文字符表示

/*!

 * iODS v3 (http://www.hollysys.com/)

 * Hollysys 2019-2020

 * srx 2019.9.18

 */

5.2 [endif][規(guī)范]單行注釋镣屹,以//開始圃郊,后面留一個空格

// good

// thisis a comment

5.3 [endif][建議]多行注釋,從第二行起女蜈,每行以“空格+”開始持舆,使對齊

/*

 * this is a commen

 * @param {Array} nodeName節(jié)點名稱

 */

5.4 [endif][建議]不要將注釋內(nèi)容寫在注釋的開始符和結(jié)束符所在行

// bad

/* start

end */

5.5 [endif][建議]用@method聲明函數(shù)或類方法;函數(shù)有參數(shù)時伪窖,必須使用@param逸寓,當(dāng)函數(shù)有返回值時,必須使用@return

/*

 *返回當(dāng)前集合中指定位置的元素

 * @method/@class

 * @param {Number} [i=0]位置下標(biāo)覆山。如果為負(fù)數(shù)竹伸,則從集合的最后一個元素開始倒數(shù)

 * @return {Element}指定元素

 */

5.6 [endif] [建議] 必須使用 @event 標(biāo)識事件,事件參數(shù)的標(biāo)識與方法描述的參數(shù)標(biāo)識相同

/**

 *值變更時觸發(fā)

 *

 * @event Select#change

 * @param {Object} e e描述

 * @param {string} e.before before描述

 * @param {string} e.after after描述

 */

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末簇宽,一起剝皮案震驚了整個濱河市勋篓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌魏割,老刑警劉巖生巡,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異见妒,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門须揣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盐股,“玉大人,你說我怎么就攤上這事耻卡》柚” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵卵酪,是天一觀的道長幌蚊。 經(jīng)常有香客問我,道長溃卡,這世上最難降的妖魔是什么溢豆? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮瘸羡,結(jié)果婚禮上漩仙,老公的妹妹穿的比我還像新娘。我一直安慰自己犹赖,他們只是感情好队他,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著峻村,像睡著了一般麸折。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上粘昨,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天垢啼,我揣著相機(jī)與錄音,去河邊找鬼雾棺。 笑死膊夹,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的捌浩。 我是一名探鬼主播放刨,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼尸饺!你這毒婦竟也來了进统?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤浪听,失蹤者是張志新(化名)和其女友劉穎螟碎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體迹栓,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡掉分,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片酥郭。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡华坦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出不从,到底是詐尸還是另有隱情惜姐,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布椿息,位于F島的核電站歹袁,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏寝优。R本人自食惡果不足惜条舔,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望倡勇。 院中可真熱鬧逞刷,春花似錦、人聲如沸妻熊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扔役。三九已至帆喇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間亿胸,已是汗流浹背坯钦。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留侈玄,地道東北人婉刀。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像序仙,于是被迫代替她去往敵國和親突颊。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348

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

  • 一潘悼、javascript代碼規(guī)范 變量1.1 一直使用 const 來聲明變量律秃,如果不這樣做就會產(chǎn)生全局變量。我們...
    lyichao閱讀 787評論 0 1
  • 1治唤、命名規(guī)范:命名法棒动、變量、常量宾添、構(gòu)造函數(shù)船惨、類的成員等等的命名規(guī)范 命名法: 變量:命名方法:駝峰命名法命名規(guī)范:...
    呼呼哥閱讀 2,224評論 0 0
  • 1.使用字面值創(chuàng)建對象和數(shù)組 2.用Array.from將類數(shù)組對象轉(zhuǎn)換成數(shù)組 3.字符串用單引號' '而不是雙引...
    hanahaha閱讀 701評論 0 0
  • 這份規(guī)范掷漱,是參考了 Go 官方提供的編碼規(guī)范粘室,以及 Go 社區(qū)沉淀的一些比較合理的規(guī)范之后,加入自己的理解總結(jié)出的...
    拾丨玖閱讀 1,232評論 0 4
  • 今天給大家分享一下Google Python 編程規(guī)范卜范。適合入門者學(xué)習(xí)。 分號 不要在行尾加分號, 也不要用分號將...
    程序員爽爽閱讀 419評論 0 0