如何将javascript错误克隆到标准对象中

如何将javascript错误克隆到标准对象中,javascript,logging,properties,runtime-error,clone,Javascript,Logging,Properties,Runtime Error,Clone,具体来说,我想将一个Javascript错误转换为一个对象,该对象的属性可以列出,因此console.logged try { throw new Error('418 : Blue Teapot of Death'); } catch (error) { for (var k in arg) { console.log('Key found: ' + k); } // Outputs nothing } 编辑: 使用@YeahBoy solution,我采用的最终解决方案是使

具体来说,我想将一个Javascript错误转换为一个对象,该对象的属性可以列出,因此console.logged

try {
    throw new Error('418 : Blue Teapot of Death');
} catch (error) {
    for (var k in arg) { console.log('Key found: ' + k); } // Outputs nothing
}
编辑

使用@YeahBoy solution,我采用的最终解决方案是使用pick函数:

var copy_with_enumerable_properties = function (obj) {
    var props = Object.getOwnPropertyNames(obj); // Include non-enumerable properties
    return _.pick(obj, props);
};

try {
    throw new Error('418 : Blue Teapot of Death');
} catch (error) {
    var error_obj = copy_with_enumerable_properties(error);
    error_obj.stack = error_obj.stack.split('\n');

    console.log(JSON.stringify(error_obj, null, 2));
}
试试这个

try {
    throw new Error('418 : Blue Teapot of Death');
} catch (error) {

    var prop = Object.getOwnPropertyNames(error);
    for (var k in prop) { console.log('Key found: ' + prop[k]); }
}
由于某种原因,它缺少“
name
”属性,该属性设置为错误的类型名称,例如“TypeError”或“Error”。因为我在一些浏览器上也遇到了问题,我认为这是Firefox,我使用了
[…新设置(['name','message','stack',…Reflect.ownKeys(myErrorObj)])]
--设置
是一种快捷方式,可以确保每个键只包含一次。