免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
Javascript編程風(fēng)格

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

  去年11月他有一個(gè)演講(Youtube),談到了好的Javascript編程風(fēng)格是什么。我非常推薦這個(gè)演講,它不僅有助于學(xué)習(xí)Javascript,而且能讓你心情舒暢,因?yàn)镃rockford講得很幽默,時(shí)不時(shí)讓聽(tīng)眾會(huì)心一笑。下面,我根據(jù)這個(gè)演講和Crockford編寫(xiě)的代碼規(guī)范,總結(jié)一下"Javascript編程風(fēng)格"。

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

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

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

一、大括號(hào)的位置

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

  最流行的有兩種。一種是起首的大括號(hào)另起一行:

  block

  {

    ...

  }

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

  block {

    ...

  }

  一般來(lái)說(shuō),這兩種寫(xiě)法都可以接受。但是,Javascript要使用后一種,因?yàn)镴avascript會(huì)自動(dòng)添加句末的分號(hào),導(dǎo)致一些難以察覺(jué)的錯(cuò)誤。

  return

  {

    key:value;

  };

  上面的代碼的原意,是要返回一個(gè)對(duì)象,但實(shí)際上返回的是undefined,因?yàn)镴avascript自動(dòng)在return語(yǔ)句后面添加了分號(hào)。為了避免這一類(lèi)錯(cuò)誤,需要寫(xiě)成下面這樣:

  return {

    key : value;

  };

  因此,

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

二、 圓括號(hào)

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

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

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

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

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

  foo (bar)

  return(a+b);

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

  function foo (b) {...}

  function(x) {...}

三、分號(hào)

  分號(hào)表示語(yǔ)句的結(jié)束。大多數(shù)情況下,如果你省略了句尾的分號(hào),Javascript會(huì)自動(dòng)添加。

  var a = 1

  等同于

  var a = 1;

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

  x = y

  (function (){

    ...

  })();

  上面的代碼等同于

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

  因此,

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

四、with語(yǔ)句

  with可以減少代碼的書(shū)寫(xiě),但是會(huì)造成混淆。

  with (o) {

    foo = bar;

  }

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

  o.foo = bar;

  o.foo = o.bar;

  foo = bar;

  foo = o.bar;

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

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

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

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

  因?yàn)?相等"運(yùn)算符會(huì)自動(dòng)轉(zhuǎn)換變量類(lèi)型,造成很多意想不到的情況:

  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)算符,只使用"嚴(yán)格相等"(===)運(yùn)算符。

六、語(yǔ)句的合并

  有些程序員追求簡(jiǎn)潔,喜歡合并不同目的的語(yǔ)句。比如,原來(lái)的語(yǔ)句是

  a = b;

  if (a) {...}

  他喜歡寫(xiě)成下面這樣:

  if (a = b) {...}

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

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

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

  var a = b = 0;

  他以為,這行代碼等同于

  var a = 0, b = 0;

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

  b = 0;

  var a = b;

  因此,

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

七、變量聲明

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

  if (!o) {

    var o = {};

  }

  等同于

  var o;

  if (!o) {

    o = {};

  }

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

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

  最好寫(xiě)成:

  var i;

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

  因此,

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

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

八、全局變量

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

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

九、new命令

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

  var o = new myObject();

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

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

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

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

十、自增和自減運(yùn)算符

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

  事實(shí)上,所有的++運(yùn)算符都可以用"+= 1"代替。

  ++x

  等同于

  x += 1;

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

  ++x;

  ++x;

  這個(gè)程序員忘了,還有更簡(jiǎn)單、更合理的寫(xiě)法:

  x += 2;

  因此,

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

十一、區(qū)塊

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

  下面的代碼

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

  原意可能是

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

  但是,實(shí)際效果是

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

  因此,

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

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
JavaScript語(yǔ)言精髓與編程實(shí)踐20071115 筆記1 第一章十年JavaScript 第二章JavaScript的語(yǔ)法
JS逗號(hào)運(yùn)算符的用法詳解
javascript快速入門(mén)7
深入理解javascript中的立即執(zhí)行函數(shù)(function(){…})()
《編寫(xiě)可維護(hù)的JavaScript》
最全的Javascript編碼規(guī)范(推薦)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服