Javascript - Error对象的名称和消息属性在哪里?

时间:2013-03-27 09:20:20

标签: javascript jquery error-handling

试图理解为什么使用“for ... in”方法无法找到Javascript Error对象的两个跨浏览器属性,即“name”和“message”

// error code
...
}catch( err ){

  // in FF this lists 3 properties for fileName, lineNumber and columnNumber...
  // but NOT name or message!
  for(var propertyName in err) {
    $( '#diags' ).append( 'err property: ' + propertyName + ', 
       value: ' + err[ propertyName ] + '<br>' );
  }
  // this line prints fine:
  $( '#diags' ).append( 'Error - name:' + err.name + ', message: ' + err.message + '<br>' );
}

修改

我被问到名字和信息是什么。这些是所有错误在任何浏览器中都有的属性(它们是吗?)...所以在上面的代码中我添加了一行额外的代码,显示这些“属性”或者它们打印得很好

EDIT2

按照Mati的回答,我做了一些搜索。这似乎回答了“检查”问题:Is it possible to get the non-enumerable inherited property names of an object?

1 个答案:

答案 0 :(得分:7)

for...in loop不会迭代不可枚举的属性。

var e = new Error('a');

console.log(e.propertyIsEnumerable('name'));
console.log(e.propertyIsEnumerable('message'));
console.log(e.propertyIsEnumerable('fileName'));
console.log(e.propertyIsEnumerable('lineNumber'));
console.log(e.propertyIsEnumerable('columnNumber'));

for(var prop in e)
{
    console.log(prop + ': ' + e[prop]);
}

输出

false
false
true
true
true
fileName: index.html
lineNumber: 25
columnNumber: 0