久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

淺談JavaScript編程語言的編碼規(guī)范

 vavava 2010-08-13

JavaScript 編程語言作為最流行的客戶端腳本語言,,深受Web開發(fā)人員愛戴,。JavaScript語法靈活,簡(jiǎn)單易懂,,對(duì)代碼的格式的要求也相對(duì)松散,。也正因?yàn)槿绱耍琂avaScript 的編碼規(guī)范也往往被輕視,,開發(fā)過程中修修補(bǔ)補(bǔ),,最終也就演變成為后續(xù)維護(hù)人員的惡夢(mèng)。為了此種惡夢(mèng)不再發(fā)生,,IBM高級(jí)軟件工程師王丹丹對(duì)JavaScript 編程語言的編碼規(guī)范進(jìn)行了總結(jié),,現(xiàn)轉(zhuǎn)載于此,供大家學(xué)習(xí),。全文如下:

對(duì)于熟悉C/C++或Java語言的工程師來說,,JavaScript顯得靈活,簡(jiǎn)單易懂,,對(duì)代碼的格式的要求也相對(duì)松散,。很容易學(xué)習(xí),并運(yùn)用到自己的代碼中。也正因?yàn)檫@樣,,JavaScript的編碼規(guī)范也往往被輕視,,開發(fā)過程中修修補(bǔ)補(bǔ),最終也就演變成為后續(xù)維護(hù)人員的惡夢(mèng),。軟件存在的長(zhǎng)期價(jià)值直接與編碼的質(zhì)量成比例,。編碼規(guī)范能幫助我們降低編程中不必要的麻煩。而 JavaScript代碼是直接發(fā)送給客戶瀏覽器的,,直接與客戶見面,,編碼的質(zhì)量更應(yīng)該受到關(guān)注。

本文淺談JavaScript編程中關(guān)于編碼規(guī)范的問題,,分析其中緣由,。希望引起更多Web 開發(fā)人員對(duì)JavaScript編碼規(guī)范問題的關(guān)注和對(duì)軟件產(chǎn)品質(zhì)量問題的重視。

前言

提及C/C++和Java編碼規(guī)范,,相信許多工程師并不生疏,。但說到 JavaScript 語言的編碼規(guī)范,也許您會(huì)忍俊不禁,。JavaScript 不是語法很靈活嗎,?變量隨時(shí)用隨時(shí)可以聲明;語句結(jié)束符可以不要,;字符串和數(shù)字也可以相加,;參數(shù)多一個(gè)少一個(gè)也不會(huì)報(bào)錯(cuò)。沒錯(cuò),,當(dāng)您從 C/C++ 和 Java 嚴(yán)格的語法規(guī)定之下,,轉(zhuǎn)向 JavaScript 語言,會(huì)覺得自由了很多,,輕松了很多,。語法松散是 JavaScript 重要的特征。它靈活易懂,,給開發(fā)人員帶來了很多方便,,但如果編寫過程中不注意,代碼的調(diào)試成本和維護(hù)成本則會(huì)無形地增加,。

JavaScript 編碼會(huì)隨應(yīng)被直接發(fā)送到客戶端的瀏覽器,,代碼規(guī)范不只是代碼質(zhì)量的保證,也影響到產(chǎn)品的長(zhǎng)期信譽(yù),。希望 JavaScript 編程語言的規(guī)范問題也能同樣引起更多朋友的關(guān)注,。

JavaScript 編碼規(guī)范建議

本文就JavaScript 編碼過程中涉及的排版、命名,、聲明,、作用域,、及一些特殊符號(hào)的使用等方面,根據(jù)個(gè)人在學(xué)習(xí)工作中的總結(jié),,給出自己的一些建議,,并分析其中緣由,以供參考,。

JavaScript 文件引用

