Reflect.has()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2016.
The Reflect.has()
static method is like the in
operator, but
as a function.
Try it
Syntax
js
Reflect.has(target, propertyKey)
Parameters
target
-
The target object in which to look for the property.
propertyKey
-
The name of the property to check.
Return value
A Boolean
indicating whether or not the target
has the property.
Exceptions
TypeError
-
Thrown if
target
is not an object.
Description
Reflect.has()
provides the reflective semantic of checking if a property is in an object. That is, Reflect.has(target, propertyKey)
is semantically equivalent to:
js
propertyKey in target;
Reflect.has()
invokes the [[HasProperty]]
object internal method of target
.
Examples
Using Reflect.has()
js
Reflect.has({ x: 0 }, "x"); // true
Reflect.has({ x: 0 }, "y"); // false
// returns true for properties in the prototype chain
Reflect.has({ x: 0 }, "toString");
// Proxy with .has() handler method
obj = new Proxy(
{},
{
has(t, k) {
return k.startsWith("door");
},
},
);
Reflect.has(obj, "doorbell"); // true
Reflect.has(obj, "dormitory"); // false
Reflect.has
returns true
for any inherited properties, like the in
operator:
js
const a = { foo: 123 };
const b = { __proto__: a };
const c = { __proto__: b };
// The prototype chain is: c -> b -> a
Reflect.has(c, "foo"); // true
Specifications
Specification |
---|
ECMAScript Language Specification # sec-reflect.has |
Browser compatibility
BCD tables only load in the browser