[英]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.