Help us understand the problem. What is going on with this article?

Symbolプリミティブは文字列や数値への暗黙的な型変換をしない。

More than 1 year has passed since last update.

Symbol("foo").toString()とすると文字列に変換されるけど Symbol("foo") + ""とすると TypeError: Cannot convert a Symbol value to a string となる。ポイントは明示的(explicit)か暗黙的(implicit)かで、Symbolでは明示的にtoString()を使用する分には問題ないけれど、暗黙的に型変換が行われようとすると TypeErrorを返す仕様となっている。暗黙的でなければ良いので、Symbol("foo").toString() + ""とすれば問題なく使える。

文字列への型変換(Type Conversion)については、http://www.ecma-international.org/ecma-262/6.0/#sec-tostring のあたりが仕様となる。Objectを文字列へ型変換する場合はtoString()があればそれが使われる。一方、SymbolではTypeErrorとなる(SymbolにもtoStringメソッドはあるのだけど)。数値への型変換でも同様にTypeErrorとなる。

Symbolの利用目的 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol) を考えると、ユニークなはずの値を暗黙的な型変換によってユニークに扱われずに問題を起こす... みたいなことは容易に想像できるので、妥当な感じはある。

Every symbol value returned from Symbol() is unique. A symbol value may be used as an identifier for object properties; this is the data type's only purpose. Some further explanation about purpose and usage can be found in the glossary entry for Symbol.

とはいえ、(console.logに出すとか)何の気なしにSymbolと合わせて文字列作ろうとしてTypeErrorが出て混乱することもありそう。

なので「Symbolでは文字列と数値への暗黙的な型変換はされない」という点は覚えておいてもいいかもしれない。

memolog
Web/iOS application engineer for https://www.shortnote.jp/ Technical reviewer for some MEAN publications (details: https://www.linkedin.com/in/yutakayamaguchi )
http://memolog.org
sixapart
WEB制作/運用/マーケティングをより効率的に、安全にするための技術開発、およびCMSソフトウェア&サービスを提供
https://www.sixapart.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした