您的位置:寻梦网首页编程乐园JavaScriptJavaScript 高级教程
第 1 课 第 2 课 第 3 课 第 4 课 第 5 课

JavaScript高级教程 - 第五课

作者: Thau   

第三页:一般性程序错误

多数错误只是无聊的语法错误。 记住关闭那些引号, 大括号和 小括号会花费很长时间, 不过幸运的是JavaScript自动错误检 测器能捕获大部分此类错误。 虽然JavaScript错误检测器随着 日渐复杂的流览器而不断完善, 但是一些错误仍会溜走。 下面 是一些需要留意的常见错误:

混淆变量名或函数名

大写和复数变量和函数名产生的错误令人烦恼地经 常出现, 有时JavaScript错误检测器不能捕获它们。 通过建立和坚持使用一种对变量和函数的命名协定, 会大大减少这些麻烦的数量。 例如, 我全部用小写 字母定义变量, 并用下划线代替空格 (my_variable, the_data, an_example_variable), 用内置符号表 示函数 (addThreeNumbers(), writeError()等)。 我避免使用任何复数, 因为我总是忘记那些变量是 不是复数。

偶然地使用了保留字

一些字不能作为变量名, 因为它们已经被JavaScript 使用。 例如, 不能定义一个叫“if”的变量, 因为 它实际上是JavaScript的一部分 - 如果使用“if”, 你会遇到各种麻烦。 当你因为使用命名为“if”的 变量而变得疯狂时, 一个叫做“document”的变量 是很诱人的。 不幸的是, “document”是一个 JavaScript对象。 另一个经常遇到的问题是把变量 命名为“name”(窗体元素有“names”属性)。 把 变量命名为“name”不会总出问题, 只是有时 - 这会更使人迷惑 - 这就是避免使用“name”变量的 原因。

不幸的是, 不同的流览器有不同的保留字, 所以没 有办法知道该回避哪些字。 最安全的办法是避免使 用已经成为JavaScript一部分的字和HTML使用的字。 如果你因为变量遇到问题, 并且不能发现哪儿错了, 试着把变量改个名字。 如果成功了, 你或许就避开 了保留字。

记住在逻辑判断时应该用两个等号

一些流览器能捕获这种错误, 有些却不能。 这是一 种非常常见的错误, 但是如果流览器不能替你指 出来, 你就很难发现。 下面是一个这种错误的例子:

var the_name = prompt("what's your name?", "");
if (the_name = "the monkey")
{
    alert("hello monkey!");
} else {
    alert("hello stranger.");
}

这段代码将产生“hello monkey!”警告对话框 - 不管你在提示里敲的是什么 - 这不是我们希望的。 原因是在if-then语句中只有一个等号, 这句话告 诉JavaScript你想让一件事等于另一件。 假设你在 提示中敲的是“robbie the robot”。 最开始, 变 量the_name的值是“robbie the robot”, 但是随 后if语句告诉JavaScript你想把the_name设为 “the monkey.”。 于是JavaScript很高兴地执行你 的命令, 送一个“true”消息给if-then语句, 结果 警告对话框每次都出现“hello monkey!”。

这种阴险的错误会使你发疯, 所以注意使用两个 等号。

偶然给变量加上了引号, 或忘了给字符串加引号

我不时遇到这个问题。 JavaScript区分变量和字符 串的唯一方法是:字符串有引号, 变量没有。 下面 有一个明显的错误:

var the_name = 'koko the gorilla';
alert("the_name is very happy");

虽然the_name是一个变量, 但是程序还会产生一个 提示“the_name is very happy,”的警告对话框。 这是因为一旦JavaScript看见引号包围着某些东西 就不再考虑它, 所以当你把the_name放在引号里, 你就阻止了JavaScript从内存中查找它。

下面是一个不太明显的此类错误的扩展(我们已经 在第三天的课程里见过):

function wakeMeIn3()
{
    var the_message = "Wake up!  Hey!  Hey!  WAKE UP!!!!";
    setTimeout("alert(the_message);", 3000);
}

这里的问题是你告诉JavaScript三秒后执行alert (the_message)。 但是, 三秒后the_message将不再 存在, 因为你已经退出了函数。 这个问题可以这样 解决:

function wakeMeIn3()
{
   var the_message = "Wake up!";
   setTimeout("alert('" + the_message+ "');", 3000);
}

把the_message放在引号外面, 命令“alert('Wake up!');”由setTimeout预定好, 就可以得到你想 要的。

这只是一些可能在你的代码中作祟的很难调试的 错误。 一旦发现了它们, 就有不同的或好或差的方 法来改正错误。你很幸运, 因为你能从我的经验和 错误中获益。 >>

JavaScript高级教程
第一页JavaScript高级教程- 第5天
第二页 打印变量
第三页 一般性程序错误
第四页 修正错误
第五页 好的编程实践
第六页 按速度优化JavaScript代码
第七页 下面讲什么?

[第1课][第2课][第3课][第4课][第5课]

来源: Wired Digital Inc.