JavaScript <その他リファレンス メモ> 言語 等CSSHTMLJavaScriptPython ライブラリ・プラットフォームjQuerymicro:bitXamarin ドキュメンテーションDoxygenJSDocMarkdownSHFBXML ドキュメント コメント その他各種資料 子サイト簡易リファレンス・Tips サポート寄付 WeakMap【弱参照マップ】 コンストラクタ・基本操作 WeakMap【弱参照マップ】オブジェクトの基本操作・new WeakMap【コンストラクタ】・delete【要素削除】・get【要素値取得】・has【要素有無】・set【要素追加・更新】 メモ概要WeakMap【弱参照マップ】オブジェクトの基本操作 要素数の取得・要素列挙方法はなし 関連Map【マップ】の 要素の基本操作 外部リンクECMA-262 (英語) WeakMap ( [ iterable ] )ES2024 (15) ES2023 (14) ES2022 (13) WeakMap.prototype.delete ( key )ES2024 (15) ES2023 (14) ES2022 (13) WeakMap.prototype.get ( key )ES2024 (15) ES2023 (14) ES2022 (13) WeakMap.prototype.has ( key )ES2024 (15) ES2023 (14) ES2022 (13) WeakMap.prototype.set ( key, value )ES2024 (15) ES2023 (14) ES2022 (13) 構文操作構文戻り値例外備考コンストラクタnew WeakMap( [ iterable ] ) WeakMap【弱参照マップ】オブジェクトTypeError 例外要素削除delete( key ) true:要素削除false:要素なし要素値取得get( key ) 要素の値:要素ありundefined:要素なし要素有無has( key ) true:要素ありfalse:要素なし要素追加・更新 set( key, value ) WeakMap【弱参照マップ】オブジェクトTypeError 例外既存要素:更新引数iterable:キーと値から成るイテレータオブジェクト 及び それに準ずるもの (キーと値の配列から成る2次元配列等) key:要素のキー value:要素の値 例外TypeError 例外 new WeakMap【コンストラクタ】 new なし (関数として呼び出し)入力のiterableが不正set【要素追加・更新】入力のkeyがオブジェクト以外 例 const weakMap = new WeakMap(); const obj1 = new Object("obj1"); let obj2 = new Object("obj2"); const obj3 = new Object("obj3"); weakMap.set(obj1, "OBJ1"); weakMap.set(obj2, "OBJ2"); weakMap.set(obj3, "OBJ3"); weakMap.set(obj3, "OBJ3-new"); // 更新 const symbol1 = Symbol('Symbol (1)'); weakMap.set(symbol1, 'VALUE 1'); let symbol2 = Symbol('Symbol (2)'); weakMap.set(symbol2, 'VALUE 2'); const symbol3 = Symbol('Symbol (3)'); weakMap.set(symbol3, 'VALUE 3'); console.log( weakMap.get(obj1) ); // 出力:OBJ1 console.log( weakMap.get(obj2) ); // 出力:OBJ2 console.log( weakMap.get(obj3) ); // 出力:OBJ3-new console.log( weakMap.get(symbol1) ); // 出力:VALUE 1 console.log( weakMap.get(symbol2) ); // 出力:VALUE 2 console.log( weakMap.get(symbol3) ); // 出力:VALUE 3 console.log( weakMap.has(obj1) ); // 出力:true console.log( weakMap.has(obj2) ); // 出力:true console.log( weakMap.has(obj3) ); // 出力:true console.log( weakMap.has(symbol1) ); // 出力:true console.log( weakMap.has(symbol2) ); // 出力:true console.log( weakMap.has(symbol3) ); // 出力:true obj2 = new Object("obj2"); // 別のオブジェクト weakMap.delete(obj3); // 削除 symbol2 = Symbol('Symbol (2) New');// 別のシンボル weakMap.delete(symbol3); // 削除 console.log( weakMap.get(obj1) ); // 出力:OBJ1 console.log( weakMap.get(obj2) ); // 出力:undefined (元のオブジェクトなし) console.log( weakMap.get(obj3) ); // 出力:undefined (削除済) console.log( weakMap.get(symbol1) ); // 出力:VALUE 1 console.log( weakMap.get(symbol2) ); // 出力:undefined (元のシンボルなし) console.log( weakMap.get(symbol3) ); // 出力:undefined (削除済) console.log( weakMap.has(obj1) ); // 出力:true console.log( weakMap.has(obj2) ); // 出力:false (元のオブジェクトなし) console.log( weakMap.has(obj3) ); // 出力:false (削除済) console.log( weakMap.has(symbol1) ); // 出力:true console.log( weakMap.has(symbol2) ); // 出力:false (元のシンボルなし) console.log( weakMap.has(symbol3) ); // 出力:false (削除済) const objA = new Object("objA"); const objB = new Object("objB"); const objC = new Object("objC"); const mySymbol = Symbol('My Symbol'); const array = [ [objA, 1], [objB, 3], [objC, 5], [mySymbol, 7] ]; const weakMap2 = new WeakMap(array); console.log( weakMap2.get(objA) ); // 出力:1 console.log( weakMap2.get(objB) ); // 出力:3 console.log( weakMap2.get(objC) ); // 出力:5 console.log( weakMap2.get(mySymbol) ); // 出力:7 try { const weakMapNg1 = WeakMap(); // TypeError 例外 (new なし) } catch(e) { console.log(e); // 例外:TypeError: Constructor WeakMap requires 'new' } try { const weakMapNg2 = new WeakMap(123);// TypeError 例外 (入力のイテレータオブジェクトが不正) } catch(e) { console.log(e); // 例外:TypeError: number 123 is not iterable (cannot read property Symbol(Symbol.iterator)) } try { const weakMap3 = new WeakMap(); weakMap3.set(123, "123"); // TypeError 例外 (キーがオブジェクト・シンボル以外) } catch(e) { console.log(e); // 例外:ReferenceError: weakMap3 is not defined }