JavaScript 程序應(yīng)該盡量放在 .js 的文件中,,需要調(diào)用的時(shí)候在 HTML 中以 <script src="filename.js"> 的形式包含進(jìn)來。JavaScript 代碼若不是該 HTML 文件所專用的,,則應(yīng)盡量避免在 HTML 文件中直接編寫 JavaScript 代碼,。因?yàn)檫@樣會(huì)大大增加 HTML 文件的大小,無益于代碼的壓縮和緩存的使用,。

另外,,<script src="filename.js"> 標(biāo)簽應(yīng)盡量放在文件的后面,。這樣會(huì)降低因加載 JavaScript 代碼而影響頁面中其它組件的加載時(shí)間,。

代碼排版

行長(zhǎng)度

每行代碼應(yīng)小于 80 個(gè)字符。如果代碼較長(zhǎng),,應(yīng)盡量選擇換行,,下一行代碼應(yīng)縮進(jìn) 8 個(gè)空格。這樣可以使代碼排版整齊,,減輕閱讀代碼的疲勞感,。換行縮進(jìn) 8 個(gè)空格可以和代碼段的縮進(jìn) 4 個(gè)空格區(qū)分開,以增強(qiáng)代碼的可閱讀性,。

行結(jié)束

JavaScript 語句應(yīng)該以分號(hào)結(jié)束,。但大多數(shù)瀏覽器允許不寫分號(hào),只要在本應(yīng)是分號(hào)的地方有一個(gè)換行符就行,。但是如果代碼行較長(zhǎng)需要換行的時(shí)候,,有哪些注意事項(xiàng)呢?換行應(yīng)選擇在操作符和標(biāo)點(diǎn)符號(hào)之后,,最好是在逗號(hào)','之后,,而不要在變量名、字符串,、數(shù)字,、或')' ']' '++' '--'等符號(hào)之后換行。

這樣可以有效的防止拷貝,、粘貼而引起的錯(cuò)誤,,并可有效地增強(qiáng)代碼的可閱讀性。請(qǐng)見清單 1,,代碼的輸出符合我們的期望,。但就寫法而言,,對(duì) valueB 的賦值語句是在變量 valueA 之后進(jìn)行的換行,這很容易被誤解為 valueB=ValueA,,給閱讀造成障礙,。而對(duì) valueC 的復(fù)制語句是在'+'之后進(jìn)行的換行,就容易理解的多,。這也是本文所提倡的換行方式,。

清單 1. 行結(jié)束的位置

  1. <script language="javascript">
  2. var valueA = 1;
  3. var valueB = valueA ///bad
  4. +1;
  5. var valueC = valueB + ///good
  6. valueA;
  7. alert(valueB); //output: valueB=2
  8. alert(valueC);//output: valueC=3
  9. </script>

縮進(jìn)

關(guān)于縮進(jìn)的問題,不只是 JavaScript,,幾乎所有的語言編寫的時(shí)候,,都會(huì)提及縮進(jìn)的問題??s進(jìn)幾乎是代碼編寫規(guī)范的第一課,,是代碼可閱讀性判斷的直接因素。

代碼縮進(jìn)的好處是不言而喻的,,但是對(duì)于如何縮進(jìn),,則沒有標(biāo)準(zhǔn)而言。最受歡迎的是方便使用 TAB 鍵縮進(jìn),,也有些喜歡用 2 個(gè),、4 個(gè)、8 個(gè)空格進(jìn)行縮進(jìn),。這樣縮進(jìn)風(fēng)格不一,,也同樣給代碼的閱讀帶來障礙。

本文提倡用 4 個(gè)空格來進(jìn)行縮進(jìn),,并在同一產(chǎn)品中采用同一種縮進(jìn)標(biāo)準(zhǔn),。不支持用 TAB 鍵進(jìn)行縮進(jìn)。這是因?yàn)橹钡浆F(xiàn)在還沒有統(tǒng)一的標(biāo)準(zhǔn)來定義 TAB 鍵所代替的空白大小,,有些編輯器解析為 4 個(gè)空格大小,,有些則解析為 8 個(gè)。因而用不同的編輯器查看代碼,,可能造成格式混亂,。當(dāng)然 TAB 簡(jiǎn)單易用,為解決這個(gè)問題,,建議在設(shè)置開發(fā)環(huán)境時(shí),,將編輯器里的 TAB 快捷鍵重新設(shè)置為 4 個(gè)空格。據(jù)了解 Eclipse, Vi, Nodepad++,,Editplus, UltraEdit 等流行的編輯器,,均提供了此功能。

注釋

代碼中的注釋很重要,,自然也是毋庸置疑的,。通常我們會(huì)強(qiáng)調(diào)代碼中注釋數(shù)量的多少,,而輕視了對(duì)注釋質(zhì)量的提高。編碼是及時(shí)添加注釋,,會(huì)給后續(xù)代碼的維護(hù)人員帶來很大的便利,。但是如果注釋不注意更新,或者由于拷貝,、粘貼引起的錯(cuò)誤的注釋,,則會(huì)誤導(dǎo)閱讀人員,反而給閱讀帶來障礙,。

除了注釋要 及時(shí)更新外,,我們還應(yīng)對(duì)注釋的內(nèi)容要特別關(guān)注。注釋要盡量簡(jiǎn)單,、清晰明了,,避免使用含混晦澀的語言,同時(shí)著重 注釋的意義,,對(duì)不太直觀的部分進(jìn)行注解,。請(qǐng)見清單 2。

清單 2. 有意義的注釋

  1. <script language="javascript">
  2. //following section is used to initialize golbal variables (good)
  3. var valueA = 0; //initialize valueA to be sero (bad)
  4. var valueB = 1;
  5. ...
  6. //call f1 function after waiting for 50 seconds. (good)
  7. setTimeout(f1,50000); //set timeout to be 20s (copy error)
  8. ...
  9. </script>

這樣的注釋方式在 JavaScript 代碼中經(jīng)常見到,。"initialize valueA to be sero" 這樣的注釋有什么用呢,?難道閱讀程序的工程師從"var valueA = 0;"復(fù)制語句中看不出來么,?"set timeout to be 20s"這條注釋,,不只是因拷貝、粘貼引起的時(shí)間大小的錯(cuò)誤,,同時(shí)也誤導(dǎo)了程序員對(duì)這條語句的理解,。setTimeout() 函數(shù)的作用并非是設(shè)置函數(shù)執(zhí)行的超時(shí)時(shí)間,而是等待一定時(shí)間后執(zhí)行所調(diào)用的函數(shù),,害人匪淺呀,。這樣的注釋內(nèi)容寧可刪掉。

此外,,JavaScript 的注釋有兩種"http://" 和"/* .... */",,建議"http://"用作代碼行注釋,"/* .... */"形式用作對(duì)整個(gè)代碼段的注銷,,或較正式的聲明中,,如函數(shù)參數(shù)、功能,、文件功能等的描述中,。

標(biāo)識(shí)符命名

JavaScript 中的標(biāo)識(shí)符的命名規(guī)則:

• 以字母、下劃線'_'或美元符號(hào)'$'開頭

• 允許名稱中包含字母,,數(shù)字,,下劃線'_'和美元符號(hào)'$'

• 區(qū)分大小寫

變量,、參數(shù)、成員變量,、函數(shù)等名稱均以小寫字母開頭,構(gòu)造器的名稱以大寫字母開頭,。下劃線'_'開頭的變量一般習(xí)慣于標(biāo)識(shí)私有 / 局部成員,。而美元符號(hào)'$'開頭的變量習(xí)慣于標(biāo)識(shí)系統(tǒng)相關(guān),比如系統(tǒng)進(jìn)程等,。應(yīng)避免用下劃線'_'或美元符號(hào)'$'來命名標(biāo)識(shí)符,。盡可能地降低代碼的閱讀負(fù)擔(dān)。

聲明

變量的聲明

盡管 JavaScript 語言并不要求在變量使用前先對(duì)變量進(jìn)行聲明,。但我們還是應(yīng)該養(yǎng)成這個(gè)好習(xí)慣。這樣可以比較容易的檢測(cè)出那些未經(jīng)聲明的變量,,避免其變?yōu)殡[藏的全局變量,,造成隱患,。

在函數(shù)的開始應(yīng)先用 var 關(guān)鍵字聲明函數(shù)中要使用的局部變量,,注釋變量的功能及代表的含義,且應(yīng)以字母順序排序,。每個(gè)變量單獨(dú)占一行,以便添加注釋,。這是因?yàn)?JavaScript 中只有函數(shù)的 {} 表明作用域,,用 var 關(guān)鍵字聲明的局部變量只在函數(shù)內(nèi)有效,而未經(jīng) var 聲明的變量則被視為全局變量,。我們來看下清單 3,。

清單 3. 局部變量聲明

  1. <script language="javascript">
  2. var valueA = "a";
  3. var valueB = "b";
  4. function f1() {
  5. var valueA = "c";
  6. alert("valueA="+valueA); //output: valueA=c
  7. valueB = "d";
  8. alert("valueB="+valueB); //output: valueB=d
  9. }
  10. f1();
  11. alert("valueA="+valueA); //output: valueA=a
  12. alert("valueB="+valueB); //output: valueB=d
  13. </script>

從上例的輸出驚奇地發(fā)現(xiàn),用 var 聲明過的變量 valueA 和沒有聲明的變量 valueB 是有區(qū)別的,。特別需要注意的是,在函數(shù)內(nèi)部用 var 聲明的變量為局部變量,,這樣可以有效地避免因局部變量和全局變量同名而產(chǎn)生的錯(cuò)誤,。

函數(shù)的聲明

函數(shù)也應(yīng)在調(diào)用前進(jìn)行聲明,內(nèi)部函數(shù)應(yīng)在 var 聲明內(nèi)部變量的語句之后聲明,,可以清晰地表明內(nèi)部變量和內(nèi)部函數(shù)的作用域,。

此外,,函數(shù)名緊接左括號(hào)'('之間,而右括號(hào)')'和后面的'{'之間要有個(gè)空格,,以清楚地顯示函數(shù)名以其參數(shù)部分,,和函數(shù)體的開始。若函數(shù)為匿名 / 無名函數(shù),,則 function 關(guān)鍵字和左括號(hào)'('之間要留空格,,否則可能誤認(rèn)為該函數(shù)的函數(shù)名為 function。

清單 4. 內(nèi)部函數(shù)聲明

  1. <script language="javascript">
  2. var innerA = 1;
  3. function outF() {
  4. var innerA = 2;
  5. function _inF() {
  6. alert("valueA="+innerA);
  7. }
  8. _inF();
  9. }
  10. outF(); //output: valueA=2
  11. _inF(); //error: innerF is not defined
  12. </script>

從清單 4 的輸出可以看出,,inF() 函數(shù)僅在 outF() 函數(shù)的內(nèi)部生效,,局部變量 innerA 對(duì)內(nèi)部函數(shù)的作用域生效。這樣的編碼方式使得變量和函數(shù)的作用域變得清晰,。

語句

對(duì)于簡(jiǎn)單語句而言,,需要提及的仍然是分號(hào)必要性,同時(shí),,一行最多有一個(gè)語句,。如果一個(gè)賦值語句是用函數(shù)和對(duì)象來賦值,可能需要跨多行,,一定切記要在賦值語句末加上分號(hào),。

這是因?yàn)?JavaScript 中,所有表達(dá)式都可以當(dāng)語句,,遇換行符時(shí)會(huì)解析為表達(dá)式的結(jié)束,,此時(shí)不規(guī)范的換行和分號(hào)的丟失,可能引入新的錯(cuò)誤,。

對(duì)于復(fù)合語句,,if, for, while, do, switch, try … catch 等代碼體,函數(shù)定義的函數(shù)體,,對(duì)象的定義等都需要放在花括號(hào)'{}'里面。

• '{' 應(yīng)在行末,,標(biāo)志代碼塊的開始,。

• '}' 應(yīng)在一行開頭,標(biāo)志代碼塊的結(jié)束,,同時(shí)需要和'{'所在行的開始對(duì)齊,,以表明一個(gè)完整的復(fù)合語句段。這樣可以極大地提高代碼的可閱讀性,,控制邏輯能清晰地表現(xiàn)出來,。

• 被包含的代碼段應(yīng)該再縮進(jìn) 4 個(gè)空格。

• 即使被包含的代碼段只有一句,,也應(yīng)該用花括號(hào)'{}'包含,。盡管不用花括號(hào)代碼也不會(huì)錯(cuò),,但如若需要增加語句的話,則較容易因花括號(hào)遺漏而引起的編譯錯(cuò)誤或邏輯錯(cuò)誤,。

return語句在使用時(shí)也需慎重,,如果用表達(dá)式的執(zhí)行作為返回值,請(qǐng)把表達(dá)式和 return 放在同一行中,,以免換行符被誤解析為語句的結(jié)束而引起返回錯(cuò)誤,。return 關(guān)鍵字后若沒有返回表達(dá)式,則返回 undefined,。構(gòu)造器的默認(rèn)返回值為 this,。

清單 5. return 表達(dá)式

  1. <script language="javascript">
  2. function F1() {
  3. var valueA = 1;
  4. var valueB = 2;
  5. return valueA + valueB;
  6. }
  7. function F2() {
  8. var valueA = 1;
  9. var valueB = 2;
  10. return
  11. valueA + valueB;
  12. }
  13. alert( F1() ); //output: 3
  14. alert( F2() ); //ouput: undefined
  15. </script>

在清單 5 中顯示了因返回表達(dá)式?jīng)]有和 return 關(guān)鍵字放在同一行而引起的返回錯(cuò)誤,需重視,。

特殊符號(hào)

空白符

適當(dāng)?shù)目瞻仔锌梢源蟠筇岣叽a的可閱讀性,,可以使代碼邏輯更清晰易懂。同時(shí),,在表達(dá)式中適當(dāng)?shù)牧艨瞻?,也?huì)給代碼的閱讀帶來方便。

關(guān)鍵字的后面如有括號(hào),,則最好在關(guān)鍵字和左括號(hào)'('之間留空白,,如 for, if, while 等。而函數(shù)名和括號(hào)之間則不宜留空白,,但若是匿名函數(shù),,則必須在 function 和左括號(hào)'('之間留空白,否則,,編輯器會(huì)誤認(rèn)為函數(shù)名為 function,。

在表達(dá)式中,二元運(yùn)算符 ( 除左括號(hào)'(',,左方括號(hào)'[',,作用域點(diǎn)'.') 和兩個(gè)操作數(shù)之間最好留空白。一元運(yùn)算符(若不是詞 typeof 等)和其操作數(shù)之間不宜留空白,。

逗號(hào)','的后面需要留空白,,以顯示明確的參數(shù)間隔,變量間隔等,。

分號(hào)';'之后通常表明表達(dá)語句的結(jié)束,,而應(yīng)空行。在 for 的條件語句中,,分號(hào)之后則應(yīng)該留空白,。

{ } 和 [ ]

在 JavaScript 中,如需定義空對(duì)象和空數(shù)組,通常很自然地想到用 new Object() 和 new Array() 的方法,。其實(shí)花括號(hào)'{}'和方括號(hào)'[]'可以直接用來定義一個(gè)空對(duì)象和一個(gè)空數(shù)組,。這種書寫方法可以使代碼看起來簡(jiǎn)單易懂。

