blog

Symbolとは?

SymbolはES6で導入された新しいプリミティブデータ型で、主な役割は以下の通りです ...

Dec 2, 2023 · 2 min. read


Symbol は ES6 によって導入された新しいプリミティブデータ型であり、主な機能は次のとおりです。

  1. 一意性: Symbol() 関数を通じて作成された各シンボル値は一意です。たとえシンボルが同じパラメータで作成されたとしても、それらは等しくありません。

  2. 属性名の非表示: シンボルをオブジェクトの属性名として使用できるため、属性を非表示にすることができ、従来の方法ではアクセスできなくなります。

  3. 属性の名前の競合を避ける: Symbol の一意性により、 Symbolを属性名として使用することで、複数のモジュールやオブジェクト間の属性の競合を回避できます。

  4. 定数定義として: Symbol を使用していくつかの定数を定義し、その一意性を確保できます。

  5. イテレータとジェネレータ: シンボルを使用してイテレータとジェネレータを定義できるため、オブジェクトをトラバース (横断走査) したり、ジェネレータ関数を呼び出すことができます。

  6. プロパティの予期しない変更を防ぐ: Symbolによって定義されたプロパティは、オブジェクトのプロトタイプチェーン上に表示されていないため、予期しない変更はされません。

  7. Symbolのビルトインプロパティ: Symbolには、オブジェクトのデフォルトのイテレータを定義するための Symbol.iterator、オブジェクトの文字列表現を定義するための Symbol.toStringTag などのいくつかのビルトインプロパティもあります。

Symbolの使用例は次のとおりです。

// Symbolの作成
    const sym1 = Symbol();
    const sym2 = Symbol(\"sym2\");
    
    // プロパティ名として
    const object1 = {
      [symbol1]: \"value1\"
    };
    
    // プロパティ名の競合を避ける
    const mod1 = {
      [Symbol(\"mod1\")]: \"value1\"
    };
    const mod2 = {
      [Symbol(\"mod2\")]: \"value2\"
    };
    
    // 定数の定義
    const RETRY_TIMES = Symbol(\"retry_times\");
    
    // イテレータとジェネレータ
    const iterable = {
      [Symbol.iterator]: function* () {
        yield 0;
        yield 1;
        yield 2;
      };
    
    // プロパティが誤って変更されるのを防ぐ
    Object.defineProperty(obj, sym3, { writable: false });
    
    // ビルトインプロパティ
    const object2 = {
      [Symbol.toStringTag]: \"test\"
    };
    
    console.log(obj[sym1]); // 出力: \"value1\"
    console.log(module1[Symbol(\"name\")]); // 出力: undefined
    console.log(module2[Symbol(\"name\")]); // 出力: undefined
    console.log(RETRY_TIMES); // 出力: Symbol(retry_times)
    console.log([...myIterable]); // 出力: [0, 1, 2]  
    console.log(obj[symbol1]); // 出力:\"value\"    
    console.log(obj2.toString()); // 出力: \"[object MyObject]\"

上記はシンボルの役割であり、一意の値の作成、属性の非表示、属性名の競合の回避、定数、イテレータ、ジェネレータなどの定義に使用できます。 Symbolを適切に利用することで、コードの保守性やセキュリティを向上させることができます。 "

Read next

Web3 Docking Tips-1-ウォレットのリンク

ウォレットを初期化する お好きな方をインストールしてください。私はいつもOKXを使っているので、OKXをお勧めします。 プロジェクトを作成する 前のセクションで、私はすでにvueプロジェクトを初期化しましたが、各セクションで自分のことだけをやるという精神で(このことわざはどうでしょう?

Nov 26, 2023 · 2 min read