常见的JavaScript错误

作者: Richardy,  出处:IT专家网, 责任编辑: 包春林,
2009-05-14 04:00
  当我们初次尝试在Web页面上运行JavaScript时,有可能代码不会按照设想的那样工作。这时候我们往往会收到出错信息的提示,信息会告诉我们到底发生了什么。

  脚本不运行的原因有很多,但是人们在编写脚本的时候会出现一些常见的错误。事实上,如果我们检查一下这些常见错误, 就很有可能发现脚本不能正常运行的原因或者至少会我们纠正一些错误。当然,要发现所有错误的可能是很小的,不过一旦纠正常见错误,那么其他错误也相对变得 容易寻找了。

  到底,我们要检查的常见错误是哪一些呢?要怎样才能找到这些常见错误并将其修复呢?这就是我们这篇文章要讲的内容。

  错误搭配或错误放置的大括弧

  JavaScript使用{}来包含命令。你可以用这对大括弧来包含一组语句。这些命令语句可以视为一个模块,使用多个条件语句或者组合循环时,这些模块可以相互嵌套。当这些语句的层次分多了,就很有可能出现嵌套错误的情况,记住每个{符号都应该有相对应的}符号。

  另一种情况是当我们拥有大量代码块嵌套的时候,我们有可能丢失代码级别的路径,并将代码放置在错误的层级中,最后导致代码不能依照预期的情况生效。

  纠正这类由于括弧错误匹配造成的问题,最简单的方法是获取代码然后使用一些不同的高亮度标记标出相应对。在代码的开始端用高亮度标记第一个{符 号。然后沿着代码往下找到同级别的},再用相同的颜色将其高亮度标记出来。然后用另一种颜色高亮度标记下一个{,再用相同的颜色标记下一个},依此类推, 相同级别的{}保持相同的颜色,就可以避免出错了。

  错误匹配的引号

  使用HTML和JavaScript,我们可以用(")或(')。当我们的HTML代码带有document.write语句时,要在HTML 中使用"",在JavaScript中使用''。如果这样做,就不会出现诸如document.write('< a href="mypage.htm">');因为这个引号完全嵌套在单引号中。

  还有两种可能的情况。我们可能意外地打上了回括的单引号,导致接下来的语句作为文本字符串的一部分结束,因此代码不能生效。另一种情况是,你或 许需要在文本中包含一个真正的单引号。为了不让带有文本的单引号语句成为文本的结束,需要在它前面加上一个反斜线来回避,如 document.write('Let/'s go.')。

  意外关闭或忘记关闭引号都会导致代码失效。我们可以通过代码打印以及三种高亮度标记来检查这样的错误。在文本开始端,需要避免歧义的地方,以及文本的末端高亮度标记就可以了。

  条件句中缺少小括号

  编写条件语句时,需要在条件上使用小括号。而出现多重条件时,要为每一个条件都括上括弧。在实际操作中,我们很容易忘记将条件括入括弧内,而嵌套层级过多的时候,就更容易弄错层级。

  解决这一问题的方法与解决大括弧的错误匹配类似,只需为没一个层级的括弧标上不同的颜色以示标记就可以了。

  遗漏的分号

  每一个JavaScript语句都应该以分号结尾。有时,我们看到的JavaScript代码中每一个语句都单独成行,而分号与代码分离了,不过如果我们需要重新整理代码的时候,将两个语句放在同一行而忘记为其添加一个分号,就会发现代码无法生效。

  解决这一问题最简单的方法是重新格式化代码,以使每个代码都以单独成行的形式出现,并且确保每一行都以分号结束。这样就可以随时将代码结合起来而不会影响其正常运行了。

  大写匹配错误

  JavaScript对于大小写的区分是很敏感的。这意味着myvar和myVar是两个不同的变量。要避免出现大小写导致的变量错误,建议大 家采用标准方法为变量命名,例:统一使用thisIsMyVariable的格式或者this_is_my_variable格式。这样可以有效区别那些 只是在大小写上有不同的变量,而在查找错误的时候,醒目的格式特点也有利于使用准确的指定寻找。

  如果两个变量的命名相同还可能出现一种问题,即不是所有的浏览器都能正确执行代码,且有可能视那些仅存在大小写异同的变量为相同变量,可想而知,那些大写不正确的代码将无法在一些浏览器中运行。

  在对象加载前引用对象

  页面标头部分的JavaScript代码没有包含在加载页面前运行的函数之内。页面内容部分的JavaScript会作为页面的一部分加载。从 装载事件处理器中调用的JavaScript会在加载完页面后运行。函数会在JavaScript代码调用时运行。事件处理器会在相关事件触发时运行。

  如果JavaScript正通过文档对象模型访问web页面的内容,那么你正引用的那些对象必须在引用前已经加载完毕才可以。引用一个尚未完成 加载的对象将出现错误。为纠正这一问题,我们应该确保不引用任何来自页面标头部分JavaScript的对象,除非它包含在页面完成加载后调用的函数中 时。对页面内容部分JavaScript对象的引用则取决于JavaScript和对象获得加载速度的顺序。最好是将对象的处理情况转移到页面装载事件处 理器中。

  预留字作为变量名使用

  对于JavaScript语言来说有一些词具有特殊含义。这些预定字不能作为变量使用。如果我们不小心将这些预留字作为变量名使用,那么处理的结果将不尽人意。

  最好的解决方法是熟悉这些预留字列表。如果我们按照适当的命名标准为变量命名,那么将可以避免把预留字当成变量名的情况,因为标准的命名习惯会阻止我们使用这些预留字。

  函数调用时丢失的参数

  定义函数的时候,我们会定义参数的数量。编写代码调用函数时,我们要传送符合预计的参数。要检查参数的数量或者检查代码发送调用请求后接收参数的时间相对而言都是比较容易的。如果参数已经被赋予了合理的名称,那么还应该明显表示出哪些需要被传送到每个参数中。

  在这种情况下,如果我们决定向函数添加额外的参数就有可能出现问题。所有对函数的调用现在都需要更新为传送该额外参数。如果函数是一个链接到许多页面的外部JavaScript,那就很容易遗漏掉从一个页面到另一个页面中对函数的调用。

  不受支持的文档对象模式

  大多数浏览器都支持W3C标准文档对象模式。假定我们正在使用这些浏览器中的一个,那么我们在浏览器中测试被编辑成使用标准DOM的脚本时,脚 本能正常运行。但是有可能页面访问者的浏览器版本比较陈旧。如果想要使脚本也能支持这一部分访问者,就需要将脚本编辑成使用跨浏览器的DOM。

  有许多旧版本浏览器的脚本可以从互联网下载,当然新的脚本也同样可以下载。为了纠正这一错误,我们需要重写脚本以使用标准DOM或跨浏览器DOM。如果脚本涉及document.all或document.layers,我们就可以辨别出它使用的是旧的DOMs。

 

作者: Richardy,  出处:IT专家网, 责任编辑: 包春林, 

2009-05-14 04:00