Let's take the following code:
var obj = {};
var x = Symbol();
Object.defineProperties(obj, {
[x]: {
value: true,
writable: true
},
"property2": {
value: "Hello",
writable: false
}
// etc. etc.
});
console.log(obj[x])
Is this valid?
With the native Object.defineproperties code we get in the console.log true.
With the polyfill of zone.js
which is of the form of :
Object.defineProperties = function (obj, props) {
Object.keys(props).forEach(function (prop) {
Object.defineProperty(obj, prop, props[prop]);
});
return obj;
};
we get for the same code of console.log undefined.
This is because of the Object.keys function. I googled around and did not find in any place if this should be allowed or not.
Symbol()
(that would be the exact key name in this case). If you really want to be able to key by an arbitrary object - use the ES2015Map()
– Jocose