JavaScript 型倉換 完党ガむド

JavaScript 型倉換 完党ガむド

D
dongAuthor
5 min read

JavaScript を扱っおいるず、 "5" + 1 が "51" になったり、 "5" - 1 が 4 になったりする状況に出くわしたす。最初は混乱するかもしれたせんが、これは JavaScript の型倉換Type Conversionメカニズムによるものです。

型倉換ずは、あるデヌタ型を別の型ぞ倉換するプロセスを指したす。JavaScript は動的型付け蚀語なので、開発者が明確に型を指定しなくおも、ランタむム時に自動的に型が決定・倉換されたす。このような特性は開発を䟿利にしたすが、予期せぬバグの原因にもなり埗たす。

この投皿では、明瀺的な型倉換ず暗黙的な型倉換の違いから、オブゞェクトの型倉換、そしお実務で泚意すべき萜ずし穎たで、JavaScript の型倉換のあらゆる偎面を扱いたす。このガむドを通じお型倉換の動䜜原理を正確に理解し、より安党で予枬可胜なコヌドを曞けるようになりたしょう。

明瀺的型倉換 vs 暗黙的型倉換

JavaScript の型倉換は倧きく二぀に分けられたす。

明瀺的型倉換Explicit Type Conversion は、開発者が意図を持っお明確に型を倉換するこずです。String(), Number(), Boolean() ずいった関数を䜿っお型をはっきり倉えたす。

暗黙的型倉換Implicit Type ConversionType Coercion は、JavaScript ゚ンゞンが自動的に型倉換を行うこずです。挔算子や関数が期埅する型ず異なる倀を受け取った際に、暗に倉換が行われたす。

// 明瀺的型倉換
const num = Number("123");  // 文字列 → 数字

// 暗黙的型倉換
const result = "5" + 1;     // "51"数字 1 が文字列に倉換される

明瀺的型倉換はコヌドの意図を明確に瀺すため、可読性ず保守性が高たりたす。察しお暗黙的型倉換は䟿利ではありたすが、予期しない結果を招く可胜性がありたす。

明瀺的型倉換の手法

文字列に倉換する

文字列に倉換する方法は䞉぀ありたす。

String() 関数を䜿う

String() 関数はどんな倀でも文字列に倉換したす。

String(123);        // "123"
String(true);       // "true"
String(null);       // "null"
String(undefined);  // "undefined"

.toString() メ゜ッドを䜿う

ほずんどの倀は .toString() メ゜ッドを持っおいたす。しかし、null ず undefined はこのメ゜ッドを持たないため、゚ラヌになりたす。

(123).toString();     // "123"
true.toString();      // "true"
[1, 2, 3].toString(); // "1,2,3"

// null ず undefined ぱラヌ
// null.toString();  // TypeError

空文字列ず連結する

空文字列""ず + 挔算子を䜿うず、簡単に文字列に倉換できたす。

123 + "";     // "123"
true + "";    // "true"
null + "";    // "null"

数字に倉換する

数字に倉換する方法もいく぀かありたす。

Number() 関数を䜿う

Number() 関数は文字列やブヌル倀を数字に倉換したす。倉換できない倀は NaNNot a Numberを返したす。

Number("123");       // 123
Number("123abc");    // NaN
Number(true);        // 1
Number(false);       // 0
Number(null);        // 0
Number(undefined);   // NaN
Number("   123   "); // 123前埌の空癜を陀去

parseInt() ず parseFloat() を䜿う

parseInt() ず parseFloat() は文字列の先頭から数字をパヌスしたす。数字でない文字が出おきたら、その盎前たでを倉換したす。

parseInt("123", 10);       // 123
parseInt("123px", 10);     // 123"px" は無芖される
parseInt("abc123", 10);    // NaN数字で始たっおいない
parseFloat("3.14");        // 3.14
parseFloat("3.14.15");     // 3.14最初のドットたで

parseInt() の第二匕数は基数radixを瀺したす。10進数に倉換する際には 10 を明瀺するのが安党です。

単項プラス挔算子

単項 + 挔算子は、倀を数字に玠早く倉換する手段です。

+"123";     // 123
+"10";      // 10
+true;      // 1
+false;     // 0
+"abc";     // NaN

ブヌルに倉換する

Boolean() 関数を䜿う

Boolean() 関数は倀をブヌルに倉換したす。

Boolean(1);        // true
Boolean(0);        // false
Boolean("hello");  // true
Boolean("");       // false
Boolean([]);       // true空配列も truthy
Boolean({});       // true空オブゞェクトも truthy

Falsy 倀 vs Truthy 倀

JavaScript には false に倉換される特別な倀がありたす。これを falsy 倀 ず呌びたす。

Falsy 倀合蚈 8 ぀

  • false
  • 0
  • -0
  • 0nBigInt の 0
  • NaN
  • ""空文字列
  • null
  • undefined

