【Node.js24.x】Symbol::unscopables定数の使い方
unscopables定数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
unscopables定数は、JavaScriptにおいて、特定のオブジェクトのプロパティがwith文のスコープに含められるかどうかを制御するために使用されるSymbol型の定数です。with文は、あるオブジェクトのプロパティにアクセスする際に、そのオブジェクト名を省略できるようにする構文ですが、コードの可読性やパフォーマンスの問題から、通常の使用は推奨されていません。
このSymbol.unscopables定数をオブジェクトのプロパティキーとして使うことで、そのオブジェクトのどのプロパティをwith文のスコープから除外するかを明示的に指定できます。具体的には、オブジェクトの[Symbol.unscopables]プロパティに、除外したいプロパティ名をキーとして持ち、その値がtrueであるオブジェクトを設定します。
これにより、with文が使われた際に、除外指定されたプロパティがスコープに持ち込まれず、もし同じ名前のローカル変数などが存在した場合でも、オブジェクトのプロパティが予期せず参照される(名前の衝突が起こる)ことを防ぎます。この機能は主にwith文の挙動を詳細に制御するために存在しますが、前述の通りwith文自体がほとんど使われないため、Symbol.unscopablesがアプリケーションコードで直接的に利用される機会は極めて稀です。JavaScriptの言語仕様の一環として、特定の状況下での互換性や予測可能な動作を保証するために提供されています。
構文(syntax)
const myObject = {
publicProp: 'Accessible',
privateProp: 'Hidden',
[Symbol.unscopables]: {
privateProp: true
}
};
with (myObject) {
console.log(publicProp);
try {
console.log(privateProp);
} catch (error) {
console.log(`Error: ${error.message}`);
}
}
引数(parameters)
引数なし
引数はありません
戻り値(return)
symbol
Symbol.unscopablesは、Symbol.for('unscopables')によって生成されるシンボル値です。これは、Array.prototype、Object.prototype、String.prototypeなどの組み込みオブジェクトで、with文のスコープから除外したいプロパティを指定するために使用されます。