blob: d889a77162828c91a305115049526db4c44dee6a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
// 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);
|