亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

關于Google發布的JavaScript代碼規范你要知道哪些

2024-05-06 16:43:33
字體:
來源:轉載
供稿:網友

Google為了那些還不熟悉代碼規范的人發布了一個JS代碼規范。其中列出了編寫簡潔易懂的代碼所應該做的最佳實踐。

代碼規范并不是一種編寫正確JavaScript代碼的規則,而是為了保持源代碼編寫模式一致的一種選擇。對于JavaScript語言尤其如此,因為它靈活并且約束較少,允許開發者使用許多不同的編碼樣式。

Google和Airbnb各自占據著當前最流行的編碼規范的半壁江山。如果你會在編寫JS代碼上投入很長時間的話,我強烈推薦你通讀一遍這兩家公司的編碼規范。

接下來要寫的是我個人認為在Google的代碼規范中,與日常開發密切相關的十三條規則。

它們處理的問題都非常具有爭議性,包括tab與空格、是否強制使用分號等等。還有一些令我感到驚訝的規則,往往最后都改變了我編寫JS代碼的習慣。

對于每一條規則,我都會先給出規范的摘要,然后引用規范中的詳細說明。我還會舉一些適當的反例論證遵守這些規則的重要性。

使用空格代替tab

除了每一行的終止符序列,ASCII水平空格符(0x20)是唯一一個可以出現在源文件中任意位置的空格字符。這也意味著,tab字符不應該被使用,以及被用來控制縮進。

規范隨后指出應該使用2個,而不是4個空格帶實現縮進。

// badfunction foo() {????let name;}// badfunction bar() {?let name;}// goodfunction baz() {??let name;}

不能省略分號

每個語句必須以分號結尾。不允許依賴于JS自動添加分號的功能。

盡管我不明白為什么會有人反對這個規則,但目前分號的使用問題顯然已經像“空格 vs tab”這個問題一樣產生了巨大的爭議。而Google對此表示分號是必須的,是不可省略的。

// badlet luke = {}let leia = {}[luke, leia].forEach(jedi => jedi.father = 'vader')// goodlet luke = {};let leia = {};[luke, leia].forEach((jedi) => { jedi.father = 'vader';});

暫時不要使用ES6 module

由于ES6模塊的語義尚不完全確定,所以暫時不要使用,比如export和import關鍵字。一旦它們的相關規范制定完成,那么請忽略這一條規則。

// 暫時不要編寫下面的代碼://------ lib.js ------export function square(x) {  return x * x;}export function diag(x, y) {  return sqrt(square(x) + square(y));}//------ main.js ------import { square, diag } from 'lib';

譯者注:感覺遵守這條規范不大現實,畢竟現在已經有babel了。而且使用React時,最佳實踐就是使用ES6模塊吧。

不推薦代碼水平對齊

Google的代碼規范允許但不推薦對代碼進行水平對齊。即使之前的代碼中做了水平對齊的處理,以后也應該避免這種行為。

對代碼進行水平對齊會在代碼中添加若干多余的空格,這讓相鄰兩行的字符看上去處于一條垂直線上。

// bad{ tiny:  42,  longer: 435, };// good{ tiny: 42,  longer: 435,};

杜絕var

使用const或let來聲明所有局部變量。如果變量不需要被重新賦值,默認應該使用const。應該拒絕使用關鍵字var。

我不知道是因為沒有人能說服他們,還是說因為舊習難改。目前我仍能看到許多人在StackOverFlow或其他地方使用var聲明變量。

// badvar example = 42;// goodconst example = 42;

優先使用箭頭函數

箭頭函數提供了一種簡潔的語法,并且避免了一些關于this指向的問題。相比較與function關鍵字,開發者應該優先使用箭頭函數來聲明函數,尤其是聲明嵌套函數。

坦白說,我曾以為箭頭函數的作用只在于簡潔美觀。但現在我發現原來它們還有更重要的作用。

// bad[1, 2, 3].map(function (x) { const y = x + 1; return x * y;});// good[1, 2, 3].map((x) => { const y = x + 1; return x * y;});

使用模板字符串取代連接字符串

在處理多行字符串時,模板字符串比復雜的拼接字符串要表現的更出色。

// badfunction sayHi(name) { return 'How are you, ' + name + '?';}// badfunction sayHi(name) { return ['How are you, ', name, '?'].join();}// badfunction sayHi(name) { return `How are you, ${ name }?`;}// goodfunction sayHi(name) { return `How are you, ${name}?`;}

不要使用續行符分割長字符串

在JS中,/也代表著續行符。Google的代碼規范不允許在不管是模板字符串還是普通字符串中使用續行符。盡管ES5中允許這么做,但如果在/后跟著某些結束空白符,這種行為會導致一些錯誤,而這些錯誤在審閱代碼時很難注意到。

