[英]Make all properties enumerable
假设我有一个错误 object: new Error('foo')
我想序列化它,问题是堆栈/消息属性不可枚举。
所以我想做这样的事情:
const json = JSON.stringify(Object.assign({}, new Error('foo')));
但这会复制属性并且它们仍然不可枚举,这意味着它们不会被序列化。 所以我的问题是 - 有没有办法复制属性但让它们都可以枚举,就像这样:
const v = {};
for(const [key, val] of Object.entries(new Error('foo')){
Object.defineProperty(v, key, {
value: val,
enumerable: true
})
}
有没有办法只为两个属性做到这一点?
您可以使用 spread 复制可枚举属性,然后手动添加stack
和message
属性:
const err = new Error('foo');
const errorWithEnumerableStackAndMessage = { ...err, err.stack, err.message };
对于更通用的解决方案,要创建具有可枚举属性的新 object,请使用Object.getOwnPropertyNames
:
const toEnumerable = (obj) => { return Object.fromEntries( Object.getOwnPropertyNames(obj).map(prop => [prop, obj[prop]]) ); }; console.log(toEnumerable(new Error('foo')));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.