blob: 6019a61ed3ae67ebb6a8c882b5e00dad3c6a4711 [file] [log] [blame]
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/licenses/publicdomain/ */
// Reflect.has is identical to the `in` operator.
assertEq(Reflect.has({x: 0}, "x"), true);
assertEq(Reflect.has({x: 0}, "y"), false);
assertEq(Reflect.has({x: 0}, "toString"), true);
// The target can be an array; Reflect.has works on array elements.
var arr = ["zero"];
arr[10000] = 0;
assertEq(Reflect.has(arr, "10000"), true);
assertEq(Reflect.has(arr, 10000), true);
assertEq(Reflect.has(arr, "-0"), false);
assertEq(Reflect.has(arr, -0), true);
// And string objects (though not string primitives; see target.js).
var str = new String("hello");
assertEq(Reflect.has(str, "4"), true);
assertEq(Reflect.has(str, "-0"), false);
assertEq(Reflect.has(str, -0), true);
// Proxy without .has() handler method
var obj = {get prop() {}};
for (var i = 0; i < 2; i++) {
obj = new Proxy(obj, {});
assertEq(Reflect.has(obj, "prop"), true);
assertEq(Reflect.has(obj, "nope"), false);
}
// Proxy with .has() handler method
obj = new Proxy({}, {
has(t, k) { return k.startsWith("door"); }
});
assertEq(Reflect.has(obj, "doorbell"), true);
assertEq(Reflect.has(obj, "dormitory"), false);
// For more Reflect.has tests, see target.js and propertyKeys.js.
reportCompare(0, 0);