這條規則很有趣,因為Airbnb的規范中有一條與之不相同的規則

Google推薦下面這樣的寫法,而Airbnb則認為應該順其自然,不做特殊處理,該多長就多長。

// bad (建議在PC端閱讀)const longString = 'This is a very long string that /  far exceeds the 80 column limit. It unfortunately /  contains long stretches of spaces due to how the /  continued lines are indented.';// goodconst longString = 'This is a very long string that ' +   'far exceeds the 80 column limit. It does not contain ' +   'long stretches of spaces since the concatenated ' +  'strings are cleaner.';

優先使用for...of

在ES6中,有3種不同的for循環。盡管每一種有它的應用場景,但Google仍推薦使用for...of。

真有趣,Google居然會特別指定一種for循環。雖然這很奇怪,但不影響我接受這一觀點。

以前我認為for...in適合遍歷Object,而for...of適合遍歷數組。因為我喜歡這種各司其職的使用方式。

盡管Google的規范與這種使用方式相沖突,但Google對for...of的偏愛依然讓我覺得十分有趣。

不要使用eval語句

除非是在code loader中,否則不用使用eval或是Function(...string)結構。這個功能具有潛在的危險性,并且在CSP環境中無法起作用。

MDN中有一節專門提到不要使用eval語句。

// badlet obj = { a: 20, b: 30 };let propName = getPropName(); // returns "a" or "b"eval( 'var result = obj.' + propName );// goodlet obj = { a: 20, b: 30 };let propName = getPropName(); // returns "a" or "b"let result = obj[ propName ]; // obj[ "a" ] is the same as obj.a

常量的命名規范

常量命名應該使用全大寫格式,并用下劃線分割

如果你確定一定以及肯定一個變量值以后不會被修改,你可以將它的名稱使用全大寫模式改寫,暗示這是一個常量,請不要修改它的值。

遵守這條規則時需要注意的一點是,如果這個常量是一個函數,那么應該使用駝峰式命名法。

// badconst number = 5;// goodconst NUMBER = 5;

每次只聲明一個變量

每一個變量聲明都應該只對應著一個變量。不應該出現像let a = 1,b = 2;這樣的語句。

// badlet a = 1, b = 2, c = 3;// goodlet a = 1;let b = 2;let c = 3;

使用單引號

只允許使用單引號包裹普通字符串,禁止使用雙引號。如果字符串中包含單引號字符,應該使用模板字符串。

// badlet directive = "No identification of self or mission."// badlet saying = 'Say it ain/u0027t so.';// goodlet directive = 'No identification of self or mission.';// goodlet saying = `Say it ain't so`;

總結

就像我在開頭所說那樣,規范中沒有需要強制執行的命令。盡管Google是科技巨頭之一,但這份代碼規范也僅僅是用來當作參考罷了。

Google是一家人才匯聚的科技公司,雇傭著出色的程序員來編寫優秀的代碼。能夠看到這樣的公司發布的代碼規范是一件很有趣的事情。

如果你想要實現一種Google式的代碼,那么你可以在項目中制定這些規范。但你可能并不贊成這份代碼規范,這時也沒有人會阻攔你舍棄其中某些規則。

我個人認為在某些場景下,Airbnb的代碼規范比Google的代碼規范要出色。但不管你支持哪一種,也不管你編寫的是什么類型的代碼,最重要的是在腦海中時刻遵守著同一份代碼規范。

總結

