日期:2014-05-16  浏览次数:20300 次

[javascript][Error]ie下Error对象

[javascript][Error]ie下Error对象
2011年05月22日
  今天谈一下在IE浏览器下返回执行错误的Javascript代码所在的问题。其中在IE浏览器下,如果你使用了try-catch,那么当出现异常的时候,IE浏览器会传递一个Error对象。
  
  try{
  sldfj
  }catch(e){
  for(var p in e){
  document.writeln(p + “=” + e[p]);
  }
  }
  输出:name=TypeError message=’sldfj’ 未定义 number=-2146823279 description=’sldfj’ 未定义
  其中的number属性是一个整数,表示的是错误码,但这并不是真正的错误码,我们需要先将其做一下转换
  var errCode = err.number& x0FFFF; 这得到真正的错误码,例如上述的-2146823279 转换之后就得到5009。有了这个错误码之后,我们可以到http://msdn.microsoft.com/en-us/library/1dk3k160(V S.85).aspx微软msdn上查找此错误码对应的。5009对应的错误是Undefined identifier。
  javascript Error 对象 错误处理
  Error对象
  Property:
  name: 错误名
  number: 错误号
  description: 描述
  message: 错误信息,多同description
  FF Only 属性
  fileName: 错误发生的文件
  stack: 错误发生时的调用堆栈
  Constructor:
  Error(){
  this(0,”")}
  Error(description){
  this(0,description)}
  Error(number,description){
  ….}
  构造函数参数不带name,是因为Error对象的name对应于它的来源:
  EvalError: 错误发生在eval()中
  SyntaxError: 语法错误,错误发生在eval()中,因为其它点发生SyntaxError会无法通过解释器
  RangeError: 数值超出范围
  ReferenceError: 引用不可用
  TypeError: 变量类型不是预期的
  URIError: 错误发生在encodeURI()或decodeURI()中
  抛出Error:
  throw new Error(0,”Error Demo”);
  new Error可省略:
  throw(”Error Demo”);
  捕获Error:
  try catch finally语句:
  try{
  ..可能错误的语句..}
  catch(e){
  ..错误发生后的处理..}
  finally{
  ..完成后执行的语句块..}
  finally不是必须的
  如果嵌套,两个catch不要使用同一个参数名,以免覆盖
  传入的参数是一个Error对象,可以从中得到错误信息
  FF支持一个try多个catch,因为Js为弱类型不推荐使用
  window.onerror错误捕获:
  window.onerror=function(Msg,Url,Num){}
  onerror事件会传给回调函数3个默认参数
  Msg: 错误信息
  Url: 发生错误的文件的Url
  Num: 错误发生位置的行号
  window.onerror还能处理SyntaxError,比try catch更强大。
  但是onerror属于bom,所以各浏览器厂家对其的支持都不同。
  如IE发生error时,正常的代码会继续执行;在FF中,代码将结束;Safari只支持Image的onerror事件处理。
  Image.onerror
  onerror还可以应用于其它HTMLElement上,最常见的是元素
  
  处理Error:
  判断错误类型:
  catch(e){
  if(e.name==”RangeError”)
  alert(”错误提示”);}
  或
  catch(e){
  if(e instanceof TypeError)
  alert(”错误提示”);}