专业网站建设_企业品牌营销 · 北京汇仁智杰科技有限公司

Web前端知識(shí)

首頁 > 免費(fèi) > Web前端知識(shí) >

Javascript編程風(fēng)格

來源:北京匯仁智杰科技有限公司   時(shí)間:2015-12-15   點(diǎn)擊:

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

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

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

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

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

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

  block
  {
  ...
  }
  另一種是起首的大括號(hào)跟在關(guān)鍵字的后面:
  block {
  ...
  }
  一般來說,這兩種寫法都可以接受。但是,Javascript要使用后一種,因?yàn)镴avascript會(huì)自動(dòng)添加句末的分號(hào),導(dǎo)致一些難以察覺的錯(cuò)誤。
  return
  {
  key:value;
  };
  上面的代碼的原意,是要返回一個(gè)對象,但實(shí)際上返回的是undefined,因?yàn)镴avascript自動(dòng)在return語句后面添加了分號(hào)。為了避免這一類錯(cuò)誤,需要寫成下面這樣:
  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)之間沒有空格。

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

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

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

  foo (bar)
  return(a+b);
  if(a === 0) {...}
  function foo (b) {...}
  function(x) {...}

  三、分號(hào)

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

  var a = 1

  等同于

  var a = 1;

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

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

  上面的代碼等同于

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

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

  四、with語句

  with可以減少代碼的書寫,但是會(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án)格相等

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

  因?yàn)?quot;相等"運(yùn)算符會(huì)自動(dòng)轉(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)算符,只使用"嚴(yán)格相等"(===)運(yùn)算符。

  六、語句的合并

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

  a = b;
  if (a) {...}
  他喜歡寫成下面這樣:
  if (a = b) {...}
  雖然語句少了一行,但是可讀性大打折扣,而且會(huì)造成誤讀,讓別人誤以為這行代碼的意思是:
  if (a === b){...}
  另外一種情況是,有些程序員喜歡在同一行中賦值多個(gè)變量:
  var a = b = 0;
  他以為,這行代碼等同于
  var a = 0, b = 0;
  實(shí)際上不是,它的真正效果是下面這樣:
  b = 0;
  var a = b;

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

  七、變量聲明

  Javascript會(huì)自動(dòng)將變量聲明"提升"(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最大的語法缺點(diǎn),可能就是全局變量對于任何一個(gè)代碼塊,都是可讀可寫。這對代碼的模塊化和重復(fù)使用,非常不利。

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

  九、new命令

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

  var o = new myObject();

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

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

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

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

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

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

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

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

  這個(gè)程序員忘了,還有更簡單、更合理的寫法:
  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ū)塊。

網(wǎng)絡(luò)營銷推廣 . 北京匯仁智杰科技有限公司!

地址:北京市昌平區(qū)回龍觀龍冠大廈5層
咨詢:13370157521
業(yè)務(wù)QQ:373002979
E - mail:sales @ huirenzhijie.com
企業(yè)網(wǎng)站備案:京ICP備15021091號(hào)-1

匯仁智杰與眾不同

  • 有網(wǎng)絡(luò)推廣經(jīng)驗(yàn)
  • 有網(wǎng)站建站隊(duì)伍
  • 有大型網(wǎng)站建設(shè)經(jīng)驗(yàn)
  • 致力于營銷型網(wǎng)站建設(shè)
  • 始終堅(jiān)持技術(shù)和服務(wù)同樣重要
查看PC版網(wǎng)站
備案號(hào):京ICP備15021091號(hào)-1 版權(quán)所有:匯仁智杰

