Source code

Revision control

Copy as Markdown

Other Tools

// Create a symbol and a wrapper for it.
var s = Symbol();
var so = Object(s);
// Create a symbol-valued property key using |s|.
var o = {[s]: 0};
// The default Symbol.prototype[@@toPrimitive] will unbox the symbol object as needed.
assertEq(o.propertyIsEnumerable(so), true);
assertEq(o.hasOwnProperty(so), true);
// After redefining Symbol.prototype[@@toPrimitive], any calls to the ToPropertyKey
// abstract operation will no longer unbox the symbol object.
Object.defineProperty(Symbol.prototype, Symbol.toPrimitive, {
value: function() {
return "foo";
}
});
// |o| doesn't have a string-valued property named "foo".
assertEq(o.propertyIsEnumerable(so), false);
assertEq(o.hasOwnProperty(so), false);
o.foo = 123;
// After |o.foo| was added, both calls should return true again.
assertEq(o.propertyIsEnumerable(so), true);
assertEq(o.hasOwnProperty(so), true);
if (typeof reportCompare === "function")
reportCompare(0, 0);