【JSリファレンス】Symbol.toPrimitive

更新日:2024/06/14

Symbol.toPrimitiveは、Symbolコンストラクターのプロパティです。

既知シンボル(well-known symbol) @@toPrimitive の実体を返します。
オブジェクトのプロパティ名として既知シンボルを使用すると、そのプロパティが一部の組み込みメソッドまたは演算子から参照されます。

[Symbol.toPrimitive]プロパティは、内部処理でオブジェクトをプリミティブに変換する際に呼び出されます。

プロパティの値として次の関数が想定されます。


ヒント文字列を受け取り、何らかの値を返す関数

ヒント文字列は、"number"、"string"、"default" のどれか一つです。

 

■使用例

const obj = {
    [Symbol.toPrimitive]:function(hint){
        switch(hint){
            case "number": return 100;
            case "string": return "abc";
            default: return "(default)"
        }
    }
}

console.log( 1000 + obj ); // 1000(default)
console.log( 1000 - obj ); // 900
console.log( "123abc456".indexOf( obj ) ); // 3

+演算子は number値とstring値の両方に作用するため、ヒント文字列は "default" です。
その他の数値に関する演算子は、"number"です。
Stringコンストラクターのメソッドの多くは引数を文字列に変換する際に、[Symbol.toPrimitive]( "string" )を呼び出します。

 

■備考

オブジェクトの[Symbol.toPrimitive]( )がオブジェクトを返す、または定義されていない場合、次の順番でtoString()とvalueOf()が呼び出されます。

ヒント文字列が "string" の場合、toString() → valueOf()
それ以外の場合、valueOf() → toString()

※最初のメソッドがオブジェクトを返した場合、次のメソッドが呼び出されます。
次のメソッドもオブジェクトを返すと、TypeErrorです。

const obj = {
    toString:()=>({}),
    valueOf:()=>({})
}

console.log( 1000 + obj ); // TypeError

 

関連ページ

更新日:2024/06/14

書いた人(管理人):けーちゃん

スポンサーリンク

記事の内容について

null

こんにちはけーちゃんです。
説明するのって難しいですね。

「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。

掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。

ご意見、ご指摘はこちら。
https://jsref.affi-sapo-sv.com/info.php

 

このサイトは、リンクフリーです。大歓迎です。