真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

淺談Javascript編程風(fēng)格

Douglas Crockford是Javascript權(quán)威,Json格式就是他的發(fā)明。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、小程序定制開發(fā)、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了林甸免費建站歡迎大家使用!

去年11月他有一個演講,談到了好的Javascript編程風(fēng)格是什么。

淺談Javascript編程風(fēng)格

我非常推薦這個演講,它不僅有助于學(xué)習(xí)Javascript,而且能讓你心情舒暢,因為Crockford講得很幽默,時不時讓聽眾會心一笑。

下面,我根據(jù)這個演講和Crockford編寫的代碼規(guī)范,總結(jié)一下"Javascript編程風(fēng)格"。

淺談Javascript編程風(fēng)格

所謂"編程風(fēng)格"(programming style),指的是編寫代碼的樣式規(guī)則。不同的程序員,往往有不同的編程風(fēng)格。

有人說,編譯器的規(guī)范叫做"語法規(guī)則"(grammar),這是程序員必須遵守的;而編譯器忽略的部分,就叫"編程風(fēng)格"(programming style),這是程序員可以自由選擇的。這種說法不完全正確,程序員固然可以自由選擇編程風(fēng)格,但是好的編程風(fēng)格有助于寫出質(zhì)量更高、錯誤更少、更易于維護的程序。

所以,有一點應(yīng)該明確,"編程風(fēng)格"的選擇不應(yīng)該基于個人愛好、熟悉程度、打字工作量等因素,而要考慮如何盡量使代碼清晰易讀、減少出錯。你選擇的,不是你喜歡的風(fēng)格,而是一種能夠清晰表達你的意圖的風(fēng)格。這一點,對于Javascript這種語法自由度很高、設(shè)計不完全成熟的語言尤其重要。

淺談Javascript編程風(fēng)格

一、大括號的位置

絕大多數(shù)的編程語言,都用大括號({})表示區(qū)塊(block)。起首的大括號的位置,有許多不同的寫法。

最流行的有兩種。一種是起首的大括號另起一行:

block

  {

    ...

  }

另一種是起首的大括號跟在關(guān)鍵字的后面:

 block {

    ...

  }

一般來說,這兩種寫法都可以接受。但是,Javascript要使用后一種,因為Javascript會自動添加句末的分號,導(dǎo)致一些難以察覺的錯誤。

return 

  {

    key:value;

  };

上面的代碼的原意,是要返回一個對象,但實際上返回的是undefined,因為Javascript自動在return語句后面添加了分號。為了避免這一類錯誤,需要寫成下面這樣:

return {

    key : value;

  };

因此,

規(guī)則1:表示區(qū)塊起首的大括號,不要另起一行。

二、 圓括號

圓括號(parentheses)在Javascript中有兩種作用,一種表示調(diào)用函數(shù),另一種表示不同的值的組合(grouping)。我們可以用空格,區(qū)分這兩種不同的括號。

規(guī)則2:調(diào)用函數(shù)的時候,函數(shù)名與左括號之間沒有空格。

規(guī)則3:函數(shù)名與參數(shù)序列之間,沒有空格。

規(guī)則4:所有其他語法元素與左括號之間,都有一個空格。

按照上面的規(guī)則,下面的寫法都是不規(guī)范的:

  foo (bar)

  return(a+b);

  if(a === 0) {...}

  function foo (b) {...}

  function(x) {...}

淺談Javascript編程風(fēng)格

三、分號

分號表示語句的結(jié)束。大多數(shù)情況下,如果你省略了句尾的分號,Javascript會自動添加。

var a = 1

等同于

var a = 1;

因此,有人提倡省略句尾的分號。但麻煩的是,如果下一行的第一個字元(token)是下面這五個字符之一,Javascript將不對上一行句尾添加分號:"("、"["、"/"、"+"和"-"。

x = y

  (function (){

    ...

  })();

上面的代碼等同于

x = y(function (){...})();

因此,

規(guī)則5:不要省略句末的分號。

四、with語句

with可以減少代碼的書寫,但是會造成混淆。

  with (o) {

    foo = bar;

  }

上面的代碼,可以有四種運行結(jié)果:

o.foo = bar;

o.foo = o.bar;

