【问题标题】:how can I remove prototype fields from an object?如何从对象中删除原型字段?
【发布时间】:2019-05-17 22:16:03
【问题描述】:

除此方法外,我如何从对象中删除原型字段?

const input = {foo: 'bar', __proto__: {unwanted: 'things'}}
expect(JSON.parse(JSON.stringify(input))).toEqual({foo: 'bar'})  // true
// this works but is there a cleaner way ?

【问题讨论】:

标签: javascript json ecmascript-6


【解决方案1】:

您可以使用Object.create 并将null 传递给它,这将创建没有prototype 属性的干净对象,然后您可以为该对象创建属性,但请注意您不能使用Object.prototype 之类的方法hasOwnProperty(), toString(), valueOf() 等等

const input = Object.create(null);
input.foo = 'bar';
console.log(input);

【讨论】:

  • 这会创建深拷贝还是浅拷贝?
  • @OrthoHomeDefense 它创建了一个完整的空对象,就像{} 一样,没有任何属性,包括原型
  • 哦,我误解了你的回答。谢谢。
【解决方案2】:

这取决于您要达到的目标,但我通常建议使用.hasOwnProperty 检查该字段是否为原型字段

参考:MDN

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    • 2012-09-08
    • 1970-01-01
    • 2021-10-12
    • 2017-01-26
    • 2017-10-27
    • 1970-01-01
    相关资源
    最近更新 更多