数値を文字列に変換

生田 陸人
LuaGate エンジニア / 現役エンジニア
編集 LuaGate編集部

数値を文字列に変換 とは

String / toString / テンプレリテラルで数値を文字列に変換する。本レッスンでは、数値を文字列に変換 の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。

数値を文字列に変換

数値を画面に表示したり、ログに残したりするときは 文字列への変換 が必要です。JavaScript では暗黙的に変換されるケースもありますが、意図して明示的に変換する ほうがバグを生みません。本レッスンでは String()Number.prototype.toString()、テンプレートリテラル `${value}` の 3 つを押さえます。

ポイント どの方法も結果は同じ文字列になりますが、書き味と意図の伝わりやすさが違います。

String 関数

String(value) は値を文字列化する一番素直な方法です。数値はもちろん、truenullundefined も安全に文字列化できます。String(42)"42"String(null)"null"String(undefined)"undefined" です。例外を投げずに何でも文字列にできる 頑丈さ が魅力です。

JavaScript

console.log(String(42)); // "42" console.log(String(3.14)); // "3.14" console.log(String(true)); // "true" console.log(String(null)); // "null" console.log(String(undefined)); // "undefined"

toString メソッド

数値には toString() というメソッドが生えており、(42).toString()"42" を得られます。toString(2) のように基数を渡すと 2 進数や 16 進数表記 に変換できるのが面白いところです。(255).toString(16)"ff" になり、色の処理などで重宝します。ただし nullundefined には toString が無いので呼ぶとエラーになる点に注意です。

JavaScript

console.log((42).toString()); // "42" console.log((255).toString(16)); // "ff" console.log((8).toString(2)); // "1000"

注意 42.toString() はドットが数値リテラルと衝突して SyntaxError です。(42).toString() と括弧で囲みます。

テンプレートリテラル

`` で囲んだ文字列の中で ${value} を使うと、その式の評価結果が自動で文字列化されます。実務では一番よく使う方法で、`合計は ${total} 円` のように 文字列の組み立てと変換を同時に できます。テンプレートリテラルでは String(value) 相当の変換が走るので、nullundefined を埋め込んでもエラーになりません。

JavaScript

const total = 1100; const msg = `合計は ${total}`; console.log(msg); // "合計は 1100 円" console.log(typeof msg); // "string"

3 つの違いを整理

diagram (will load when visible)

ヒント 文章の中に埋め込むならテンプレートリテラル、単体で文字列が欲しいなら String() を選びます。

よくある間違い

1 つ目は value + "" のような暗黙変換を多用してしまうことです。動きますが意図が読み取りにくいので、レビューでは String(value) への置き換えを勧められることが多いです。2 つ目は null に対して toString() を呼んで TypeError になる事故。null.toString() は実行時エラーになります。3 つ目はテンプレートリテラルでオブジェクトを埋め込むと "[object Object]" になってしまう問題です。オブジェクトを表示したいときは JSON.stringify(obj) を併用しましょう。

補足 JSON 化は API 通信のデータ整形でも頻出するので、合わせて覚えておくと便利です。

Before / After で比較

暗黙変換に頼ったコードと、明示変換にしたコードを並べると意図の差がわかります。

JavaScript

// Before 暗黙の連結で文字列化 const price = 1000; const msg = "金額は " + price + " 円"; // After テンプレートリテラルで明示 const price2 = 1000; const msg2 = `金額は ${price2}`;

見比べると、テンプレートリテラルのほうが文章の構造が崩れず、変数の差し込み箇所が一目でわかります。テンプレリテラルは String() 同等の安全な変換も同時に行ってくれます。

やってみよう

値を 1 つ受け取り、文字列に変換 した結果を返す関数 toText を作ってください。仕様は次のとおりです。

  • どんな値でも例外を投げない
  • nullundefined"null" "undefined" という文字列にする
  • 内部で String() を使うのが推奨

テンプレートリテラルを使う `${value}` でも動きますが、String() のほうが意図が明確です。

よくある質問

Q. ブラウザと Node.js で動作は変わりますか?

A. JavaScript の構文・組み込み機能(配列・文字列・Promise 等)はどちらでも同じです。違いは DOM API(ブラウザ専用)と fs などのファイル系(Node 専用)など、実行環境固有の機能です。コアロジックは両方で動くため、テストもしやすくなります。

Q. ES6 以降の新機能は使っても大丈夫ですか?

A. 現代のブラウザ・Node.js は ES2020 以降の機能をほぼサポートしています。古い IE 等を対象にする必要が無ければ、let/const、アロー関数、分割代入、async/await を積極的に使ってください。トランスパイル(Babel/Vite)が必要なケースは年々減っています。

Q. TypeScript に進む価値はありますか?

A. 型情報があるとリファクタやエディタ補完が劇的に効くため、規模が大きくなるなら TypeScript への移行を強くおすすめします。最初は any を許容しつつ徐々に型を付ければ、JS の知識をそのまま活かせます。

次のレッスン

次は 真偽値の変換 で、String / toString / テンプレリテラルで数値を文字列に変換する を学びます。

事前確認 — 進む前に次の 3 つができることを確認しましょう。

  1. 数値→文字列 の要点を自分の言葉で説明できる
  2. このレッスンの最小コード (または操作手順) を見ずに書ける
  3. 練習問題やクイズで間違えた箇所を読み直して理解した

理解度チェック (30 秒)

Q. 数値→文字列 とは何か、1 文で説明してください。

この章のポイント

A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。

関連レッスン

要件

  1. String 関数で文字列に変換する
  2. どんな入力でも例外を投げない
  3. null や undefined もそれぞれ "null" "undefined" という文字列にする

入出力例

test-cases.txt

toText(42)"42" toText(3.14)"3.14" toText(true)"true" toText(null)"null" toText(0)"0"

ヒント

main.js
main.js
学習モード

メモ

数値を文字列に変換

⌘S で保存