ToPropertyDescriptor, [[HasProperty]], & [[HasOwnProperty]]

Andrea Giammarchi andrea.giammarchi at
Thu May 8 14:38:44 PDT 2014

that does not save you from errors when `Object.prototype.get =
function(){}` since `writable` and `get/set` cannot coexist in a descriptor
... a safe approach is to create `var descriptor = Object.create(null);`
and then set its `value` later on before assignment.

I remember early discussion with Allen and Brendan about this, the solution
was a hybrid [[HasNonObjectProperty]] check so that everything inherited
except `Object.prototype` was considered ... although:

   1. we have two kind of descriptors, accessors and value descriptors. I
   don't know who would create classes in order to inherit just a couple of
   propeties ... like `new WritableButNotConfigurable(value)` ? Has anyone
   ever seen a piece of code like that?
   2. accordingly to point one, descriptors should rather change into
   `null` objects ASAP and stop this descriptor minefield I am pretty sure
   nobody expect or desire to work like that

Changing that part of the specs iw say easier than defining a new
[[HasNonObjectProperty]] pattern, IMO

My 2 cents

On Thu, May 8, 2014 at 1:25 PM, John-David Dalton <
john.david.dalton at> wrote:

> ES6 additions like Object.assign use [[OwnPropertyKeys]] for getting the
> keys of `source` objects. This helps avoid the method gotchas faced by
> developers previously with things like `Object.prototype.writable = true`
> and `Object.defineProperty(o, 'foo', { value: 'bar' })`.
> See
> of section)
> "Bear in mind that these options are not necessarily own properties so, if
> inherited, will be considered too. In order to ensure these defaults are
> preserved you might freeze the Object.prototype upfront, specify all
> options explicitly, or point to null as __proto__ property."
> It's the reason I pre-populate my descriptor attributes with false even
> though false is the default. See
> With methods like Object.assign using [[OwnPropertyKeys]] does it make
> sense to make things like ToPropertyDescriptor use [[HasOwnProperty]] too.
> I think it would be a win for consistency and dev use.
> Thoughts?
> - JDD
> _______________________________________________
> es-discuss mailing list
> es-discuss at
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the es-discuss mailing list