簡體   English   中英

使所有屬性可枚舉

[英]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 復制可枚舉屬性,然后手動添加stackmessage屬性:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM