Movatterモバイル変換


[0]ホーム

URL:


  1. 開発者向けのウェブ技術
  2. JavaScript
  3. JavaScript リファレンス
  4. 標準組み込みオブジェクト
  5. Proxy
  6. Proxy()
  7. has()

このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docsコミュニティーについてもっと知り、仲間になるにはこちらから。

View in EnglishAlways switch to English

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 ⁨2016年9月⁩.

handler.has() は、オブジェクトの[[HasProperty]]内部メソッドに対するトラップです。in 演算子などの操作で使用されます。

試してみましょう

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);// 予想される結果: trueconsole.log("_secret" in proxy);// 予想される結果: falseconsole.log("_secret" in monster);// 予想される結果: true

構文

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

引数

次の引数はhas() メソッドに渡されます。this はハンドラーにバインドされます。

target

ターゲットオブジェクトです。

property

文字列またはSymbol で、プロパティ名を表します。

返値

has() メソッドは、プロパティが存在するかどうかの論理値 (Boolean) を返す必要があります。それ以外の値は論理値に変換されます

解説

介入

このトラップは下記の操作に介入できます。

他にも、[[HasProperty]]内部メソッドを呼び出すあらゆる操作に介入できます。

不変条件

プロキシーの[[HasProperty]] 内部メソッドは、ハンドラー定義が次の不変条件のいずれかに違反する場合、TypeError が発生します。

  • プロパティが対象とするオブジェクトの構成不可な自己プロパティとして存在する場合、そのプロパティを存在しないとして報告することはできません。つまり、Reflect.getOwnPropertyDescriptor()target のプロパティに対してconfigurable: false を返す場合、トラップはtrue を返す必要があります。
  • プロパティは、対象とするオブジェクトの自分自身でプロパティとして存在し、かつ対象とするオブジェクトが拡張可能でない場合、存在しないとして報告できません。つまり、Reflect.isExtensible()targetfalse を返す場合、かつReflect.getOwnPropertyDescriptor()target のプロパティのプロパティ記述子を返す場合、トラップはtrue を返さなければなりません。

in 演算子のトラップ

次のコードではin 演算子をトラップします。

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

次のコードでは不変条件に違反します。

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

仕様書

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

ブラウザーの互換性

関連情報

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp