首页 > 教程 > 关键词   >  Javascript最新资讯  > 正文

浅谈JavaScript编程语言的编码规范

2010-08-16 14:21 · 稿源:IBM

清单 4. 内部函数声明

 

<script language="javascript">
 var innerA = 1;
 function outF() {
   var innerA = 2;
   function _inF() {
       alert("valueA="+innerA);
   }
   _inF();
 }
 outF();                         //output: valueA=2
 _inF();                         //error: innerF is not defined
 </script>

 

从清单 4 的输出可以看出,inF() 函数仅在 outF() 函数的内部生效,局部变量 innerA 对内部函数的作用域生效。这样的编码方式使得变量和函数的作用域变得清晰。

语句

对于简单语句而言,需要提及的仍然是分号必要性,同时,一行最多有一个语句。如果一个赋值语句是用函数和对象来赋值,可能需要跨多行,一定切记要在赋值语句末加上分号。

这是因为 JavaScript 中,所有表达式都可以当语句,遇换行符时会解析为表达式的结束,此时不规范的换行和分号的丢失,可能引入新的错误。

对于复合语句,if, for, while, do, switch, try … catch 等代码体,函数定义的函数体,对象的定义等都需要放在花括号'{}'里面。

  • '{' 应在行末,标志代码块的开始。
  • '}' 应在一行开头,标志代码块的结束,同时需要和'{'所在行的开始对齐,以表明一个完整的复合语句段。这样可以极大地提高代码的可阅读性,控制逻辑能清晰地表现出来。
  • 被包含的代码段应该再缩进 4 个空格。
  • 即使被包含的代码段只有一句,也应该用花括号'{}'包含。尽管不用花括号代码也不会错,但如若需要增加语句的话,则较容易因花括号遗漏而引起的编译错误或逻辑错误。

return语句在使用时也需慎重,如果用表达式的执行作为返回值,请把表达式和 return 放在同一行中,以免换行符被误解析为语句的结束而引起返回错误。return 关键字后若没有返回表达式,则返回 undefined。构造器的默认返回值为 this。

清单 5. return 表达式

 

在清单 5 中显示了因返回表达式没有和 return 关键字放在同一行而引起的返回错误,需重视。

特殊符号

空白符

适当的空白行可以大大提高代码的可阅读性,可以使代码逻辑更清晰易懂。同时,在表达式中适当的留空白,也会给代码的阅读带来方便。

关键字的后面如有括号,则最好在关键字和左括号'('之间留空白,如 for, if, while 等。而函数名和括号之间则不宜留空白,但若是匿名函数,则必须在 function 和左括号'('之间留空白,否则,编辑器会误认为函数名为 function。

在表达式中,二元运算符 ( 除左括号'(',左方括号'[',作用域点'.') 和两个操作数之间最好留空白。一元运算符(若不是词 typeof 等)和其操作数之间不宜留空白。

逗号','的后面需要留空白,以显示明确的参数间隔,变量间隔等。

分号';'之后通常表明表达语句的结束,而应空行。在 for 的条件语句中,分号之后则应该留空白。

{ } 和 [ ]

在 JavaScript 中,如需定义空对象和空数组,通常很自然地想到用 new Object() 和 new Array() 的方法。其实花括号'{}'和方括号'[]'可以直接用来定义一个空对象和一个空数组。这种书写方法可以使代码看起来简单易懂。

== 和 ===

判断"逻辑等"在代码里太平常的不过事情了,但 JavaScript 与其他熟知的编程语言不同的是,除了可以使用两个等号'=='来作判断以为,还可以使用三个等号'==='来进行逻辑等判断。两者的不同是'=='作逻辑等判断时,会先进行类型转换后再进行比较。'==='则不会。因而,'=='进行的判断结果可能产生偏差。'!='与'!=='的区别亦是如此。本文提倡尽量使用'==='来进行逻辑等的判断,用'!=='进行逻辑不等的判断。

清单 6. === 的使用

 

<script language="javascript">
 var valueA = "1";
 var valueB = 1;
 if ( valueA == valueB) {
   alert("Equal");
 }
 else {
   alert("Not equal")
 }
 //output: "Equal"
 if ( valueA === valueB) {
   alert("Equal");
 }
 else {
   alert("Not equal")
 }
 //output: "Not equal"
 </script>

 

