Movatterモバイル変換


[0]ホーム

URL:


  1. Web
  2. JavaScript
  3. Reference
  4. Standard built-in objects
  5. Proxy
  6. Proxy()
  7. has()

handler.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⁩.

Thehandler.has() method is a trap for the[[HasProperty]]object internal method, which is used by operations such as thein operator.

Try it

const handler = {  has(target, key) {    if (key[0] === "_") {      return false;    }    return key in target;  },};const monster = {  _secret: "easily scared",  eyeCount: 4,};const proxy = new Proxy(monster, handler);console.log("eyeCount" in proxy);// Expected output: trueconsole.log("_secret" in proxy);// Expected output: falseconsole.log("_secret" in monster);// Expected output: true

Syntax

js
new Proxy(target, {  has(target, property) {  }})

Parameters

The following parameters are passed tohas() method.this is bound to the handler.

target

The target object.

property

A string orSymbol representing the property name.

Return value

Thehas() method must return aBoolean indicating whether or not the property exists. Other values arecoerced to booleans.

Description

Interceptions

This trap can intercept these operations:

Or any other operation that invokes the[[HasProperty]]internal method.

Invariants

The proxy's[[HasProperty]] internal method throws aTypeError if the handler definition violates one of the following invariants:

  • A property cannot be reported as non-existent, if it exists as a non-configurable own property of the target object. That is, ifReflect.getOwnPropertyDescriptor() returnsconfigurable: false for the property ontarget, the trap must returntrue.
  • A property cannot be reported as non-existent, if it exists as an own property of the target object and the target object is not extensible. That is, ifReflect.isExtensible() returnsfalse ontarget, andReflect.getOwnPropertyDescriptor() returns a property descriptor for the property ontarget, the trap must returntrue.

Examples

Trapping the in operator

The following code traps thein operator.

js
const p = new Proxy(  {},  {    has(target, prop) {      console.log(`called: ${prop}`);      return true;    },  },);console.log("a" in p);// "called: a"// true

The following code violates an invariant.

js
const obj = { a: 10 };Object.preventExtensions(obj);const p = new Proxy(obj, {  has(target, prop) {    return false;  },});"a" in p; // TypeError is thrown

Specifications

Specification
ECMAScript® 2026 Language Specification
# sec-proxy-object-internal-methods-and-internal-slots-hasproperty-p

Browser compatibility

See also

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp