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

View in English Always switch to English

handler.deleteProperty()

Baseline 広く利用可能

この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。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

仕様書

仕様書
ECMAScript® 2027 Language Specification
# sec-proxy-object-internal-methods-and-internal-slots-delete-p

ブラウザーの互換性

関連情報