JavaScript シンボル
14666 ワード
JavaScript では、オブジェクト キーは文字列または記号のいずれかにのみ含めることができます.
シンボルを作成するための構文は次のとおりです.
説明付きのシンボル (シンボル名) を作成するための構文は次のとおりです.
説明は、オブジェクトに固有の単なるラベルです.
同じ説明のシンボルでも異なることに注意することが重要です.
以下の例を参照してください.
シンボルは文字列への自動変換 (強制) を許可しないことに注意することも重要です.
以下の例を参照してください.
変換を行うには、
以下の例を参照してください.
または、
シンボルを使用すると、オブジェクトの隠しプロパティを作成できます.
以下の例を参照してください.
上記のコードは、コードのどの部分からも誤ってシンボルにアクセスできないことを示しています.
文字列が記号の代わりに使用される場合、最後の文字列「id」は、スクリプトまたは別の JavaScript ライブラリ スクリプトの以前の文字列 ID によって上書き (上書き) されます.
以下の例を参照してください.
オブジェクト リテラルで記号をキーとして使用するには、記号を角かっこで囲む必要があります.
for...in は、オブジェクト内のシンボル キーをスキップします.
以下の例を参照してください.
以下の例を参照してください.
シンボルは、同じ記述であっても、デフォルトでは常に異なりますが、プログラム内でとにかく同じエンティティの同じ名前のシンボルを使用したい場合があります.
これを実現するために、
以下の例を参照してください.
Symbol.for の逆は Symbol.keyFor で、名前をグローバル シンボルで返します.
以下の例を参照してください.
以下の例を参照してください.
内部的には、さまざまな JavaScript システム シンボルがあります.
以下はその一部です.
Symbol.hasInstance Symbol.isConcatSpreadable Symbol.iterator Symbol.toPrimitive
MDN の完全なリストを確認してください `
A symbol represents a unique identifier
シンボルを作成するための構文は次のとおりです.
id = Symbol()
説明付きのシンボル (シンボル名) を作成するための構文は次のとおりです.
id = Symbol("description")
説明は、オブジェクトに固有の単なるラベルです.
同じ説明のシンボルでも異なることに注意することが重要です.
以下の例を参照してください.
const id1 = Symbol("description");
const id2 = Symbol("description");
console.log(id1 === id2); // false
シンボルは文字列への自動変換 (強制) を許可しないことに注意することも重要です.
以下の例を参照してください.
const id3 = Symbol("description");
alert(id3); // TypeError...
変換を行うには、
toString()
関数を使用します.以下の例を参照してください.
const id4 = Symbol("id");
alert(typeof id4.toString); // string
または、
id.description
を使用して説明のみを表示することもできます.let id5 = Symbol("id");
alert(id5.description, toString id5.description); // id string
隠しプロパティ
シンボルを使用すると、オブジェクトの隠しプロパティを作成できます.
以下の例を参照してください.
const person = { // belongs to another code
name: "Bello"
};
let id = Symbol("id");
person[id] = 4; // added id key to user object
alert( person[id] ); // 4 => accessed data by the symbol as the key
上記のコードは、コードのどの部分からも誤ってシンボルにアクセスできないことを示しています.
文字列が記号の代わりに使用される場合、最後の文字列「id」は、スクリプトまたは別の JavaScript ライブラリ スクリプトの以前の文字列 ID によって上書き (上書き) されます.
以下の例を参照してください.
const person = { name: "John" };
// my script uses "id" property
person.id = "id value before the last script";
// library script uses the "id" property
person.id = "id value in last script" // overwritten by another script!
console.log(person.id); // id value in last script
キーとしてのシンボル ID
オブジェクト リテラルで記号をキーとして使用するには、記号を角かっこで囲む必要があります.
const id = Symbol("id");
const user = {
name: "John",
[id]: 639 // not "id": 639
};
シンボルキーの複製
for...in は、オブジェクト内のシンボル キーをスキップします.
以下の例を参照してください.
const id = Symbol("id");
const user = {
name: "Bello",
age: 27,
[id]: 396
};
for (let key in user) {
console.log(key); // name, age => no symbols
}
// Object.keys(user) also skips them.
Object.assign
は、文字列とシンボルの両方のプロパティをコピーします.以下の例を参照してください.
const id = Symbol("id");
const user = {
name: "Bello",
age: 27,
[id]: 396
};
let clone = Object.assign({}, user);
alert( clone[id] ); // 396
グローバル シンボル レジストリ
シンボルは、同じ記述であっても、デフォルトでは常に異なりますが、プログラム内でとにかく同じエンティティの同じ名前のシンボルを使用したい場合があります.
これを実現するために、
Symbol.for(key)
を使用してグローバル シンボル レジストリを作成し、同じ名前で繰り返しアクセスしてまったく同じシンボルを返すようにします.以下の例を参照してください.
const id1 = Symbol.for("id"); // if the symbol did not exist, it is created
const id2 = Symbol.for("id");
console.log( id1 === id2); // true => the same symbol
Symbols inside the registry are called global symbols.
Symbol.keyFor
Symbol.for の逆は Symbol.keyFor で、名前をグローバル シンボルで返します.
以下の例を参照してください.
// get symbol by name
const sym1 = Symbol.for("id1");
const sym2 = Symbol.for("id2");
// get name by symbol
console.log( Symbol.keyFor(sym1) ); // id1
console.log( Symbol.keyFor(sym2) ); // id2
The
Symbol.keyFor
internally uses the global symbol registry to look up the key for the symbol. If the symbol is not global, it returnsundefined
以下の例を参照してください.
const globalSymbol = Symbol.for("globalName");
const localSymbol = Symbol("localName");
console.log( Symbol.keyFor(globalSymbol) ); // globalName => global symbol
console.log( Symbol.keyFor(localSymbol) ); // undefined => not global
console.log( localSymbol.description ); // localName
システム記号
内部的には、さまざまな JavaScript システム シンボルがあります.
以下はその一部です.
MDN の完全なリストを確認してください `
Reference
この問題について(JavaScript シンボル), 我々は、より多くの情報をここで見つけました https://dev.to/bello/javascript-symbol-668テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol