「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > JS のシンボルとオブジェクト♥

JS のシンボルとオブジェクト♥

2024 年 11 月 8 日に公開
ブラウズ:536

Symbols and Objects in JS♥

シンボルのデータ型

シンボルはJSのデータ型です。通常、JavaScript で一意のキーと非表示のオブジェクト キーを作成するために使用されます。

シンボルには2種類あります

  1. ローカル シンボル - グローバル シンボル レジストリには登録されず、同じ記述子であっても値は一意です。
  2. グローバル シンボル - グローバル シンボル レジストリに登録されており、値は一意ではありません

グローバル シンボル レジストリ:グローバル シンボル レジストリは、Symbol.for を使用して作成されたシンボルが保存されるスペースです。

構文
以下の例では、「john」は記述子であり、key_one と key_two はシンボルです。

const key_one = Symbol("john"); //local symbol
const key_two = Symbol.for("john"); //global symbol
console.log(typeof key_one) // symbol
console.log(typeof key_two); //symbol

主な違い

同じ値の記述子はローカルシンボル内では同じではありません

前に述べたように、たとえローカルシンボル内の記述子が同じであっても、すべてのシンボルは一意です。検証してみましょう。

アプリ

const key_one = Symbol("john");
const key_two = Symbol("john");
key_one == key_two // false
key_one === key_two //false

同じ値の記述子はグローバルシンボル内でも同じです

const key_one = Symbol.for("foo");
const key_two = Symbol.for("foo");
console.log(key_one === key_two); //true

オブジェクトとシンボルに関するいくつかの事実

  1. 記号は文字列に変換されません。
  2. for...in ループを使用して両方のシンボルにアクセスすることはできません
  3. Object.keys() プロパティを使用しても両方のシンボルにアクセスできません
  4. オブジェクト内のすべてのキーは偶数の文字列に変換されます。
  5. Object.getOwnPropertySymbols() 関数を使用すると、オブジェクトのすべてのシンボルを表示できます

アプリ

const zero = Symbol("0");
const temp = {
 0:"zero",
 1:"one",
 [zero]:"zero",
 1.1:"one one",
}
const keys = Object.keys(temp); //["0","1","1.1"]
console.log(temp[1.1]) // one one
console.log(Object.getOwnPropertySymbols(temp)) // [Symbol(0)]

Symbol.for()で記述子を取得する方法

Symbol.keyFor(symbol) を使用すると、グローバル シンボルの記述子を取得できます

const key_one = Symbol.for("john")
Symbol.keyFor(key_one) // "john"
typeof Symbol.keyFor(key_one) //string

dev.to と linkedin ? でサポートしてください。 TY?

リリースステートメント この記事は次の場所に転載されています: https://dev.to/aryan015/symbols-and-objects-in-js-3ko7?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3