foo = bar;

foo = o.bar;

這四種結(jié)果都可能發(fā)生,取決于不同的變量是否有定義。因此,

規(guī)則6:不要使用with語句。

淺談Javascript編程風(fēng)格

五、相等和嚴(yán)格相等

Javascript有兩個表示"相等"的運算符:"相等"(==)和"嚴(yán)格相等"(===)。

因為"相等"運算符會自動轉(zhuǎn)換變量類型,造成很多意想不到的情況:

 0 == ''// true

  1 == true // true

  2 == true // false

  0 == '0' // true

  false == 'false' // false

  false == '0' // true

  " \t\r\n " == 0 // true

因此,

規(guī)則7:不要使用"相等"(==)運算符,只使用"嚴(yán)格相等"(===)運算符。

六、語句的合并

有些程序員追求簡潔,喜歡合并不同目的的語句。比如,原來的語句是

  a = b;

  if (a) {...}

他喜歡寫成下面這樣:

if (a = b) {...}

雖然語句少了一行,但是可讀性大打折扣,而且會造成誤讀,讓別人誤以為這行代碼的意思是:

if (a === b){...}

另外一種情況是,有些程序員喜歡在同一行中賦值多個變量:

var a = b = 0; 

他以為,這行代碼等同于

var a = 0, b = 0;

實際上不是,它的真正效果是下面這樣:

b = 0;
var a = b;

因此,

規(guī)則8:不要將不同目的的語句,合并成一行。

淺談Javascript編程風(fēng)格

七、變量聲明

Javascript會自動將變量聲明"提升"(hoist)到代碼塊(block)的頭部。

if (!o) {

    var o = {};

  }

等同于

 var o;

  if (!o) {

    o = {};

  }

為了避免可能出現(xiàn)的問題,不如把變量聲明都放在代碼塊的頭部。

for (var i ...) {...}

最好寫成:

var i;
for (i ...) {...,}

因此,

規(guī)則9:所有變量聲明都放在函數(shù)的頭部。

規(guī)則10:所有函數(shù)都在使用之前定義。

八、全局變量

Javascript最大的語法缺點,可能就是全局變量對于任何一個代碼塊,都是可讀可寫。這對代碼的模塊化和重復(fù)使用,非常不利。

規(guī)則11:避免使用全局變量;如果不得不使用,用大寫字母表示變量名,比如UPPER_CASE。

淺談Javascript編程風(fēng)格

九、new命令

Javascript使用new命令,從建構(gòu)函數(shù)生成一個新對象。

var o = new myObject();

這種做法的問題是,一旦你忘了加上new,myObject()內(nèi)部的this關(guān)鍵字就會指向全局對象,導(dǎo)致所有綁定在this上面的變量,都變成全部變量。

規(guī)則12:不要使用new命令,改用Object.create()命令。

如果不得不使用new,為了防止出錯,最好在視覺上把建構(gòu)函數(shù)與其他函數(shù)區(qū)分開來。

規(guī)則13:建構(gòu)函數(shù)的函數(shù)名,采用首字母大寫(InitialCap);其他函數(shù)名,一律首字母小寫。

十、自增和自減運算符

自增(++)和自減(--)運算符,放在變量的前面或后面,返回的值不一樣,很容易發(fā)生錯誤。

事實上,所有的++運算符都可以用"+= 1"代替。

++x

等同于

x += 1;

代碼變得更清晰了。有一個很可笑的例子,某個Javascript函數(shù)庫的源代碼中出現(xiàn)了下面的片段:

++x;

++x;

這個程序員忘了,還有更簡單、更合理的寫法:

x += 2;

因此,

規(guī)則14:不要使用自增(++)和自減(--)運算符,用+=和-=代替。

十一、區(qū)塊

如果循環(huán)和判斷的代碼體只有一行,Javascript允許該區(qū)塊(block)省略大括號。

下面的代碼

if (a) b(); c();

原意可能是

if (a) { b(); c();}

但是,實際效果是

if (a) { b();} c();

因此,

規(guī)則15:總是使用大括號表示區(qū)塊。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。


本文標(biāo)題:淺談Javascript編程風(fēng)格
文章URL:http://weahome.cn/article/pisjss.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部