自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

從谷歌的JavaScript編寫風(fēng)格中,13 點(diǎn)值得我們注意的!

開發(fā) 前端
對(duì)于那些還不熟悉JavaScript的編寫風(fēng)格的人,谷歌提供了編寫JavaScript的編寫風(fēng)格指南,谷歌風(fēng)格指南 其中列出了編寫干凈、可理解代碼的最佳風(fēng)格實(shí)踐。

 

對(duì)于那些還不熟悉JavaScript的編寫風(fēng)格的人,谷歌提供了編寫JavaScript的編寫風(fēng)格指南,谷歌風(fēng)格指南 其中列出了編寫干凈、可理解代碼的***風(fēng)格實(shí)踐。

對(duì)于編寫有效的JavaScript來說,這些并不是硬性的、快速的規(guī)則,而只是在源文件中維護(hù)一致的、吸引人的樣式選擇的規(guī)則。這對(duì)于JavaScript來說尤其有趣,它是一種靈活且多變的語(yǔ)言,允許多種風(fēng)格的選擇。

谷歌和Airbnb有兩個(gè)***的編寫風(fēng)格指南。如果我的工作是花費(fèi)大量時(shí)間編寫JS,那么可以先學(xué)習(xí)這兩種方法。

以下是谷歌JS風(fēng)格指南中我認(rèn)為最有趣和相關(guān)的13條規(guī)則:

谷歌JS風(fēng)格指南處理各種各樣的問題,從激烈爭(zhēng)論的問題(制表符與空格的比較,以及分號(hào)應(yīng)該如何使用這個(gè)有爭(zhēng)議的問題),到一些更模糊的規(guī)范,這些規(guī)范令我吃驚,它們肯定會(huì)改變我以后寫JS的方式。

對(duì)于每個(gè)規(guī)則,我將對(duì)規(guī)范進(jìn)行總結(jié),然后引用樣式指南中的支持部分,詳細(xì)描述該規(guī)則。在適用的情況下,我還將提供實(shí)踐中的樣式示例,并將其與不遵循規(guī)則的代碼進(jìn)行對(duì)比。

使用空格,而不是制表符

除了行結(jié)束符序列之外,ASCII水平空格字符(0x20)是源文件中出現(xiàn)在任何位置的惟一空格字符。這意味著…制表符不用于縮進(jìn)

