JavaScript的陷阱

作者:秦歌 来源:随网之舞 时间:2008-10-28 19:52:00 

这本来是翻译Estelle Weyl的《15 JavaScript Gotchas》,里面介绍的都是在JavaScript编程实践中平时容易出错或需要注意的地方,并提供避开这些陷阱的方法,总体上讲,就是在认清事物本质的基础样要坚持好的编程习惯,其实这就是Douglas Crockford很久以前提出的JavaScript风格要素问题了,有些内容直接是相同的,具体请看《Javascript风格要素(1)》《Javascript风格要素(2)》。在翻译的过程中,我又看到了贤安去年翻译的《JavaScript的9个陷阱及评点》,其内容又有些交叉在一起,所以我就在现有翻译的基础上做了一个简单的拼合,并依据自己的理解增加了一些注释和解释。

  1. 区分大小写:变量名、属性和方法全部都区分大小写

  2. 不匹配的引号、圆括号或花括号将抛出错误

  3. 条件语句:3个常见陷阱

  4. 换行:一直用分号结束语句来避免常见的换行问题

  5. 标点法:在对象声明的尾部逗号将导致出错

  6. HTML id 冲突

  7. 变量作用域:全局变量对局部变量

  8. 函数重载:当重载不存在时,覆盖函数

  9. 区分string.replace()函数不是全局的

  10. parseInt应该包含两个参数

  11. “this”和绑定问题

  12. 为参数设置默认值,以免你遗漏它们

  13. for each循环是用于对象而不是数组

  14. switch语句需要点技巧

  15. 总是在检查undefined前检查null

  16. 时间处理陷阱

区分大小写

变量名和函数名都是区分大小写的。就像配错的引号一样,这些大家都知道。但是,由于错误是不作声的,所以这是一个提醒。为自己选择一个命名规则,并坚持它。而且,记住JavaScript中的原生函数和CSS属性都是骆驼拼写法(camelCase)

getElementById(’myId’) != getElementByID(’myId’); getElementById(’myId‘) != getElementById(’myID‘); document.getElementById('myId').style.Color;

不匹配的引号、圆括号或花括号

避免陷入不匹配的引号、圆括号或花括号陷阱的最好方式是编码时一直同时写出打开和关闭这两个元素符号,然后在其中间加入代码。开始:

var myString = ""; function myFunction(){ if(){ }}alert(parseInt(var1)*(parseInt(var2)+parseInt(var3)));

每当你打开一个元素,请关闭它。当你添加了关闭圆括号后,你再把函数的参数放进圆括号中。如果有一串圆括号,统计所有打开的圆括号和所有关闭的圆括号,并且确保这两个数字相等。

条件语句(3个陷阱)

  1. 所有的条件语句都必须位于圆括号中。执行语句主体不管是一句还是多句都强烈建议用花括号包围起来,这样能避免很多因修改或嵌套而产生的潜在错误。

    if(var1 == var2){}
  2. 不要犯无意地使用赋值运算符的错误:把第二个参数的值赋给第一个参数。因为它是一个逻辑问题,它将一直返回true且不会报错。

    if(var1 = var2){}
  3. JavaScript是弱类型,除了在switch语句中。当JavaScript在case比较时,它是非弱类型。

    var myVar = 5;if(myVar == '5'){ alert("hi");  }switch(myVar){ case '5': alert("hi"); }

换行

当心JavaScript中的硬换行。换行被解释为表示行结束的分号。即使在字符串中,如果在引号中包括了一个硬换行,那么你会得到一个解析错误(未结束的字符串)。

var bad  = '<ul id="myId">  <li>some text</li>  <li>more text</li>  </ul>'; var good = '<ul id="myId">' + ‘<li>some text</li>‘ + ‘<li>more text</li>‘ + ‘</ul>’;

前面讨论过的换行被解释为分号的规则并不适用于控制结构这种情况:条件语句关闭圆括号后的换行并不是给其一个分号。

一直使用分号和圆括号,那么你不会因换行而出错,你的代码易于阅读,且除了那些不使用分号的怪异源码外你会少一些顾虑:所以当移动代码且最终导致两个语句在一行时,你无需担心第一个语句是否正确结束。

多余的逗号

在任何JavaScript对象定义中,最后一个属性决不能以一个逗号结尾。Firefox不会出错,而IE会报语法错误。

var theObj = {        city : "Boston",        state : "MA",  }

标签:陷阱,编程,javascript
0
投稿

猜你喜欢

  • AJAX简单应用实例-弹出层

    2011-04-14 10:55:00
  • sql如何在线创建新表?

    2010-06-22 21:21:00
  • sql查询点滴记录

    2012-01-05 19:07:49
  • 如何实现html表格里隔行换色

    2007-10-19 13:42:00
  • 轻松接触MaxDB和MySQL之间的协同性

    2008-11-27 16:25:00
  • list视图方式设计浅析

    2008-12-21 16:04:00
  • 解析:以mysql_开始的未定义引用错误

    2008-12-19 17:58:00
  • 如何在SQL2000的查询中使用XML-Data?

    2010-06-18 19:26:00
  • 鼠标驱动图片变化

    2009-07-26 10:03:00
  • 判断字段是否被更新 新旧数据写入Audit Log表中

    2012-01-29 17:56:33
  • 动态产生XML文档的几种方式

    2007-10-15 18:30:00
  • photoshop快捷键大全及使用技巧

    2007-10-26 07:40:00
  • JavaScript版无组件上传类

    2007-10-06 23:16:00
  • RC4经典加密算法asp/VBs版本代码

    2008-02-17 17:32:00
  • oracle 常见等待事件及处理方法

    2009-04-24 12:01:00
  • 谈谈图片如何影响转换率

    2011-08-10 19:14:08
  • ASP 关于动态数据显示页面得锚点

    2007-11-04 20:28:00
  • gem install mysql报错checking for mysql_qu

    2010-11-11 12:13:00
  • 从两个方面讲解SQL Server口令的脆弱性

    2009-01-08 13:40:00
  • SQL Server 数据页缓冲区的内存瓶颈分析

    2012-08-21 10:49:11
  • asp之家 网络编程 m.aspxhome.com