欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript 程序編碼規(guī)范

 更新時間:2010年11月23日 21:41:01   作者:  
這是一套適用于JavaScript程序的編碼規(guī)范。它基于Sun的Java程序編碼規(guī)范。但進(jìn)行了大幅度的修改, 因?yàn)镴avaScript不是Java。

軟件的長期價值直接源于其編碼質(zhì)量。在它的整個生命周期里,一個程序可能會被許多人閱讀或修改。如果一個程序可以清晰的展現(xiàn)出它的結(jié)構(gòu)和特征,那就能減少在以后對其進(jìn)行修改時出錯的可能性。編程規(guī)范可以幫助程序員們增加程序的健壯性。

所有的JavaScript代碼都是暴露給公眾的。所以我們更應(yīng)該保證其質(zhì)量。保持整潔很重要。

JavaScript文件

JavaScript程序應(yīng)獨(dú)立保存在后綴名為.js的文件中。

JavaScript代碼不應(yīng)該被包含在HTML文件中,除非這是段特定只屬于此部分的代碼。在HTML中的JavaScript代碼會明顯增加文件大小,而且也不能對其進(jìn)行緩存和壓縮。

filename.js 應(yīng)盡量放到body的后面。這樣可以減少因?yàn)檩d入script而造成其他頁面內(nèi)容載入也被延遲的問題。也沒有必要使用 language或者type屬性。MIME類型是由服務(wù)器而非scripttag來決定的。

縮進(jìn)

縮進(jìn)的單位為四個空格。避免使用Tab鍵來縮進(jìn)(即使現(xiàn)在已經(jīng)是21世紀(jì)了),也始終沒有個統(tǒng)一的Tab長短標(biāo)準(zhǔn)。雖然使用空格會增加文件的大小,但在局域網(wǎng)中幾乎可以忽略,且在 最小化過程中也可被消除掉。

每行長度

避免每行超過80個字符。當(dāng)一條語句一行寫不下時,請考慮折行。在運(yùn)算符號,最好是逗號后換行。在運(yùn)算符后換行可以減少因?yàn)閺?fù)制粘貼產(chǎn)生的錯誤被分號掩蓋的幾率。下一行應(yīng)該縮進(jìn)8個空格。

注釋

不要吝嗇注釋。給以后需要理解你的代碼的人們(或許就是你自己)留下信息是非常有用的。注釋應(yīng)該和它們所注釋的代碼一樣是書寫良好且清晰明了。偶爾的小幽默就更不錯了。記得要避免冗長或者情緒化。

及時地更新注釋也很重要。錯誤的注釋會讓程序更加難以閱讀和理解。

讓注釋有意義。重點(diǎn)在解釋那些不容易立即明白的邏輯上。不要把讀者的時間浪費(fèi)在閱讀類似于:

  i = 0; //讓i等于0

使用單行注釋。塊注釋用于注釋正式文檔和無用代碼。

變量聲明

所有的變量必須在使用前進(jìn)行聲明。JavaScript并不強(qiáng)制必須這么做,但是這么做可以讓程序易于閱讀,且也容易發(fā)現(xiàn)那些沒聲明的變量(它們會被編譯成全局變量)。

將var語句放在函數(shù)的首部

最好把每個變量的聲明語句單獨(dú)放到一行,并加上注釋說明。所有變量按照字母排序。

  var currentEntry; // 當(dāng)前選擇項(xiàng)    var level;    // 縮進(jìn)程度    var size;     // 表格大小

JavaScript沒有塊范圍,所以在塊里面定義變量很容易引起C/C++/Java程序員們的誤解。在函數(shù)的首部定義所有的變量。

盡量減少全局變量的使用。不要讓局部變量覆蓋全局變量。

函數(shù)聲明

所有的函數(shù)在使用前進(jìn)行聲明。 內(nèi)函數(shù)的聲明跟在var語句的后面。這樣可以幫助判斷哪些變量是在函數(shù)范圍內(nèi)的。

