JavaScriptでプログラムを書いていたときに、toStringメソッドを調べていたところ、いろいろなオブジェクトでtoStringメソッドが存在し、オブジェクトごとに使い方が異なるため整理してみました。
toString()とは?
JavaScriptにおける toString() メソッドは、オブジェクトを人間が理解しやすい文字列に変換するためのメソッドです。
ほとんどのオブジェクトが継承しており、型ごとにデフォルトの挙動が異なります。
Number.prototype.toString([radix])
数値を文字列化します。
引数 radix を指定すると、進数変換も可能です。
const num = 255;
console.log(num.toString());    // "255"
console.log(num.toString(16));  // "ff" (16進数)
console.log(num.toString(2));   // "11111111" (2進数)⚠️ radix は 2〜36 の範囲で指定できます。
Boolean.prototype.toString()
true / false をそのまま文字列に変換します。
console.log(true.toString());  // "true"
console.log(false.toString()); // "false"Array.prototype.toString()
配列の場合、カンマ区切りの文字列になります。
const arr = [1, 2, 3];
console.log(arr.toString()); // "1,2,3"
const nested = [1, [2, 3]];
console.log(nested.toString()); // "1,2,3"→ ネストした配列もフラット化される点に注意です。
Function.prototype.toString()
関数をそのまま文字列(ソースコード)に変換します。
function hello() { return "hi"; }
console.log(hello.toString());
// "function hello() { return "hi"; }"Buffer.prototype.toString([encoding]) (Node.js)
Node.js でよく使う Buffer も toString を持っています。encoding を指定して文字コードを変換可能です。
const buf = Buffer.from("hello", "utf8");
console.log(buf.toString());         // "hello"
console.log(buf.toString("hex"));    // "68656c6c6f"
console.log(buf.toString("base64")); // "aGVsbG8="まとめ
- Number.prototype.toString(radix)→ 進数変換できる
- Boolean.prototype.toString()→ そのまま文字列に
- Array.prototype.toString()→ カンマ区切り文字列
- Function.prototype.toString()→ ソースコード文字列
- Buffer.prototype.toString(encoding)→ Node.js で文字コード変換
同じtoStringでもオブジェクトごとに意味が全然違うことがわかりました。
これまで良くないと思いつつも何となく使っていたtoStringメソッド。これからは「意図して使える」ようになりますね。

 
  
  
  
  
