WeakMapから要素を削除する際に使用する`delete()`メソッドについて、使い方や注意点を解説します。
WeakMap.delete()メソッドの基本的な使い方
WeakMapから特定の要素を削除するには、`delete()`メソッドを使用します。このメソッドは引数にキーを指定し、削除に成功した場合は`true`、失敗した場合は`false`を返します。
const weakMap = new WeakMap();
const key = {};
weakMap.set(key, 'value');
console.log(weakMap.has(key)); // true
const result = weakMap.delete(key);
console.log(result); // true
console.log(weakMap.has(key)); // falsedelete()メソッドの戻り値について
delete()メソッドは以下のような戻り値を返します:
- 削除成功時:`true`
- キーが存在しない場合:`false`
const weakMap = new WeakMap();
const key = {};
const nonExistentKey = {};
weakMap.set(key, 'value');
console.log(weakMap.delete(key)); // true(存在するキーの削除)
console.log(weakMap.delete(nonExistentKey)); // false(存在しないキーの削除)注意点とよくあるエラー
1. プリミティブ値をキーとして使用できない
WeakMapのキーはオブジェクトである必要があります。文字列や数値などのプリミティブ値は使用できません。
const weakMap = new WeakMap();
// エラーになる例
weakMap.set("string", "value"); // TypeError
weakMap.delete("string"); // false
// 正しい例
const objKey = {};
weakMap.set(objKey, "value");
weakMap.delete(objKey); // true2. キーの参照を失わないように注意
WeakMapのキーはガベージコレクションの対象となるため、キーの参照を保持しておく必要があります。
const weakMap = new WeakMap();
// 参照を失うパターン
weakMap.set({}, "value");
// この時点で{}への参照が失われ、ガベージコレクションの対象になる
// 正しいパターン
const key = {};
weakMap.set(key, "value");
weakMap.delete(key);実践的な使用例
メモリ管理を考慮したオブジェクトのメタデータ管理:
const weakMap = new WeakMap();
class User {
constructor(name) {
this.name = name;
}
}
function addUserMetadata(user, metadata) {
weakMap.set(user, metadata);
}
function removeUserMetadata(user) {
return weakMap.delete(user);
}
const user = new User("John");
addUserMetadata(user, { lastLogin: new Date() });
// メタデータの削除
console.log(removeUserMetadata(user)); // trueまとめ
WeakMapの`delete()`メソッドは:
- キーを指定して要素を削除できる
- 削除の成功・失敗をブール値で返す
- キーはオブジェクトである必要がある
- メモリ管理を意識したプログラミングに適している
これらの特徴を理解し、適切に使用することで、効率的なメモリ管理とデータ操作が可能になります。