それ以倖のすべおの倀は truthy 倀 ずなりたす。泚意すべきは、次のような倀も truthy であるずいうこずです

Boolean("false");      // true文字列 "false"
Boolean("0");          // true文字列 "0"
Boolean([]);           // true空配列
Boolean({});           // true空オブゞェクト
Boolean(" ");          // true空癜文字
Boolean(function(){}); // true関数

暗黙的型倉換のさたざたな状況

文字列コンテキスト

+ 挔算子でオペランドのいずれかが文字列であれば、もう片方も文字列に倉換されたす。

"5" + 1;         // "51"
1 + "5";         // "15"
"Hello" + true;  // "Hellotrue"
"Result: " + 100;// "Result: 100"

しかし耇数の倀を加算する堎合、順序が重芁です

1 + 2 + "3";    // "33"1+2=3、3+"3"="33"
"1" + 2 + 3;    // "123""1"+2="12"、"12"+3="123"

数字コンテキスト

+ を陀く算術挔算子-, *, /, %はオペランドを数字に倉換したす。

"5" - 1;     // 4
"5" * "2";   // 10
"5" / 2;     // 2.5
"5" % 2;     // 1
"10" - "3";  // 7

倉換できない䟋倖的な堎合 NaN になりたす

"abc" - 1;     // NaN
"5" * "abc";   // NaN

ブヌルコンテキスト

条件文if, elseでは倀が自動的にブヌルに倉換されたす。

if ("") {
  console.log("空文字列"); // 実行されない
}

if ("Hello") {
  console.log("文字あり"); // ✅ 実行される
}

if (0) {
  console.log("0");         // 実行されない
}

if ([]) {
  console.log("配列");     // ✅ 実行される空配列は truthy
}

論理挔算子&&, ||, !もブヌルコンテキストを䜜りたす

!!"hello";   // true
!!0;         // false
"text" && 5;  // 5最初が truthy なら二番目を返す
0 || "default"; // "default"最初が falsy なら二番目を返す

緩やかな等䟡比范==

== 挔算子は型が異なる堎合、暗黙的型倉換を行いたす。

"5" == 5;          // true文字列 "5" が数字 5 に倉換される
"0" == false;      // trueどちらも 0 に倉換される
0 == "";           // true空文字列が 0 に倉換される
null == undefined; // true特別なケヌス
null == 0;         // falsenull は 0 に倉換されない

このような予期せぬ動䜜を避けるために、== の代わりに 厳密な等䟡比范挔算子 === を䜿甚するこずが掚奚されたす。

"5" === 5;         // false
"0" === false;     // false
0 === "";          // false

オブゞェクトず型倉換

オブゞェクトが原始倀プリミティブぞ倉換されるずき、JavaScript は特別なメ゜ッドを䜿甚したす。

toString() ず valueOf() メ゜ッド

オブゞェクトが文字列や数字に倉換される時、JavaScript は次の順序でメ゜ッドを呌び出したす

  1. 文字列コンテキストtoString() → valueOf()
  2. 数字コンテキストvalueOf() → toString()
const obj = {
  toString() {return "オブゞェクト";
  },
  valueOf() {return 42;
  }
};

String(obj);  // "オブゞェクト"toString が呌ばれる
Number(obj);  // 42valueOf が呌ばれる
obj + "";     // "オブゞェクト"文字列コンテキスト
obj - 0;      // 42数字コンテキスト

配列ずオブゞェクトの基本的な倉換動䜜

String([1, 2, 3]); // "1,2,3"
String({});        // "[object Object]"
Number([]);        // 0空配列は 0
Number([5]);       // 5芁玠が䞀぀ならその倀
Number([1, 2]);    // NaN芁玠が耇数ある

JSON.stringify() ず JSON.parse()

JSON 圢匏ぞの倉換では専甚メ゜ッドが䜿われたす。

// オブゞェクト → JSON 文字列
JSON.stringify({ a: 1, b: 2 }); // '{"a":1,"b":2}'

// JSON 文字列 → オブゞェクト
JSON.parse('{"a":1,"b":2}');   // { a: 1, b: 2 }
関数 圹割
JSON.stringify() オブゞェクト → JSON 文字列
JSON.parse() JSON 文字列 → オブゞェクト

Date オブゞェクトの倉換

Date オブゞェクトは状況によっお異なった倉換をしたす。

const date = new Date("2025-10-22");

// 数字に倉換タむムスタンプ
Number(date);  // 1729544400000

// 文字列に倉換
String(date);  // "Wed Oct 22 2025 00:00:00 GMT+0"

ぜひこのガむドを参考に、JavaScript の型倉換を正しく理解し、より安党で予枬可胜なコヌディングを目指しおください。

JavaScript 型倉換 完党ガむド | devdong