如何获取javascript错误的原型成员对象键?
当我发现错误时,我遇到了这个问题,我不知道控制台输出是否以这种方式运行,因为有关Error类/类型/...。
try {
throw new Error('sample error')
} catch (ex) {
console.log(ex instanceof Error)
//true
console.log(ex.message)
//sample error
console.log(Object.keys(ex))
//[] fine as i suppose the class/type members exist in prototype
console.log(ex.__proto__)
//{name:'error', message:'', constructor:.... i suppose these are the default properties of Error
console.log(Object.keys(ex.__proto__))
//[] how come empty array still???
}
我认为最后一条语句console.log(Object.keys(ex.__proto__))
应该返回['name','message'...]。只是想知道我做错了什么。
答案 0 :(得分:2)
由于某些原因,name
不能枚举message
和Error.prototype
属性。但是您可以使用Object.getOwnPropertyNames
来获取属性的列表,这些属性都是可枚举的和不可枚举的:
try {
throw new Error('sample error')
} catch (ex) {
console.log(Object.getOwnPropertyNames(ex.__proto__));
}
Object.keys
将返回一个仅包含可枚举(和自有)属性的数组。
请注意,__proto__
已过时。最好改用Object.getPrototypeOf
:
try {
throw new Error('sample error')
} catch (ex) {
console.log(Object.getOwnPropertyNames(Object.getPrototypeOf(ex)));
}
答案 1 :(得分:1)
Object.getOwnPropertyDescriptor(ex.__proto__, "name")
# => {value: "Error", writable: true, enumerable: false, configurable: true}
不可枚举的属性不会显示在Object.keys
中。