函數(shù)名與((左括號)之間不應(yīng)該有空格。) (右括號)與 開始程序體的{(左大括號)之間應(yīng)插入一個空格。函數(shù)程序體應(yīng)縮進(jìn)四個空格。 }(右大括號)與聲明函數(shù)的那一行代碼頭部對齊。

  function outer(c, d) {    var e = c * d;    function inner(a, b) {      return (e * a) + b;    }    return inner(0, 1);  }

下面這種書寫方式可以在JavaScript中正常使用,因?yàn)樵贘avaScript中,函數(shù)和對象的聲明可以放到任何表達(dá)式允許的地方。且它讓內(nèi)聯(lián)函數(shù)和混合結(jié)構(gòu)具有最好的可讀性。

  function getElementsByClassName(className) {    var results = [];    walkTheDOM(document.body, function (node) {      var a;         // 類名數(shù)組      var c = node.className; // 節(jié)點(diǎn)的類名      var i;         // 循環(huán)計數(shù)器// If the node has a class name, then split it into a list of simple names.// If any of them match the requested name, then append the node to the set of results.      if (c) {        a = c.split(' ');        for (i = 0; i < a.length; i += 1) {          if (a[i] === className) {            results.push(node);            break;          }        }      }    });    return results;  }

如果函數(shù)是匿名函數(shù),則在function和((左括號)之間應(yīng)有一個空格。如果省略了空格,否則會讓人感覺函數(shù)名叫作 function。

  div.onclick = function (e) {    return false;  };  that = {    method: function () {      return this.datum;    },    datum: 0  };

盡量不使用全局函數(shù)。

命名

變量名應(yīng)由26個大小寫字母(A..Z,a..z),10個數(shù)字( 0..9),和_(下劃線)組成。避免使用國際化字符(如中文),因?yàn)樗鼈儾皇窃谌魏蔚胤蕉伎梢员环奖愕拈喿x和理解。不要在命名中使用 $(美元符號)或者(反斜杠)。

不要把_(下劃線)作為變量名的第一個字符。它有時用來表示私有變量,但實(shí)際上JavaScript并沒提供私有變量的功能。如果私有變量很重要, 那么使用私有成員的形式。應(yīng)避免使用這種容易讓人誤解的命名習(xí)慣。

大多數(shù)的變量名和方法命應(yīng)以小寫字母開頭。

必須與 new共同使用的構(gòu)造函數(shù)名應(yīng)以大寫字母開頭。當(dāng)new被省略時JavaScript不會有任何編譯錯誤或運(yùn)行錯誤拋出。忘記加 new時會讓不好的事情發(fā)生(比如被當(dāng)成一般的函數(shù)),所以大寫構(gòu)造函數(shù)名是我們來盡量避免這種情況發(fā)生的唯一辦法。

全局變量應(yīng)該全部大寫。(JavaScript沒有宏或者常量,所以不會因此造成誤會)

語句

簡單語句

每一行最多只包含一條語句。把;(分號)放到每條簡單語句的結(jié)尾處。注意一個函數(shù)賦值或?qū)ο筚x值語句也是賦值語句,應(yīng)該以分號結(jié)尾。

JavaScript可以把任何表達(dá)式當(dāng)作一條語句。這很容易隱藏一些錯誤,特別是誤加分號的錯誤。只有在賦值和調(diào)用時,表達(dá)式才應(yīng)被當(dāng)作一條單獨(dú)的語句。

復(fù)合語句

復(fù)合語句是被包含在{ }(大括號)的語句序列。

  • * 被括起的語句必須多縮進(jìn)四個空格。
  • * {(左大括號)應(yīng)在復(fù)合語句其實(shí)行的結(jié)尾處。
  • * }(右大括號)應(yīng)與{(左大括號)的那一行的開頭對齊
  • * 大括號應(yīng)該在所有復(fù)合語句中使用,即使只有一條語句,當(dāng)它們是控制結(jié)構(gòu)的一部分時, 比如一個if或者for語句。這樣做可以避免以后添加語句時造成的錯誤。

標(biāo)示

語句標(biāo)示是可選的,只有以下語句必須被標(biāo)示:while, do,for,switch。

return 語句

一條有返回值的return語句不要使用( )(括號)來括住返回值。如果返回表達(dá)式,則表達(dá)式應(yīng)與return 關(guān)鍵字在同一行,以避免誤加分號錯誤。

if 語句

if語句應(yīng)如以下格式:

  if (condition){    statements;  }    if (condition) {    statements;  } else {    statements;  }    if (condition) {    statements;  } else if (condition) {    statements;  } else {    statements;  }

for 語句

for語句應(yīng)如以下格式:

  for (initialization;condition ; update) {    statements;  }  for (variable in object)if (filter) {    statements;  }

第一種形式的循環(huán)用于已經(jīng)知道相關(guān)參數(shù)的數(shù)組循環(huán)。

第二種形式應(yīng)用于對象中。object原型中的成員將會被包含在迭代器中。通過預(yù)先定義hasOwnProperty方法來區(qū)分真正的 object成員是個不錯方法:

  for (variablein object) if (object.hasOwnProperty(variable )){    statements;  }

while 語句

while語句應(yīng)如以下格式:

  while (condition){    statements;  }

do 語句

do語句應(yīng)如以下格式:

  do {    statements;  } while (condition);

不像別的復(fù)合語句,do語句總是以;(分號)結(jié)尾。

switch 語句

switch語句應(yīng)如以下格式:

  switch (expression){  case expression:    statements;  default:    statements;  }

每個 case與switch對齊。這可避免過分縮進(jìn)。

每一組statements(除了default應(yīng)以 break,return,或者throw結(jié)尾。不要讓它順次往下執(zhí)行。

try 語句

try語句應(yīng)如以下格式:

  try {    statements;  } catch (variable){    statements;  }  try {    statements;  } catch (variable){    statements;  } finally {    statements;  }

continue 語句

避免使用continue語句。它很容易使得程序的邏輯過程晦澀難懂。

with 語句

不要使用with語句。

空白

用空行來將邏輯相關(guān)的代碼塊分割開可以提高程序的可讀性。

空格應(yīng)在以下情況時使用:

  • * 跟在((左括號)后面的關(guān)鍵字應(yīng)被一個空格隔開。while (true) {
  • * 函數(shù)參數(shù)與((左括號)之間不應(yīng)該有空格。這能幫助區(qū)分關(guān)鍵字和函數(shù)調(diào)用。
  • * 所有的二元操作符,除了.(點(diǎn)) 和((左括號)和 [(左方括號)應(yīng)用空格將其與操作數(shù)隔開。
  • * 一元操作符與其操作數(shù)之間不應(yīng)有空格,除非操作符是個單詞,比如typeof。
  • * 每個在控制部分,比如for 語句中的; (分號)后須跟一個空格。
  • * 每個,(逗號)后應(yīng)跟一個空格。

另外的建議

{} 和[]

使用{}代替new Object()。使用[]代替new Array()。

當(dāng)成員名是一組有序的數(shù)字時使用數(shù)組來保存數(shù)據(jù)。當(dāng)成員名是無規(guī)律的字符串或其他時使用對象來保存數(shù)據(jù)。

,(逗號)操作符

避免使用逗號操作符,除非在特定的for 語句的控制部分。(這不包括那些被用在對象定義,數(shù)組定義,var語句,和參數(shù)列表中的逗號分隔符。)

作用域

在JavaScript中塊沒有域。只有函數(shù)有域。不要使用塊,除非在復(fù)合語句中。

賦值表達(dá)式

避免在if和while語句的條件部分進(jìn)行賦值。

  if (a = b) {

是一條正確語句?或者

  if (a == b) {

才是對的?避免這種不容易判斷對錯的結(jié)構(gòu)。

===和!==操作符。

使用===和!==操作符會相對好點(diǎn)。==和!=操作符會進(jìn)行類型強(qiáng)制轉(zhuǎn)換。 特別是, 不要將==用于與錯值比較( false,null,undefined,“”, 0,NaN)。

令人迷惑的加號和減號

小心在+后緊跟+或++。這種形式很容易仍人迷惑。應(yīng)插入括號以便于理解。

  total = subtotal + +myInput.value;

最好能寫成

  total = subtotal + (+myInput.value);

這樣+ +不會被誤認(rèn)為是++。

eval 是惡魔

eval是JavaScript中最容易被濫用的方法。避免使用它。

eval有別名。不要使用Function構(gòu)造器。不要給setTimeout或者 setInterval傳遞字符串參數(shù)。

相關(guān)文章

  • uniapp中全局頁面掛載組件實(shí)戰(zhàn)過程(小程序)

    uniapp中全局頁面掛載組件實(shí)戰(zhàn)過程(小程序)

    這篇文章主要給大家介紹了關(guān)于uniapp中全局頁面掛載組件(小程序)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用uniapp具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-12-12
  • Js中FileReader讀取文件內(nèi)容方法詳解(async/await)

    Js中FileReader讀取文件內(nèi)容方法詳解(async/await)

    這篇文章主要給大家介紹了關(guān)于Js中FileReader讀取文件內(nèi)容(async/await)的相關(guān)資料,FileReader是前端進(jìn)行文件處理的一個重要的Api,特別是在對圖片的處理上,如果你想知道圖片的處理原理,你就永遠(yuǎn)不可能繞過它,需要的朋友可以參考下
    2023-11-11
  • js獲取微信版本號的方法

    js獲取微信版本號的方法

    本文給大家分享的是使用javascript實(shí)現(xiàn)判斷微信版本號以及判斷是否在內(nèi)置的微信瀏覽器中打開的代碼,十分的簡單實(shí)用,有需要的小伙伴可以參考下。
    2015-05-05
  • from表單多個按鈕提交用onclick跳轉(zhuǎn)不同action

    from表單多個按鈕提交用onclick跳轉(zhuǎn)不同action

    這篇文章主要介紹了from表單多個按鈕提交用onclick跳轉(zhuǎn)不同action,需要的朋友可以參考下
    2014-04-04
  • 在js中實(shí)現(xiàn)郵箱格式的驗(yàn)證方法(推薦)

    在js中實(shí)現(xiàn)郵箱格式的驗(yàn)證方法(推薦)

    下面小編就為大家?guī)硪黄趈s中實(shí)現(xiàn)郵箱格式的驗(yàn)證方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10
  • assert()函數(shù)用法總結(jié)(推薦)

    assert()函數(shù)用法總結(jié)(推薦)

    assert的作用是現(xiàn)計算表達(dá)式 expression ,如果其值為假(即為0),那么它先向stderr打印一條出錯信息,然后通過調(diào)用 abort 來終止程序運(yùn)行。這篇文章主要介紹了assert()函數(shù)用法總結(jié),需要的的朋友參考下
    2017-01-01
  • 微信小程序?qū)崿F(xiàn)皮膚功能(夜間模式)

    微信小程序?qū)崿F(xiàn)皮膚功能(夜間模式)

    這篇文章主要給大家介紹了關(guān)于利用微信小程序?qū)崿F(xiàn)皮膚功能,也就是實(shí)現(xiàn)夜間模式的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-06-06
  • 微信小程序開發(fā)之麥克風(fēng)動畫 幀動畫 放大 淡出

    微信小程序開發(fā)之麥克風(fēng)動畫 幀動畫 放大 淡出

    本篇文章主要介紹了微信小程序開發(fā)之麥克風(fēng)動畫:幀動畫、放大、淡出的相關(guān)資料。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-04-04
  • JS 巧妙獲取剪貼板數(shù)據(jù) Excel數(shù)據(jù)的粘貼

    JS 巧妙獲取剪貼板數(shù)據(jù) Excel數(shù)據(jù)的粘貼

    最近需要在瀏覽器端實(shí)現(xiàn)excel數(shù)據(jù)的粘貼,一開始去找獲取剪貼板數(shù)據(jù)的方法。但是在瀏覽器端,JS去取是受安全限制的。
    2009-07-07
  • 微信小程序?qū)崿F(xiàn)搜索關(guān)鍵詞高亮的示例代碼

    微信小程序?qū)崿F(xiàn)搜索關(guān)鍵詞高亮的示例代碼

    這篇文章主要介紹了微信小程序?qū)崿F(xiàn)搜索關(guān)鍵詞高亮的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03

最新評論