清单 6 中,valueA 和 valueB 两个变量的值显然是不相等的,起码 valueA 是个字符串,而 valueB 是一个数字。但用'=='进行判断是,程序却输出相等的字样。这是因为编译器对两个变量进行比较时,因为他们的类型不同,而自动地将 valueB 转换成字符串,而后再和 valueA 进行比较的。用'==='得到的判断结果正和预期的结果相符。

+

加号'+'也同样是程序员所熟知的操作符之一。JavaScript 和其他编程语言不同的是,在 JavaScript 中,'+'除了表示数字值相加,字符串相连接以外,还可以作一元运算符用,把字符串转换为数字。因而如果使用不当,则可能与自增符'++'混淆而引起计算错误。这一点,在清单 7 中可以清楚地看出。

清单 7. 巧用 + 号

 

<script language="javascript">
 var valueA = 20;
 var valueB = "10";
 alert( valueA + valueB);     //ouput: 2010
 alert( valueA + (+valueB)); //output: 30
 alert( valueA + +valueB);    //output:30
 alert( valueA ++valueB);     //Compile error
 </script>

 

总结

本文就 JavaScript 代码的排版、命名、声明、语句、和一些特殊字符的使用等方面,谈了自己对 JavaScript 编程规范的建议。此外,还有许多方面需要深入了解研究,如 with, eval 语句和 this 对象的使用等等。我们在认识其普遍性的同时也需要注意其特殊性,在编写代码时多用心留意,以创造更多更优质的程序代码。

作者:王丹丹

转载:https://www.ibm.com/developerworks/cn/web/1008_wangdd_jscodingrule/?ca=drs-tp4608

<script language="javascript">
 function F1() {
   var valueA  = 1;
   var valueB  = 2;
   return valueA + valueB;
 }
 function F2() {
   var valueA  = 1;
   var valueB  = 2;
   return
       valueA + valueB;
 }
 alert( F1() );  //output: 3
 alert( F2() );  //ouput: undefined
 </script>

<script language="javascript">
 var valueA  = "a";
 var valueB  = "b";
 function f1() {
   var valueA = "c";
   alert("valueA="+valueA);        //output: valueA=c
   valueB = "d";
   alert("valueB="+valueB);        //output: valueB=d
 }
 f1();
 alert("valueA="+valueA);            //output: valueA=a
 alert("valueB="+valueB);            //output: valueB=d
 </script>

<script language="javascript">
 //following section is used to initialize golbal variables             (good)
 var valueA = 0;     //initialize  valueA to be sero                       (bad)
 var valueB = 1;
 ...
 //call f1 function after waiting for 50 seconds.                         (good)
 setTimeout(f1,50000); //set timeout to be 20s                     (copy error)
 ...
 </script>

<script language="javascript">
 var valueA = 1;
 var valueB = valueA         ///bad
       +1;
 var valueC = valueB +      ///good
       valueA;
 alert(valueB);              //output: valueB=2
 alert(valueC);//output: valueC=3
 </script>

举报

  • 相关推荐
  • 大家在看
  • 华为自研仓颉编程语言宣布7月30日开源

    从具体特性来看,在原生智能化方面,仓颉编程语言内嵌AgentDSL的编程框架,实现了自然语言编程语言的有机融合。多Agent协同功能简化了符号表达,模式可自由组合,支持各类智能应用开发。在天生全场景特性上,其轻量化可缩放运行时和模块化分层设计,使得即便内存较小也能顺利运行。同时,全场景领域扩展结合元编程和eDSL技术,支持面向领域声明式开发。 高性能方面�

  • AI日报:百度发布“绘想”平台与MuseSteamer;阿里音频驱动全身数字人模型OmniAvatar

    【AI日报】今日AI领域重要动态:1.开源语音大模型Step-Audio-AQAA发布,实现音频到语音的端到端自然转换;2.百度推出&quot;绘想&quot;平台与MuseSteamer,通过AI一键生成专业级视频;3.浙大与阿里联合发布OmniAvatar,音频驱动数字人技术取得突破;4.百度搜索迎十年来最大改版,新增智能框、百看和AI助手功能;5.xAI开发者控制台新增Grok4及Grok4Code引用,预示新一代AI模型即将发布;6.Gemin

  • AI日报:阿里开源3D数字人项目MNN TaoAvatar;MiniMax Agent上线;罗永浩数字人直播再探“AI+IP”带货模式

    本文汇总了AI领域最新动态:1)阿里开源MNN+TaoAvatar技术,实现手机端3D数字人实时交互;2)MiniMax升级AI工具Agent,新增智能图像搜索和多语言支持;3)罗永浩数字人将登陆百度电商直播;4)OpenAI员工套现近30亿美元,软银成最大接盘方;5)ChatGPT推出深度研究和语音模式升级;6)Meta发布V-JEPA2模型,提升机器人环境适应能力;7)AMD与OpenAI合作推出新一代AI芯片;8)Google Gemini集成Imagen4图像生成模型;9)谷歌AI实现10公里级精准天气预报;10)Gartner预测到2028年80%的AI应用开发时间将缩短50%。

  • 腾讯元宝上线AI编程模式:双栏界面实现边提需求边写代码

    今日,腾讯元宝发布更新,上线AI编程模式。 用户在电脑版选择DeepSeek模型并关闭深度思考后,输入@AI编程”后,即可进入AI编程模式。

  • 海尔青岛洗衣机互联工厂获国际BSCI认证

    海尔青岛洗衣机互联工厂近日通过国际BSCI认证审核,在员工权益保障、环境保护等社会责任维度获得A级评价。这是继2021年成为全球家电行业首个"碳中和"工厂后,该工厂在可持续发展领域再获国际认可。BSCI认证由欧洲对外贸易协会发起,是进入国际供应链的重要通行证。此次认证将助力海尔拓展欧盟高端市场,提升国际竞争力。未来工厂将以认证为新起点,深化智能制造能力,为全球用户提供更优质产品体验。

  • 啊?豆包居然也开始卷AI编程了?

    豆包疯了。 我感觉他好像真的想一统江湖了。 今天我打开豆包,本来只是想让它帮我识别几个表格图片。 结果发现他们更新了一个功能,直接推荐到我的首页来了。 这个功能我用了一下,给我整不会了,就是下面那个加上了&quot;应用创造1.0&quot;标识的AI编程。

  • Meta拟百亿美元投资Scale AI,微美全息(WIMI.US)端侧多模态AI加速开启科技新局

    Meta正与AI初创企业Scale AI洽谈数十亿美元投资,估值或超100亿美元,有望创下私营企业融资纪录。Scale AI为微软、OpenAI等提供数据标注服务,是生成式AI热潮主要受益者。这将是Meta史上最大规模外部AI投资,标志其战略转向。Meta CEO扎克伯格宣布将AI确立为战略重心,2024年将投入650亿美元推进相关项目,重点打造Llama模型成为行业标准。同时,谷歌推出Gemini助手"计划操作"新功能,支持任务自动化管理。科技巨头纷纷重金布局AI,微软向OpenAI注资逾130亿美元,亚马逊投资Anthropic数十亿美元。行业观察认为AI技术普及将推动效率革命,微美全息等企业正通过技术创新赋能产业转型,共同探讨人工智能技术突破新动态。AI正以前所未有的速度重塑全球发展格局。

  • 与 ChatGPT 一起“越陷越深”

    ChatGPT 似乎正在让一些用户走上妄想甚至阴谋论的道路,或者说,至少在某种程度上强化了这类思维模式……

  • FaceTime成诈骗新工具,认准微粒贷客服号码

    近期出现多起冒充贷款客服的FaceTime诈骗案件,诈骗分子伪装成金融机构客服,以"微粒贷利率过高需注销账户"等理由诱导受害者转账。典型案例中,L先生接到自称微粒贷客服的FaceTime来电,对方以"保护资金安全"为由要求将存款转入指定账户,转账后发现被骗。警方提醒:1.警惕陌生FaceTime来电,不透露个人信息;2.凡提及"调整利率""屏幕共享""转账汇款"等均为诈骗;3.遇可疑情况立即拨打官方客服95384核实;4.若已转账要立即报警并冻结账户。建议通过正规银行渠道办理贷款业务,官方客服不会通过FaceTime联系客户。

  • 齐鲁起“智”风!销售易AI CRM首秀青岛,助力企业“用上AI、用好AI”

    6月10日,腾讯云城市峰会在青岛举行,腾讯旗下销售易携中国首款AI+CRM产品NeoAgent亮相。该产品基于腾讯混元大模型和DeepSeek开源模型打造,针对制造业产品复杂、销售周期长等特点,助力企业实现从获客到服务的全周期智能化升级。销售易已在山东获得多家龙头企业支持,其AI+CRM解决方案通过实际应用验证,能有效提升企业运营效率和客户体验。未来,销售易将继续深化与腾讯合作,推动AI技术在CRM领域的创新应用,加速行业数字化转型进程。(140字)

这篇文章对你有价值吗?

今日大家都在搜的词: