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メソッド。これからは「意図して使える」ようになりますね。