使用兩個(gè)空格(而不是四個(gè))進(jìn)行縮進(jìn) 

  1. // bad  

  2. function foo() {  

  3. ∙∙∙∙let name;  

  4.  

  5. // bad  

  6. function bar() {  

  7. ∙let name;  

  8.  

  9. // good  

  10. function baz() {  

  11. ∙∙let name;  

分號(hào)是必需的

每個(gè)語(yǔ)句必須以分號(hào)結(jié)束,禁止依靠自動(dòng)分號(hào)插入。

雖然無法想象為什么會(huì)有人反對(duì)這個(gè)想法,但JS中分號(hào)的一致使用正在成為新的“空格對(duì)制表符”的爭(zhēng)論。谷歌一慣建議結(jié)束需要使用分號(hào)。 

  1. // bad  

  2. let luke = {}  

  3. let leia = {}  

  4. [luke, leia].forEach(jedi => jedi.father = 'vader' 

  5. // good  

  6. let luke = {};  

  7. let leia = {};  

  8. [luke, leia].forEach((jedi) => {  

  9.   jedi.father = 'vader' 

  10. }); 

不要使用ES6模塊

不要使用ES6模塊(即導(dǎo)出和導(dǎo)入關(guān)鍵字),因?yàn)樗鼈兊恼Z(yǔ)義還沒有最終確定。注意,一旦語(yǔ)義完全標(biāo)準(zhǔn),將重新定義使用的方式。 

  1. // 先別做這種事  

  2. //------ lib.js ------  

  3. export function square(x) {  

  4.     return x * x;  

  5.  

  6. export function diag(x, y) {  

  7.     return sqrt(square(x) + square(y));  

  8.  

  9. //------ main.js ------  

  10. import { square, diag } from 'lib'; 

不鼓勵(lì)(但不禁止)水平對(duì)齊

這種做法是允許的,但谷歌編寫風(fēng)格通常不鼓勵(lì)這樣做,甚至不需要在已經(jīng)使用它的地方保持水平對(duì)齊。

水平對(duì)齊是在代碼中添加可變數(shù)量的額外空格,以使某行變量的值與前面變量值對(duì)齊。 

  1. // bad  

  2.  

  3.   tiny:   42,    

  4.   longer: 435,   

  5. };  

  6. // good  

  7.  

  8.   tiny: 42,   

  9.   longer: 435,  

  10. }; 

不要再使用var了

使用const或let聲明所有本地變量來代替 var。默認(rèn)情況下使用 const,除非需要重新分配變量在使用 let 聲明。 

  1. // bad  

  2. var example = 42 

  3. // good  

  4. let example = 42

箭頭函數(shù)是***

箭頭函數(shù)提供了簡(jiǎn)潔的語(yǔ)法,并解決了this 在函數(shù)中不確定性的一些問題,與function關(guān)鍵字相比,更喜歡箭頭函數(shù),特別是對(duì)于嵌套函數(shù)。

老實(shí)說,我只是覺得箭頭函數(shù)很棒因?yàn)樗鼈兏?jiǎn)潔,更美觀。事實(shí)證明,它們還有一個(gè)非常重要的用途。 

  1. // bad  

  2. [1, 2, 3].map(function (x) {  

  3.   const y = x + 1;  

  4.   return x * y;  

  5. });  

  6. // good  

  7. [1, 2, 3].map((x) => {  

  8.   const y = x + 1;  

  9.   return x * y;  

  10. }); 

使用模板字符串而不是拼接客串

在復(fù)雜的字符串連接上使用模板字符串(用`分隔),特別是在涉及多個(gè)字符串文本時(shí),模板字符串可以跨越多行。 

  1. // bad  

  2. function sayHi(name) {  

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

  4.  

  5. // bad  

  6. function sayHi(name) {  

  7.   return ['How are you, ', name, '?'].join();  

  8.  

  9. // bad  

  10. function sayHi(name) {  

  11.   return `How are you, ${ name }?`;  

  12.  

  13. // good  

  14. function sayHi(name) {  

  15.   return `How are you, ${name}?`;  

不要對(duì)長(zhǎng)字符串使用 \ 來表示連續(xù)

不要在普通或模板字符串文字中使用連續(xù)行(也就是說,在字符串文字中以反斜杠結(jié)束一行)。盡管ES5允許這樣做,但是如果斜杠后面有任何尾隨空格,那么可能會(huì)導(dǎo)致一些棘手的錯(cuò)誤,而且對(duì)讀者來說不太明顯。

有趣的是,谷歌和Airbnb不同意這個(gè)規(guī)則(這是Airbnb的規(guī)范)。

雖然谷歌建議連接更長(zhǎng)的字符串(如下所示),Airbnb的風(fēng)格指南基本上建議什么也不做,并允許長(zhǎng)字符串繼續(xù),只要他們需要。 

  1. // bad (sorry, this doesn't show up well on mobile)  

  2. const longString = 'This is a very long string that \  

  3.     far exceeds the 80 column limit. It unfortunately \  

  4.     contains long stretches of spaces due to how the \  

  5.     continued lines are indented.';  

  6.  

  7. // good  

  8. const longString = 'This is a very long string that ' +   

  9.     'far exceeds the 80 column limit. It does not contain ' +   

  10.     'long stretches of spaces since the concatenated ' +  

  11.     'strings are cleaner.'; 

for…of是for循環(huán)的***類型

使用ES6,該語(yǔ)言現(xiàn)在有三種不同的for循環(huán)。所有的循環(huán)都可以使用,但是如果可能的話,for-of循環(huán)應(yīng)該是***的。

如果您問我,這是一個(gè)奇怪的問題,但是我認(rèn)為我應(yīng)該包含它,因?yàn)楣雀杪暶髁艘环N***的for循環(huán)類型,這非常有趣。

我總覺得 for...in 循環(huán)對(duì)于對(duì)象更好,而對(duì)于for...of 的更適合數(shù)組,不同場(chǎng)景可以使用不同方式。

雖然這里的Google規(guī)范不一定與這個(gè)想法相矛盾,但是了解他們特別喜歡這個(gè)循環(huán)還是很有趣的。

不要使用eval()

不要使用eval或function(…string)構(gòu)造函數(shù)(代碼加載器除外)。這些特性具有潛在的危險(xiǎn),而且在CSP環(huán)境中根本不起作用

MDN 頁(yè)面的eval()中,甚至有一個(gè)名為“不要使用eval!” 

  1. // bad  

  2. let obj = { a: 20, b: 30 };  

  3. let propName = getPropName();  // returns "a" or "b"  

  4. eval( 'var result = obj.' + propName );  

  5. // good  

  6. let obj = { a: 20, b: 30 };  

  7. let propName = getPropName();  // returns "a" or "b"  

  8. let result = obj[ propName ];  //  obj[ "a" ] is the same as obj.a 

常量應(yīng)該用全大寫字母命名,用下劃線分隔

常量名稱使用CONSTANT_CASE的格式:所有大寫字母,單詞由下劃線分隔。

如果您絕對(duì)確信某個(gè)變量不應(yīng)該更改,那么可以通過將該常量的名稱大寫來表示。這使得在整個(gè)代碼中使用該常量時(shí),它的不變性非常明顯。

一個(gè)值得注意的例外是,如果常量是函數(shù)作用域的。在這種情況下,應(yīng)該用camelCase來寫。 

  1. // bad  

  2. const number = 5 

  3. // good  

  4. const NUMBER = 5

每次聲明一個(gè)變量

每個(gè)局部變量聲明只聲明一個(gè)變量:聲明如令a = 1, b = 2,不推薦。 

  1. // bad  

  2. let a = 1b = 2c = 3 

  3. // good  

  4. let a = 1 

  5. let b = 2 

  6. let c = 3

使用單引號(hào),而不是雙引號(hào)

普通的字符串用單引號(hào)(')分隔,而不是雙引號(hào)(")。

提示:如果字符串包含單引號(hào)字符,可以考慮使用模板字符串來避免轉(zhuǎn)義引號(hào)。 

  1. // bad  

  2. let directive = "No identification of self or mission."  

  3. // bad  

  4. let saying = 'Say it ain\u0027t so.' 

  5. // good  

  6. let directive = 'No identification of self or mission.' 

  7. // good  

  8. let saying = `Say it ain't so`; 

***一個(gè)注意

正如我在開始時(shí)所說,這些不是強(qiáng)制要求。谷歌只是眾多科技巨頭之一,這些只是推薦。

也就是說,看看谷歌這樣的公司提出的風(fēng)格建議是很有趣的,這家公司雇傭了很多才華橫溢的人,他們花了很多時(shí)間編寫優(yōu)秀的代碼。

如果你想要遵循“符合谷歌的源代碼”的指導(dǎo)原則,那么你可以遵循這些規(guī)則—但是,當(dāng)然,許多人不同意這些規(guī)則,你可以隨意忽略這些規(guī)則中的任何一個(gè)或所有規(guī)則。

我個(gè)人認(rèn)為在很多情況下Airbnb的規(guī)范比谷歌更有吸引力。無論您對(duì)這些特定的規(guī)則采取何種立場(chǎng),在編寫任何類型的代碼時(shí),始終牢記風(fēng)格一致性仍然很重要。 

責(zé)任編輯:龐桂玉 來源: segmentfault
相關(guān)推薦

2011-10-09 10:43:00

2019-07-19 10:08:49

iOS應(yīng)用系統(tǒng)

2012-05-28 09:34:33

Linux Mint UbuntOS

2011-03-15 13:45:49

JavaScript后續(xù)傳遞

2015-10-08 09:25:05

比特幣存儲(chǔ)開源

2010-05-20 17:31:17

MySQL數(shù)據(jù)庫(kù)

2013-04-26 13:42:17

游戲

2021-04-02 12:37:53

RestfulAPI接口架構(gòu)

2009-02-01 14:34:26

PythonUnix管道風(fēng)格

2010-07-21 16:28:33

職場(chǎng)

2021-06-28 13:20:15

谷歌AI芯片

2017-07-27 16:31:11

2020-11-11 18:56:32

工具代碼開發(fā)

2024-12-19 07:51:50

NacosAPI 接口三方調(diào)用

2014-05-16 10:04:19

JavaScriptthis原理

2024-02-19 00:12:00

模型數(shù)據(jù)

2010-07-08 17:33:21

SQL Server數(shù)

2010-04-29 12:32:30

Unix服務(wù)器

2017-03-21 10:02:12

Docker鏡像分層

2010-08-31 16:39:56

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)