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 September 2016.

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

試してみましょう

構文

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 Language Specification
# sec-proxy-object-internal-methods-and-internal-slots-delete-p

ブラウザーの互換性

BCD tables only load in the browser

関連情報