Sai Ram
Sai Ram

Reputation: 4392

unable to delete javsacript object property

I created a object using Object.create in the following way.

var myObject = {
  price: 20.99,
  get_price: function() {
    return this.price;
  }
};

var customObject = Object.create(myObject, {
    price: {
      value: 100
    }
  }
);

console.log(delete customObject.price);

I tried to delete customObject price using

delete customObject.price returns false

Upvotes: 0

Views: 71

Answers (1)

Pointy
Pointy

Reputation: 413737

The second parameter to Object.create() is interpreted exactly the same way as the second parameter of Object.defineProperties(). That false is being returned from the delete expression because the property you're deleting is an own non-configurable property and you're not in "strict" mode. In "strict" mode you'd get an exception.

If you created the property with the "configurable" flag set to true, you would get true from the delete:

var customObject = Object.create(myObject, {
    price: {
      value: 100,
      configurable: true
    }
  }
);

Or you can create the object and just set the property with a simple assignment:

var customObject = Object.create(myObject);
customObject.price = 100;

Such properties are always "born" as configurable.

You can use Object.getOwnPropertyDescriptor(customObject, "price") to check whether the property you're deleting is configurable:

if (Object.getOwnPropertyDescriptor(customObject, "price").configurable)
  delete customObject.price;

Upvotes: 4

Related Questions