JavaScript PR

【JavaScript(JS)】String(x)とx.toString()はどっちを使うべき?

アイキャッチ(JavaScript)
記事内に商品プロモーションを含む場合があります

こんにちは!
なかむぅです。

JSのコードを見ていると、文字列変換でString(x)を使っている時とx.toString()を使っているときがあって

なにがちゃうんや

って感じだったので調べてみました。

String(x)とx.toString()の違い

JavaScriptで文字列に変換したい時は、String(x)x.toString()のどちらでも変換することができます。
ではこの2つにはどのような違いがあるのでしょうか。

2つの変換方法の大きな違いはnullundefinedのときにエラーになるかならないかです。

たとえば、画面から値を受け取った時に、値が取れずにnullが入ってきたとしましょう。
すると、そのnullが入った変数などをString()で変換すると、文字列の"null"として扱われてしまいます。

しかし、toString()とすることで、nullにはtoStringプロパティが存在しないためエラーが起きます。


const str = null;
String(str); // 文字列"null"になる
str.toString(); // エラーが発生

エラーが起これば問題に気づくことができるので、toString()を使う方が安全ということですね♪

String(x)も結局toString()呼び出してる説

そもそもString()に引数を渡した時はどのような動作をするのでしょうか。

実は、String()に引数を渡すとtoStringを呼び出します。
そして、toStringnullundefinedの場合はvalueOfを呼び出します。

は?どうゆうこと?

って感じですが、たとえば以下のようなtoStringvalueOfhairOffというプロパティを持つオブジェクトがあるとしましょう。


const obj = {
	toString: () => "hoge",
	valueOf: () => "piyo",
	hairOff: () => "hage"
};

このオブジェクトobjString()の引数に渡すと次のようなことが起こります。

  1. 暗黙的にtoStringが呼び出される
  2. toStringプロパティがnullundefinedのときはvalueOfが呼び出される
  3. toStringかつ、valueOfプロパティがnullundefinedの場合、TypeErrorになる

const obj = {
	toString: () => "hoge",
	valueOf: () => "piyo",
	hairOff: () => "hage"
};

// hoge
console.log(String(obj));

obj.toString = null;
// piyo
console.log(String(obj));

obj.valueOf = null;
// TypeError
console.log(String(obj));

toStringの順序が変わってもtoStringが呼び出されるので、上から呼び出されてるわけでもありません。
暗黙的にtoStringが呼び出されていることになります。

ちなみに、toStringプロパティ自体ががない場合はvalueOfがあるないにかかわらず[object Object]を返します。


const obj = {
	valueOf: () => "piyo",
	hairOff: () => "hage"
};

// [object Object]
console.log(String(obj));


私の会社で一緒に働きませんか?

私が働く会社では、一緒に働いてくれるエンジニアを募集しています♪

こんな人がオススメ
  • 長く働いていても年収が全然上がらない…一気に年収を上げたい
  • 残業をしたくてしているわけではないので、残業代はしっかりと出して欲しい
  • やりたいことに挑戦させてもらえない…自分がしてみたいことに挑戦したい
  • 通勤時間が長すぎるから、できるだけ短くしたい
  • もっと勉強したいから、書籍代や資格の受験料など負担してくれるところに入りたい
  • 現場に駆り出されてからは放置プレイ…相談できる人も先輩も居ないので、自分の状況をちゃんと理解してくれるところで働きたい

上記内容に1つでも当てはまる場合は、ぜひお声がけください。
私のサイトから応募していただいた方にはお好きなギフト券5000円分プレゼントさせていただきます(条件あり)。

詳細ページ


結論、x.toString()が安全(まとめ)

String(x)x.toString()なら、x.toString()のほうがnullundefinedが来たときにエラーで気づけて安心という結論にいたりました。

ただ、どちらにしてもnullundefinedのチェックは必要かなと思います。
そう考えるとどっちでもいいような気がしますね(笑)

以上、String(x)とx.toString()の違いについてでした!

いやここは違うだろ

と思った方はコメントいただけると嬉しいです。

最後までお読みいただきありがとうございました!

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です