以上所述是小編給大家介紹的關于Google發布的JavaScript代碼規范你要知道哪些,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩精品视频免费| 中文字幕av一区中文字幕天堂| 亚洲天堂成人在线视频| 久久精品免费播放| 国产日本欧美在线观看| 国产精品av免费在线观看| 热re91久久精品国99热蜜臀| 在线性视频日韩欧美| 亚洲国产精品人久久电影| 午夜精品久久久久久久99热| 国产精品久久久久9999| 粉嫩av一区二区三区免费野| 午夜精品视频在线| 亚洲国产精品一区二区久| 操人视频在线观看欧美| 久久精品国产亚洲一区二区| 成人性教育视频在线观看| 欧美日韩精品在线观看| 国产一区二区三区在线观看视频| 亚洲香蕉成人av网站在线观看| 亚洲中国色老太| 久久久伊人日本| 在线观看国产精品91| 色先锋久久影院av| 中文字幕少妇一区二区三区| 国产伦精品一区二区三区精品视频| 欧美在线视频在线播放完整版免费观看| 日韩免费在线免费观看| 亚洲风情亚aⅴ在线发布| 欧美精品videossex性护士| 亚洲天堂男人天堂女人天堂| 日本伊人精品一区二区三区介绍| 欧美电影在线观看网站| 91在线色戒在线| 日韩av网站大全| 欧美贵妇videos办公室| 日av在线播放中文不卡| 久久久亚洲福利精品午夜| 亚洲毛片在线免费观看| 亚洲第一福利在线观看| 色777狠狠综合秋免鲁丝| 成人免费黄色网| 亚洲欧美国产精品专区久久| 精品无人国产偷自产在线| 久久中文字幕视频| 国产精品久久久久秋霞鲁丝| 亚洲国产精品专区久久| 国产欧美一区二区三区视频| 亚洲人成在线免费观看| 一区二区三区国产在线观看| 亚洲xxxxx| 亚洲无亚洲人成网站77777| 国产在线拍揄自揄视频不卡99| 久久久精品久久| 欧美激情区在线播放| 久久久国产精品视频| 亚洲激情国产精品| 久久久久久久亚洲精品| 国产成人精品久久亚洲高清不卡| 97精品国产97久久久久久免费| 97欧美精品一区二区三区| 在线视频欧美日韩精品| 久久97精品久久久久久久不卡| 中文字幕精品久久久久| 成人黄色片在线| 欧美电影《睫毛膏》| 欧美性猛交xxxx乱大交3| 国产精品美乳在线观看| 中文字幕少妇一区二区三区| 国产一区二区三区丝袜| 97国产suv精品一区二区62| 日韩有码在线观看| 亚洲欧美日韩网| 97avcom| 日韩最新av在线| 不卡av日日日| 亚洲美女av在线| 欧美日韩综合视频网址| 欧美日韩免费观看中文| 欧美日韩美女在线| 亚洲精品成人av| 日韩一区二区av| 国产精品福利久久久| 亚洲欧美在线一区| 欧美精品videossex性护士| 亚洲自拍另类欧美丝袜| 亚洲男女自偷自拍图片另类| 日本高清不卡在线| 午夜精品久久久久久久白皮肤| 91精品国产高清| 91超碰caoporn97人人| 亚洲视频axxx| 国产亚洲精品一区二区| 色悠悠久久88| 欧美性xxxx| 亚洲天堂av在线播放| 色妞在线综合亚洲欧美| 国产日本欧美一区二区三区| 亚洲色图欧美制服丝袜另类第一页| 中文字幕在线观看日韩| 这里只有精品丝袜| 一级做a爰片久久毛片美女图片| 成人午夜高潮视频| 日韩精品在线免费观看视频| 亚洲一区二区三区乱码aⅴ蜜桃女| 国产精品爽黄69天堂a| 欧美精品亚州精品| 欧美成人一区在线| 另类专区欧美制服同性| 亚洲第一色中文字幕| 欧美日韩精品二区| 亚洲精品网站在线播放gif| 国产一区二区视频在线观看| 在线精品视频视频中文字幕| 精品久久久香蕉免费精品视频| 日韩精品视频在线观看网址| 亚洲国产美女精品久久久久∴| 日韩中文字幕精品视频| 日韩欧美中文字幕在线播放| 亚洲欧美国产精品久久久久久久| 亚洲国产三级网| 国产一区在线播放| 日本久久久a级免费| 国产日韩欧美黄色| 国产91精品久久久| 亚洲国产精久久久久久久| 日韩在线视频网站| 精品视频久久久久久久| 亚洲免费高清视频| 欧美专区福利在线| 日韩中文字幕免费看| 91九色综合久久| 日韩欧美黄色动漫| 久久久久999| 国产精品稀缺呦系列在线| 色综合亚洲精品激情狠狠| 欧美一区三区三区高中清蜜桃| 亚洲第一精品久久忘忧草社区| 日韩av不卡电影| 91亚洲国产成人久久精品网站| 欧美激情区在线播放| 97视频在线播放| 日韩精品视频在线观看免费| 夜夜狂射影院欧美极品| 欧美网站在线观看| 亚洲激情视频在线播放| 亚洲精品国产精品自产a区红杏吧| 17婷婷久久www| 这里只有视频精品| 91久久综合亚洲鲁鲁五月天| 欧美电影免费观看电视剧大全| 国产精品高潮呻吟视频| 国产一区二区久久精品| 97人洗澡人人免费公开视频碰碰碰| 亚洲精品自拍视频| 九九热在线精品视频| 久久久久成人网| 欧美极品少妇与黑人| 国产欧美日韩91| 一区国产精品视频| 91在线观看免费高清| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲午夜未满十八勿入免费观看全集| 日韩精品高清在线|