主站蜘蛛池模板: 无锡亮鑫不锈钢有限公司-不锈钢炉胆,马弗炉胆,耐高温炉胆,310s炉胆,网带炉 | 宁波管道安装_宁波工业冷风机_宁波冷风机厂家_宁波厂房通风降温_「浙江甬风机电」 | 烧腊培训,广东有实力的烧腊培训[免费试吃],广式烧鸭培训-烧鹅培训-学烧腊选广州嘉政 | 深圳理津技术有限公司(REHLOGY)-全球工业品供应商:自动化产品|仪器仪表|设备|备品备件|工具|消耗品|非标设备|建筑工程等一站式综合服务! | 石墨热场|PECVD石墨舟|碳碳框|燃料电池双极板|半导体石墨|光纤用石墨模具|石墨电极加工|石墨制品|上海弘竣新能源材料有限公司 | 中国水泥协会-官方网站| 深圳家具网-家具展会-家具检测-家具品牌—深圳市家具行业协会官网 | 盐城市宏展环保材料有限公司-官网-滤袋,过滤袋,液体过滤袋,袋式过滤器,无纺布过滤袋,废液过滤袋 盐城市城镇化建设投资集团有限公司[盐城国资企业、盐城国资集团、盐城文化旅游、盐城基础设施、盐城土地开发、盐城粮食收储] | 挖掘机|小型挖掘机|挖掘机抓木机|轮式挖掘机|宝鼎挖掘机-宝鼎液压机械公司厂家直销 | 西宁佳越信息科技发展有限公司- 西门子伺服电机维修_西门子变频器维修_西门子伺服驱动器维修_数控系统维修_PL维修-上海仰光电子 | 康复器材,康复设备_常州市友邦医疗康复器材有限公司 | 上海钧尚电器有限公司 - Faulhaber电机 AMETEK pittman电机 AMETEK ROTRON军用航空风机 Exlar电动缸 MAE电机 MCG电机 CP电动工具 马头工具 AMCI驱动器 直流电机 减速箱 直流伺服电机,无刷电机,直线电机 直流防爆电机 防爆电机 汽车助力转向电机 EPS电机 faulhaber motor faulhaber gearbox NANOTEC电机 ELWOOD电机 PHYTRON电机 EXLAR伺服电动缸 高力矩、高性能直流电机,音圈电机,风机,直流风机,航空风机 | 景观造雾_人造雾设备_雾森系统_冷雾降温_雾化消毒_喷雾除尘厂家-成都景程雾森 | 郑州空气能热水器,郑州空气能热水器经销商,郑州空气能热水器维修,郑州空气能热水器安装 | 津成电线电缆价格,天津津成线缆,津成线缆销售电话,天津津成线缆批发电话-天津市津成电线电缆有限公司 | 猪粪烘干机|小型鸡粪烘干机|猪粪烘干机价格|小型鸡粪烘干机价格 - 河南宏科重工干燥机设备生产厂家 | 青岛大倾角输送带厂家_橡胶挡边输送带_波纹状挡边输送带_大倾角输送带型号-青岛朗森橡胶有限公司 | 噪声治理,消声器,隔声屏障,隔声罩,噪声控制,降噪,空调降噪,水泵噪声治理,冷却塔噪声治理-北京华清恒业环保设备有限公司 | 宿迁网站建设-宿迁做网站-宿迁网站制作-宿迁网络公司-宿迁网页设计-宿迁软件开发-宿迁新动力软件开发有限公司 | 真石漆设备-干粉砂浆生产线-保温砂浆机械-郑州屹成机械设备 | 泡酒配方大全-泡药酒专业的网站-泡酒之家 | 浙江微龙科技-微通道工艺结合设备一站式解决方案-致力于连续流技术开发与产业化应用-助力传统医药化工行业转型升级 | 全自动烫金机-全自动移印机-全自动丝印机-全自动平面机-东莞联昌实业供应各种丝印机和移印机 | 企业微信注册_CRM客户管理系统_SCRM解决方案_私域流量运营_腾讯企点服务_企业QQ-腾辉网络 | 湖南众一离心机股份有限公司_活塞推料离心机_沉降离心机_卧式刮刀离心机 | 射频微波_微波元器件_芯片_电源模块_Raychem_立维创展 | 医用空气净化消毒机,医用床单位消毒机,无磁空气消毒机,紫外线空气消毒机厂家-南昌市扬帆环保设备有限公司 | 江西新华电脑学院_南昌新华电脑中专学校_新华电脑培训学校_官方网站 | 新乡市矿山起重机制造有限公司| 石英砂|无烟煤滤料|火山岩|聚合硫酸铁|活性炭-河南碧水清源水处理材料有限公司 | 健力普医疗-半导体激光治疗仪,红外偏振光治疗仪,近红外线治疗仪-独家功能,光疗典范 | 拉力试验机|电子万能试验机|液压万能试验机|摩擦磨损试验机|济南试验机厂家-济南思达测试技术有限公司 | 智慧网格,智慧城市,智慧社区,精准扶贫,农村电商,网格化,网格化管理,智慧养老,北京瑞光极远数码科技有限公司 | 专业儿童感统训练机构-武汉优佳加智能教育[官网] | 色差宝ColorReader「3nh三恩时」专业版色差宝APP | 九江市东鸿气体有限公司 | 立式离心泵_不锈钢自吸泵_液下泵_变频无负压供水设备-大东海泵业无锡有限公司 | 兰州职业学校-新华互联网学校咨询平台中心 | 曙海培训-仿真培训Linux培训html5培单片机培训PCB培训python培训PLC培训C语言培训android培训物联网培训无线电培训欧姆龙培训工业机器人培训5G培训Hadoop培训CFD培训项目外包开发咨询 | 四边封包装机_蒸汽眼罩机_暖宝宝/足贴/热灸贴生产设备_浙江硕源机械有限公司 | 汽修学校|汽车维修学校收费|全国职业技校汽修-北京万通汽修学校 汽车轴承|圆锥滚子轴承|轴承生产厂家|赛襄轴承 |