国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

編寫高質(zhì)量JavaScript代碼的基本技巧

Alex / 2497人閱讀

摘要:五不要增加內(nèi)置的原型增加內(nèi)置構(gòu)造函數(shù)如,和等的原型屬性是一個(gè)增強(qiáng)功能性的強(qiáng)大的方法,但這可能會(huì)嚴(yán)重影響可維護(hù)性,因?yàn)檫@種做法將使代碼變得更加不可預(yù)測(cè)。推薦使用后者,這樣根據(jù)名字就能明顯地區(qū)分出變量函數(shù)和基本常量等。

一、盡量少用全局變量

減少全局名字空間污染,最理想的情況是一個(gè)應(yīng)用程序僅有一個(gè)全局變量。

二、單一var模式
var a = 1,
    b = 2,
    sum = a + b,
    c;

只使用一個(gè)var在函數(shù)頂部進(jìn)行變量聲明,其好處:

提供一個(gè)單一的地址以查找到函數(shù)需要的所有局部變量;

防止出現(xiàn)變量在定義之前就被使用的邏輯錯(cuò)誤;

幫助牢記要聲明變量,以盡可能少地使用全局變量;

更少的代碼(無論是輸入代碼還是傳輸代碼都更少了)。

三、for循環(huán)
for (var i = 0; i < dom.length; i++) {
    //DO STH
}

每一次循環(huán)都查詢dom的長(zhǎng)度是很消耗時(shí)間的,把dom.length緩存起來,這樣,對(duì)長(zhǎng)度的值只提取一次,但能應(yīng)用到整個(gè)循環(huán)中。

用i++替代以下兩種表達(dá)式:i = i + 1; i += 1;

四、for-in循環(huán)

for-in循環(huán)應(yīng)該用來遍歷非數(shù)組對(duì)象。使用for-in循環(huán)也被稱為枚舉(enumeration)。
從技術(shù)上來說,也可以使用for-in循環(huán)來遍歷數(shù)組(因?yàn)樵贘avaScript中,數(shù)組也是對(duì)象),但是不推薦用戶這樣使用,因?yàn)楫?dāng)該數(shù)組對(duì)象已經(jīng)被自定義函數(shù)擴(kuò)大后,這樣做有可能導(dǎo)致邏輯上的錯(cuò)誤。因此,推薦使用正常的for循環(huán)來處理數(shù)組,使用for-in循環(huán)來處理對(duì)象。

當(dāng)遍歷對(duì)象屬性來過濾遇到原型鏈的屬性時(shí),推薦使用hasOwnProperty()函數(shù)。

五、不要增加內(nèi)置的原型

增加內(nèi)置構(gòu)造函數(shù)(如Object(),Array()和Function()等)的原型屬性是一個(gè)增強(qiáng)功能性的強(qiáng)大的方法,但這可能會(huì)嚴(yán)重影響可維護(hù)性,因?yàn)檫@種做法將使代碼變得更加不可預(yù) 測(cè)。其他開發(fā)者在使用您的代碼時(shí)可能期望內(nèi)置的JavaScript方法的使用是一致的,而不期望有一些您自己添加的方法。

此外,給原型添加的屬性在沒有使用hasOwnProperty()時(shí)可能會(huì)在循環(huán)中出現(xiàn),這會(huì)導(dǎo)致一些混亂。

六、switch模式
var inspect_me = 0,
    result = "";
switch (inspect_me) {
    case 0:
        result = "zero";
        break;
    case 1:
        result = "one";
        break;
    default:
        result = "unknown";
}

在每個(gè)case語句中使用代碼縮進(jìn);

在每個(gè)case語句結(jié)尾有一個(gè)明確的break語句;

