JavaScript の Symbol データ型は、一意の値を表すために使用される基本的なデータ型です。シンボルの特性: 1. 一意、各シンボル値は一意であり、他の値と等しくありません; 2. 不変性、シンボル値が作成されると、変更または再割り当てすることはできません; 3. 隠蔽性、シンボル値は変更できません変更または再割り当て; 他の型に暗黙的に変換されます; 4. 列挙できません Symbol 値がオブジェクトの属性名として使用される場合、デフォルトでは列挙できません。
JavaScript の Symbol データ型は、ES6 で導入された新機能で、一意の値を表すために使用される基本的なデータ型です。シンボル値をオブジェクトの属性名として使用して、属性名の競合の問題を解決できます。この記事では、Symbol データ型の特性、使用法、およびいくつかの一般的なアプリケーション シナリオについて詳しく紹介します。
1. シンボルの特性
1. 一意: 各シンボル値は一意であり、シンボル値の説明が同じであっても、他の値と等しくなりません。これは、オブジェクトの属性名として Symbol 値を使用して、属性名の一意性を確保し、属性名の競合を回避できることを意味します。
2. 不変性: シンボル値が作成されると、変更したり再割り当てしたりすることはできません。これは、再割り当てによって値が変更される可能性がある文字列や数値などのデータ型とは異なりますが、シンボル値は不変です。
3. 隠蔽性: シンボル値は暗黙的に他の型に変換されません。たとえば、Symbol 値を文字列に追加すると、予期した結果が得られず、TypeError がスローされます。この非表示により、予期しない型変換の問題が回避されます。
4. 列挙不可: シンボル値がオブジェクトの属性名として使用される場合、デフォルトでは列挙可能ではありません。これは、for...in ループまたは Object.keys() メソッドを使用して Symbol プロパティ名を取得できないことを意味します。この機能を使用すると、特定の属性が走査されないようにすることができます。
2. シンボルの使用法
1. シンボル値の作成: Symbol() 関数を使用してシンボル値を作成できます。この関数は、シンボル値を識別するためのオプションの説明パラメータを受け入れることができます。 . の目的や意味。
let sym = Symbol(); console.log(typeof sym); // "symbol" let symWithDesc = Symbol("description"); console.log(symWithDesc.toString()); // "Symbol(description)"
2. 属性名としてシンボルを使用する: オブジェクトの属性名としてシンボル値を使用して、属性名の一意性を確保できます。
let obj = { [Symbol("key")]: "value" }; console.log(obj[Symbol("key")]); // undefined,每次使用Symbol()函数创建的Symbol值都是不相等的 let sym = Symbol("key"); obj[sym] = "new value"; console.log(obj[sym]); // "new value"
3. Symbol プロパティ名の取得: Object.getOwnPropertySymbols() メソッドを使用して、オブジェクトのすべての Symbol プロパティ名を取得できます。
let obj = { [Symbol("key1")]: "value1", [Symbol("key2")]: "value2" }; let symbols = Object.getOwnPropertySymbols(obj); console.log(symbols); // [Symbol(key1), Symbol(key2)] console.log(obj[symbols[0]]); // "value1"
4. シンボルの組み込みプロパティ: シンボル値には、オブジェクトのデフォルトの動作を変更するために使用できるいくつかの組み込みプロパティがあります。
#-- Symbol.iterator: オブジェクトのデフォルトの反復子メソッドを定義するために使用されます。#- Symbol.toStringTag: オブジェクトのデフォルトの toString() メソッドによって返される文字列タグを変更するために使用されます。
#-- Symbol.hasInstance: オブジェクトのデフォルトのインスタンスの演算子の動作を定義するために使用されます。#-- Symbol.toPrimitive: プリミティブ値に変換されたオブジェクトのデフォルトの動作を定義するために使用されます。
let obj = { [Symbol.iterator]: function* () { yield 1; yield 2; }, [Symbol.toStringTag]: "MyObject" }; console.log([...obj]); // [1, 2] console.log(obj.toString()); // "[object MyObject]"
3. Symbol のアプリケーション シナリオ
1. 属性名の競合解決: オブジェクトの属性名として Symbol 値を使用すると、異なるモジュールまたはライブラリ間の属性名の競合を回避できます。
2. 定数の定義: シンボル値を使用して定数を定義し、定数の一意性を確保できます。
const RED = Symbol("red"); const BLUE = Symbol("blue");
3. 非表示の属性: オブジェクトの属性名としてシンボル値を使用すると、特定の属性を非表示にして、それらが走査されないようにすることができます。
let obj = { [Symbol("hidden")]: "value", visible: "value" }; for (let key in obj) { console.log(key); // "visible",Symbol属性名不可枚举 }
4. 組み込みオブジェクトの拡張: シンボル値を使用して組み込みオブジェクトの機能を拡張し、カスタム メソッドまたはプロパティを組み込みオブジェクトに追加できます。
Array.prototype[Symbol.iterator] = function* () { for (let i = 0; i < this.length; i++) { yield this[i]; } }; let arr = [1, 2, 3]; console.log([...arr]); // [1, 2, 3]
要約すると、Symbol データ型は JavaScript の基本的なデータ型であり、一意の値を表すために使用されます。これには、一意、不変、非表示、および列挙不可能という特性があり、プロパティ名の競合の解決、定数の定義、プロパティの非表示、組み込みオブジェクトの拡張などのシナリオで使用できます。シンボル値の作成と使用は比較的簡単ですが、予期しない問題を避けるために、その特殊性と隠蔽性に注意する必要があります。
以上がJavaScriptのシンボルデータ型の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。