== 和 ===

判斷"邏輯等"在代碼里太平常的不過事情了,,但 JavaScript 與其他熟知的編程語言不同的是,,除了可以使用兩個(gè)等號(hào)'=='來作判斷以為,還可以使用三個(gè)等號(hào)'==='來進(jìn)行邏輯等判斷,。兩者的不同是'=='作邏輯等判斷時(shí),,會(huì)先進(jìn)行類型轉(zhuǎn)換后再進(jìn)行比較。'==='則不會(huì),。因而,,'=='進(jìn)行的判斷結(jié)果可能產(chǎn)生偏差。'!='與'!=='的區(qū)別亦是如此,。本文提倡盡量使用'==='來進(jìn)行邏輯等的判斷,,用'!=='進(jìn)行邏輯不等的判斷。

清單 6. === 的使用

  1. <script language="javascript">
  2. var valueA = "1";
  3. var valueB = 1;
  4. if ( valueA == valueB) {
  5. alert("Equal");
  6. }
  7. else {
  8. alert("Not equal")
  9. }
  10. //output: "Equal"
  11. if ( valueA === valueB) {
  12. alert("Equal");
  13. }
  14. else {
  15. alert("Not equal")
  16. }
  17. //output: "Not equal"
  18. </script>

清單 6 中,,valueA 和 valueB 兩個(gè)變量的值顯然是不相等的,,起碼 valueA 是個(gè)字符串,而 valueB 是一個(gè)數(shù)字,。但用'=='進(jìn)行判斷是,,程序卻輸出相等的字樣。這是因?yàn)榫幾g器對(duì)兩個(gè)變量進(jìn)行比較時(shí),,因?yàn)樗麄兊念愋筒煌?,而自?dòng)地將 valueB 轉(zhuǎn)換成字符串,而后再和 valueA 進(jìn)行比較的,。用'==='得到的判斷結(jié)果正和預(yù)期的結(jié)果相符,。

+

加號(hào)'+'也同樣是程序員所熟知的操作符之一。JavaScript 和其他編程語言不同的是,,在 JavaScript 中,,'+'除了表示數(shù)字值相加,字符串相連接以外,,還可以作一元運(yùn)算符用,,把字符串轉(zhuǎn)換為數(shù)字。因而如果使用不當(dāng),,則可能與自增符'++'混淆而引起計(jì)算錯(cuò)誤。這一點(diǎn),,在清單 7 中可以清楚地看出,。

清單 7. 巧用 + 號(hào)

  1. <script language="javascript">
  2. var valueA = 20;
  3. var valueB = "10";
  4. alert( valueA + valueB); //ouput: 2010
  5. alert( valueA + (+valueB)); //output: 30
  6. alert( valueA + +valueB); //output:30
  7. alert( valueA ++valueB); //Compile error
  8. </script>

總結(jié)

本文就 JavaScript 代碼的排版、命名,、聲明,、語句,、和一些特殊字符的使用等方面,談了自己對(duì) JavaScript 編程規(guī)范的建議,。此外,,還有許多方面需要深入了解研究,如 with, eval 語句和 this 對(duì)象的使用等等,。我們?cè)谡J(rèn)識(shí)其普遍性的同時(shí)也需要注意其特殊性,,在編寫代碼時(shí)多用心留意,以創(chuàng)造更多更優(yōu)質(zhì)的程序代碼,。

作者簡(jiǎn)介

王丹丹,,IBM 中國系統(tǒng)與技術(shù)中心軟件工程師,自從 2006 年加入IBM,,一直從事 Web 系統(tǒng)設(shè)計(jì)和開發(fā)工作,,有五年 PHP 應(yīng)用程序設(shè)計(jì)開發(fā)經(jīng)驗(yàn)。

原文鏈接:http://www.ibm.com/developerworks/cn/web/1008_wangdd_jscodingrule/?ca=drs-tp4608

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多