避免使用fall-throughs(也就是有意不使用break語句,以使得程序會(huì)按順序一直向下執(zhí)行),如果確實(shí)希望采用fall-throughs,那么請(qǐng)確信在代碼中使用fall-throughs的確是最好的途徑,因?yàn)樵诖a中這樣做會(huì)讓其他閱讀您代碼的人以為代碼是有錯(cuò)誤的;

用default語句來作為switch的結(jié)束:當(dāng)以上所有情形都不匹配時(shí),給出一個(gè)默認(rèn)的結(jié)果。

七、避免使用隱式類型轉(zhuǎn)換

在使用比較語句的時(shí)候推薦使用===和!===操作符來對(duì)數(shù)值和類型進(jìn)行比較。JS代碼質(zhì)量檢查工具——JSLint,要求嚴(yán)格的等價(jià)比較,這樣的做法會(huì)使得代碼看起來更為一致,并減少在閱讀代碼時(shí)的腦力開銷(==的使用是故意的還是無意遺漏的)。

八、避免使用eval()

“eval( )是一個(gè)魔鬼”

九、使用parseInt()的數(shù)值約定

parseInt(string, radix);

參數(shù)string:要被解析的值。如果參數(shù)不是一個(gè)字符串,則將其轉(zhuǎn)換為字符串。字符串開頭的空白符將會(huì)被忽略。
參數(shù)radix:一個(gè)2到36之間的整數(shù)值,用于指定轉(zhuǎn)換中采用的基數(shù)。比如參數(shù)"10"表示使用我們通常使用的十進(jìn)制數(shù)值系統(tǒng)。總是指定該參數(shù)可以消除閱讀該代碼時(shí)的困惑并且保證轉(zhuǎn)換結(jié)果可預(yù)測(cè)。當(dāng)忽略該參數(shù)時(shí),不同的實(shí)現(xiàn)環(huán)境可能產(chǎn)生不同的結(jié)果。

在沒有指定基數(shù),或者基數(shù)為 0 的情況下,JavaScript 作如下處理:

如果字符串 string 以"0x"或者"0X"開頭, 則基數(shù)是16 (16進(jìn)制);

如果字符串 string 以"0"開頭, 基數(shù)是8(八進(jìn)制)或者10(十進(jìn)制),那么具體是哪個(gè)基數(shù)由實(shí)現(xiàn)環(huán)境決定。ECMAScript 3認(rèn)為是八進(jìn)制;ECMAScript5認(rèn)為是十進(jìn)制。因此,永遠(yuǎn)都要明確給出radix參數(shù)的值。

如果字符串 string 以其它任何值開頭,則基數(shù)是10 (十進(jìn)制)。

詳細(xì)資料參考:MDN-parseInt

十、編碼約定

確定并一致遵循約定比這個(gè)具體約定是什么更為重要。

縮進(jìn)
需要對(duì)哪些內(nèi)容執(zhí)行縮進(jìn)?規(guī)則是只需要對(duì)大括號(hào)中所有的代碼執(zhí)行縮進(jìn)。主要包含函數(shù)體、循環(huán)體(do、while、for、for-in)、if語句、switch語句和對(duì)象字面量引用的屬性。

大括號(hào)

一直使用大括號(hào)
應(yīng)該經(jīng)常使用大括號(hào),甚至在可選的情形下,都請(qǐng)使用大括號(hào)(if語句for語句只有一行語句的時(shí)候)

將開放的大括號(hào)放置在前面語句的同一行
開放的大括號(hào)放置的位置一般有兩種選擇:

  //大括號(hào)和語句放在同一行
  if (true) {
      alert("It"s True!");
  }

  //大括號(hào)放在接下來的一行
  if (true) 
  {
      alert("It"s TRUE!");
  }

采用哪種方式只是個(gè)人習(xí)慣的不同,但是有些情況下隨著大括號(hào)的位置不同,程序的執(zhí)行結(jié)果也會(huì)有所不同,這是由分號(hào)插入機(jī)制(semicolon insertion mechanism)導(dǎo)致的。JavaScript對(duì)代碼不會(huì)很挑剔,當(dāng)沒有正確使用分號(hào)結(jié)束本語句時(shí),它會(huì)自動(dòng)補(bǔ)上。該行為在函數(shù)返回一個(gè)對(duì)象字面量并且開放的大括號(hào)位于接下來的一行時(shí)會(huì)導(dǎo)致問題:

  function func() {
      return
      {
          name: "Jason"
      };
  }
  //由于分號(hào)插入機(jī)制,上面的寫法等價(jià)于下面的寫法
  function func() {
      return;
      {
          name: "Jason"
      };
  }

函數(shù)func返回的結(jié)果是undefined,而不是期望的對(duì)象{name: "Jason"},所以推薦將開放的大括號(hào)放置在前面語句的同一行。

在語句的末尾一直使用分號(hào)

空格
使用空格有助于改善代碼的可讀性和一致性。使用空格比較好的位置包含如下:

操作符(+ - * = == < > <= >= === !== && || +=等)的前后

在分開for循環(huán)的各個(gè)部分的分號(hào)之后:

  for (var i = 0; i < 10; i += 1) {}

在限定數(shù)組項(xiàng)的逗號(hào)后面:

  var a = [1, 2, 3];

對(duì)象屬性的逗號(hào)之后和將屬性名和屬性值分開的冒號(hào)之后:

  var o = {a: 1, b: 2};

分隔開函數(shù)中各個(gè)參數(shù)的逗號(hào)之后:

  myFunc(a, b, c)

在函數(shù)聲明的大括號(hào)之前:

  function myFunc() {}

匿名函數(shù)關(guān)鍵字function之后( )之前:

  var myFunc = function () {};

在函數(shù)中使用大括號(hào)開始符之前,例如if-else語句、循環(huán)語句和對(duì)象字面量等

在大括號(hào)結(jié)束符和else或while之間

一個(gè)常用的增加可讀性的做法是使用垂直的空格——使用空行來分隔代碼的不同單元

十一、命名約定

構(gòu)造函數(shù)的首字母大寫

   var jason = new Person();

分隔單詞

構(gòu)造函數(shù)——大駱駝峰式命名法:MyConstructor( )

函數(shù)和方法——小駱駝峰式命名法:myFunction( )、calculateArea( )

變量——小駱駝峰式命名法或者所有的單詞都使用小寫,并用下劃線分隔開各個(gè)單詞 :first_name、sold_company_name。推薦使用后者,這樣根據(jù)名字就能明顯地區(qū)分出變量、函數(shù)和基本常量等。

其他命名模式

常量:將變量名全部大寫來表明該變量在程序生命周期中不可改變

  //精確的常量,請(qǐng)不要修改
  var PI = 3.14,
      MAX_WIDTH = 800;

為全局變量命名時(shí),約定將所有的字符大寫

  var GLOBAL_TIP = "Hello World";

使用一個(gè)下劃線前綴來標(biāo)識(shí)私有方法或私有屬性

  var person = {
      _nickName: "jason",
      getName: function () {
          return this._nickName + this._getFirst() + "" + this._getLast();
      },
      _getFirst: function () {
          //...
      },
      _getLast: function () {
          //...
      }
  }

getName( )意味著這是API的一個(gè)公開的方法,而_getFirst( )和_getLast( )意味著這是一個(gè)私有函數(shù),_nickName意味著這是一個(gè)私有屬性。盡管它們都是普通的公開方法和屬性,但是使用下劃線前綴的表示方法可以提醒使用person對(duì)象的用戶,告訴他們這些方法在其他地方不能確保一定能夠正常工作,不能直接調(diào)用。

十二、編寫注釋

注釋的重要性就不用言表了,當(dāng)你看到一份通篇都是代碼而沒有一個(gè)注釋的文件時(shí),心中也是一萬頭草泥馬奔騰而過吧。

不需要注釋一些比較明顯的代碼:例如每一個(gè)變量或每一行都注釋。但通常有必要對(duì)所有的函數(shù)、函數(shù)參數(shù)、返回值和其他有趣或不同尋常的算法和技術(shù)都用文檔記錄下來。

最重要的習(xí)慣,也是最難遵循的習(xí)慣就是不斷更新注釋,因?yàn)檫^期的注釋可能會(huì)誤導(dǎo)閱讀者,這比沒有注釋還可怕。

參考:《JavaScript模式》

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/78443.html

相關(guān)文章

  • 編寫質(zhì)量Javascript要點(diǎn)-Review深入理解Javascript系列(一)

    摘要:編寫高質(zhì)量的要點(diǎn)深入理解系列一知識(shí)點(diǎn)最小全局變量全局變量命名易與第三方的腳本引起沖突所以盡可能少的使用全局變量是很重要的相關(guān)策略有命名空間模式或是函數(shù)立即自動(dòng)執(zhí)行,但是要想讓全局變量少最重要的還是始終使用來聲明變量。 Title: 編寫高質(zhì)量Javascript的要點(diǎn)-Review深入理解Javascript系列(一)date: 2017-6-9 14:14:20 status: p...

    wh469012917 評(píng)論0 收藏0
  • 個(gè)人分享--web前端學(xué)習(xí)資源分享

    摘要:前言月份開始出沒社區(qū),現(xiàn)在差不多月了,按照工作的說法,就是差不多過了三個(gè)月的試用期,準(zhǔn)備轉(zhuǎn)正了一般來說,差不多到了轉(zhuǎn)正的時(shí)候,會(huì)進(jìn)行總結(jié)或者分享會(huì)議那么今天我就把看過的一些學(xué)習(xí)資源主要是博客,博文推薦分享給大家。 1.前言 6月份開始出沒社區(qū),現(xiàn)在差不多9月了,按照工作的說法,就是差不多過了三個(gè)月的試用期,準(zhǔn)備轉(zhuǎn)正了!一般來說,差不多到了轉(zhuǎn)正的時(shí)候,會(huì)進(jìn)行總結(jié)或者分享會(huì)議!那么今天我就...

    sherlock221 評(píng)論0 收藏0
  • 編碼規(guī)范 —— 編寫靈活、穩(wěn)定、質(zhì)量 HTML 和 CSS 代碼規(guī)范

    摘要:用兩個(gè)空格代替制表符這是唯一能保證在所有環(huán)境下獲得一致展現(xiàn)的方法。編輯器配置將你的編輯器按照下面的配置進(jìn)行設(shè)置,以免常見的代碼不一致和差異用兩個(gè)空格代替制表符保存文件時(shí)刪除尾部的空白符設(shè)置文件編碼為在文件結(jié)尾添加一個(gè)空白行。 黃金定律 永遠(yuǎn)遵循同一套編碼規(guī)范 - 可以是這里列出的,也可以是你自己總結(jié)的。如果發(fā)現(xiàn)規(guī)范中有任何錯(cuò)誤,敬請(qǐng)指正。 HTML 語法 用兩個(gè)空格代替制表符 (ta...

    Karuru 評(píng)論0 收藏0
  • 【譯】前端練級(jí)攻略

    摘要:由于系統(tǒng)變得越來越復(fù)雜,人們提出了稱為預(yù)處理器和后處理器的工具來管理復(fù)雜性。后處理器在由預(yù)處理器手寫或編譯后對(duì)應(yīng)用更改。我之前建議的文章,,也涵蓋了預(yù)處理器相關(guān)的知識(shí)。 譯者:前端小智 原文:medium.freecodecamp.org/from-zero-t… medium.freecodecamp.org/from-zero-t… 我記得我剛開始學(xué)習(xí)前端開發(fā)的時(shí)候。我看到了很多文章及...

    wuyumin 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<