JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptのsymbol.valueOf()関数の使い方を徹底解説

JavaScriptのsymbol.valueOf()関数とは

JavaScriptのsymbol.valueOf()関数は、Symbolオブジェクトが持つプリミティブ値(Symbolそのもの)を返すメソッドです。SymbolはES6(ECMAScript 2015)で導入されたプリミティブ型の一つであり、一意で不変の値を生成するために使用されます。オブジェクトのプロパティキーとして利用することで、名前の衝突を防ぐことができます。

基本構文

symbol.valueOf()

このメソッドは引数を受け取らず、呼び出し元のSymbolオブジェクトのプリミティブ値をそのまま返します。

実装例

以下は、symbol.valueOf()関数を使ってSymbolの値を取得し、ボタンをクリックしたタイミングで画面に表示するサンプルコードです。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
    body {
        font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
    }
    div {
        font-size: 20px;
        font-weight: 500;
    }
</style>
</head>
<body>
<h1>JavaScript symbol.valueOf() function</h1>
<div class="sample"></div>
<button class="Btn">CLICK HERE</button>
<h3>
上のボタンをクリックするとSymbolの値が表示されます
</h3>
<script>
    let fillEle = document.querySelector(".sample");
    const symbol = Symbol('computer');
    const symbol1 = Symbol(234);
    let res = symbol.valueOf();
    let res1 = symbol1.valueOf();
    document.querySelector(".Btn").addEventListener("click", () => {
        fillEle.innerHTML += 'res = ' + res.toString() + "<br>";
        fillEle.innerHTML += 'res1 = ' + res1.toString() + "<br>";
    });
</script>
</body>
</html>

実行結果

ページを開いた直後の初期状態は以下のとおりです。

JavaScriptのsymbol.valueOf()関数の使い方を徹底解説

「CLICK HERE」ボタンをクリックすると、各Symbolのプリミティブ値が以下のように表示されます。

JavaScriptのsymbol.valueOf()関数の使い方を徹底解説

解説のポイント

このサンプルでは、Symbol('computer')Symbol(234)という2つの異なるSymbolを生成し、それぞれに対してvalueOf()を呼び出しています。返された値はSymbol型のプリミティブ値であるため、そのまま文字列として連結するとエラーになる点に注意が必要です。Symbolは暗黙的に文字列へ変換されない仕様になっているため、表示の際にはコード例のようにtoString()メソッドやString()関数を組み合わせて明示的に変換します。

valueOf()は、Symbolラッパーオブジェクトからプリミティブ値を明示的に取り出したい場合などに役立つメソッドです。日常的な開発では、Object()によるラップや型変換の内部処理で自動的に呼び出されるケースがほとんどですが、Symbolの仕組みを理解するうえで重要な基礎知識といえます。

  1. JavaScriptの関数プロトタイプとは?仕組みと使い方を解説

    JavaScriptで作成されたすべての関数には、JavaScriptエンジンによって自動的にprototypeプロパティが追加されます。このprototypeプロパティはオブジェクトであり、デフォルトではconstructorプロパティを含んでいます。関数のプロトタイプには、以下のようにしてアクセスできます。functionName.prototypeコンストラクタ関数を使ってオブジェクトを生成する場合、このprototypeプロパティを活用することで、同じコンストラクタから作成された複数のオブジェクト間でメソッドやプロパティを効率的に共有することができます。これにより、各インスタンスごとに

  2. JavaScriptでのメソッド借用:call()・apply()・bind()の使い方を解説

    JavaScriptでは、call()、apply()、bind()という3つのメソッドを使うことで、あるオブジェクトが持つメソッドを別のオブジェクトが「借用」できます。これは、本来そのメソッドを持たないオブジェクトに対して、thisの参照先を差し替えてメソッドを実行できる便利なテクニックです。 3つのメソッドの違い call():引数をカンマ区切りで個別に渡し、即座に関数を実行します。 apply():引数を配列(または配列風オブジェクト)として渡し、即座に関数を実行します。 bind():thisを固定した新しい関数を返すだけで、即座には実行されません。返された関数は後から好きなタイミン