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

View in English Always switch to English

handler.deleteProperty()

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.deleteProperty() メソッドは、オブジェクトの [[Delete]] 内部メソッドに対するトラップです。 delete などの操作で使用されます。

試してみましょう

const monster = {
  texture: "scaly",
};

const handler = {
  deleteProperty(target, prop) {
    if (prop in target) {
      delete target[prop];
      console.log(`property removed: ${prop}`);
      // 予想される結果: "property removed: texture"
    }
  },
};

console.log(monster.texture);
// 予想される結果: "scaly"

const proxy = new Proxy(monster, handler);
delete proxy.texture;

console.log(monster.texture);
// 予想される結果: undefined

構文

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

引数

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

target

ターゲットオブジェクト

property

削除するプロパティの名前または Symbol

返値

deleteProperty() メソッドはプロパティが正しく削除されたかどうか示す論理値を返さなければなりません。

解説

介入

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

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

不変条件

以下の不変条件に違反している場合、プロキシーは TypeError を発生します。

  • ターゲットオブジェクトの非設定独自プロパティとして存在する場合、プロパティは削除されません。

プロパティ値の取得のトラップ

次のコードは delete 操作をトラップします。

js
const p = new Proxy(
  {},
  {
    deleteProperty(target, prop) {
      if (!(prop in target)) {
        console.log(`property not found: ${prop}`);
        return false;
      }
      delete target[prop];
      console.log(`property removed: ${prop}`);
      return true;
    },
  },
);

p.a = 10;
console.log("a" in p); // true

const result1 = delete p.a; // "property removed: a"
console.log(result1); // true
console.log("a" in p); // false

const result2 = delete p.a; // "property not found: a"
console.log(result2); // false

仕様書

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

ブラウザーの互換性

関連情報