Requirements:
1) In ES6 property keys are no longer limited to string values, we now also 
have keys that are Symbols.
2) Some meta-programming tasks will requires a way to reflectively obtain a 
list of all public property keys.
3) The existing reflection APIs for property keys (Object.getOwnPropertyNames 
and Object.keys) only return string values and we don't want to break existing 
clients of those functions by returning non-string values.

Solution:
1) Object.getOwnPropertyNames and Object.keys remain unchanged.  They only 
return a string property key values.
2) Reflect.ownKeys(obj) is a new reflection function that returns an iterator.  
The iterator produces the keys of all public own properties of the object pass 
as an argument.  This includes both string and Symbol key values.  A property 
whose key is a private Symbol is not a public property and its key is not 
returned by the ownKeys iterator.
3) The [[OwnPropertyKeys]] internal method is defined to return an iterator 
with the same definition as used for Reflect.ownKeys.  (Reflect.ownKeys is 
implemented as a call to this internal method).  [[OwnPropertyKeys]] replaces 
the like-named internal method in the current spec. draft and also replaces the 
[[GetOwnPropertyNames]] internal method used in the wiki Proxy proposals.
4) ownKeys is the corresponding Proxy trap. The getOwnPropertyNames trap is 
removed.
5) Object.keys and Object.getOwnPropertyNames are respecified in terms of 
[[OwnPropertyKeys]].  They internally drain the iterator and continue to return 
arrays of strings.

Any objections?

Allen




_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to