background image

你可以为错误信息加入任何需要的信息,来帮你成功解决问题。我建议在错误信息中提供
发生错误的函数名称以及错误原因。看下面这个函数:

  function addClass(element, className){

  element.className += " " + className;

  }

  这个函数的功能是向一个给定的 element 加入新的 CSS class(这在 JavaScript 中
非常普遍)。但如果 element 是 null 的时候会发生什么?你会得到一个这样的错误提示
“object expected”,很隐晦。然后你需要查看执行堆栈(如果浏览器支持这个功能)来准
确定位错误的源头。如果我们抛出一个错误调试就变得简单了:

  function addClass(element, className){

  if (element != null && typeof element.className == "string"){

  element.className += " " + className;

  } else {

  throw new Error("addClass(): First arg must be a DOM element.");

  }

  }

  先不讨论如何精确的判断对象是否是一个 DOM element,这个方法现在能够在非
法的 element 参数传入时提供一个更明确的错误信息。看到了如此详尽的错误描述你就
能立刻找到错误的源头了。我习惯把 throw error 看作是贴一个任务贴纸,告诉我错误的
原因。

  懂得了如何 throw error 只是事情的一半;懂得何时 throw error 则是另一半。因为
JavaScript 并不对参数进行类型检查,许多开发者都错误的认为他们应该在所有的函数
中进行该检查。那样的话是不实际的,而且会降低脚本的执行效率。问题的关键在于找到
最有可能出错的代码部分,并且只在那里 throw error。一句话就是只在已经发生 error
的地方 throw error。

  如果一个函数只被一个已知的实体调用,那么错误检查基本上是没有必要的(例如私
有函数就是这样);如果你不能事先确定所有函数被调用的地点,那么你需要进行错误检
查并 throw 自己的 error。throw error 最好的地方是功能函数,那些是脚本环境基本组