JavaScript | Number() / parseInt() / parseFloat() と + の違いを詳しく比較

JavaScript JavaScript
スポンサーリンク

JavaScript 初心者が 「数値変換」 に出会うと、必ず迷うのが

Number()parseInt()parseFloat()+ の違いって何?」

ですよね。
それぞれ似たように「文字列などを数値に変える」ことができますが、ルールや結果が全然違います


ざっくり一言まとめ(イメージ)

変換方法何をする?向いてる用途主な特徴
Number()全体を数値に変換厳密な変換が必要なとき「全体が数値でないと NaN」になる厳しめ
parseInt()整数として読む整数だけ欲しいとき途中まで読めたらOK、後半は無視される
parseFloat()小数として読む小数も扱いたいときparseInt()よりゆるい、小数点OK
+(単項プラス)暗黙的に数値化簡単な変換・省略形Number()とほぼ同じ結果、短いけど可読性低め

1. Number() の特徴(厳格)

Number(value) は「全体がちゃんと数値として読めるなら変換する」。
そうでないと NaN(Not a Number)になります。

console.log(Number('123'));      // 123
console.log(Number('123.45'));   // 123.45
console.log(Number('  50  '));   // 50  ← 前後の空白はOK
console.log(Number('10px'));     // NaN ← 全体が数値でないとNG
console.log(Number('abc'));      // NaN
console.log(Number(true));       // 1
console.log(Number(false));      // 0
console.log(Number(null));       // 0
console.log(Number(undefined));  // NaN
console.log(Number(['123']));    // 123  (配列1要素ならOK)
console.log(Number(['1','2']));  // NaN  (複数要素はNG)
JavaScript

ポイント

  • 「全部が数値ならOK」
  • 「少しでも文字が混じるとNG」
  • 正確で信頼できるが、やや厳しい。

2. parseInt() の特徴(整数として先頭から読む)

parseInt(value) は「文字列の先頭から数字を読めるだけ読む」。
途中で数字以外が来たら、そこで読むのをやめます。
先頭に数字がなければ NaN

console.log(parseInt('123px'));   // 123 ← 数字の部分だけ読む
console.log(parseInt('50.8'));    // 50  ← 小数点以降は無視
console.log(parseInt('  42abc')); // 42  ← 空白OK、文字は無視
console.log(parseInt('abc123'));  // NaN ← 数字が最初にない
console.log(parseInt(true));      // NaN ← 文字列でないと読めない
console.log(parseInt('010'));     // 10  ← 8進数扱いは廃止済み
JavaScript

ポイント

  • 数字が「途中まで」でもOK(途中の文字は無視)
  • 常に「整数」になる
  • 小数や単位が混じったデータを読み取るのに便利

3. parseFloat() の特徴(小数も読む)

parseFloat(value)parseInt() と似ていますが、小数点を含む数値を読めます。

console.log(parseFloat('123.45px')); // 123.45 ← 小数点OK
console.log(parseFloat('50.0abc'));  // 50
console.log(parseFloat('3.14.15'));  // 3.14 ← 2個目の小数点でストップ
console.log(parseFloat('abc3.14'));  // NaN ← 数字が最初にない
JavaScript

ポイント

  • 数字 + 小数点まで読む
  • 途中の文字は無視される
  • CSS のように「数字 + 単位」を処理するのに最適(例:"15px" → 15)

4. +(単項プラス)の特徴(暗黙変換)

+value は「Number(value) とほぼ同じ」。
短く書けるけど、コードを読む人には分かりにくいのが欠点です。

console.log(+'123');      // 123
console.log(+'12.34');    // 12.34
console.log(+'10px');     // NaN   ← 全体が数値でないとNG
console.log(+'true');     // NaN   ← 文字列"true"はNG
console.log(+true);       // 1
console.log(+false);      // 0
console.log(+null);       // 0
console.log(+undefined);  // NaN
JavaScript

ポイント

  • Number() とほぼ同じ動作
  • ショートカット的に書ける
  • でも「意図が伝わりにくい」ため、初心者には非推奨

比較まとめ表

入力値Number()parseInt()parseFloat()+(単項プラス)
'123'123123123123
'123.45'123.45123123.45123.45
'123px'NaN123123NaN
' 42 '42424242
'abc123'NaNNaNNaNNaN
true1NaNNaN1
false0NaNNaN0
null0NaNNaN0
undefinedNaNNaNNaNNaN
['12.3']12.31212.312.3

どれを使えばいいの?

目的おすすめ関数理由
入力を厳密に数値に変換したいNumber()信頼性が高く明確
文字列の先頭の数字だけ抜き出したいparseInt()途中で単位や文字があってもOK
小数も許容したい・単位付き数値を扱うparseFloat()px などを削って数値化できる
**素早く変換(短いコード)**がしたい+Number() の省略形。ただし可読性注意

例題(実践で違いを体感)

let str1 = "42px";
let str2 = "3.14abc";
let str3 = "abc100";
let str4 = "  10.5  ";

console.log(Number(str1));     // NaN
console.log(parseInt(str1));   // 42
console.log(parseFloat(str1)); // 42
console.log(+str1);            // NaN

console.log(Number(str2));     // NaN
console.log(parseFloat(str2)); // 3.14

console.log(Number(str3));     // NaN
console.log(parseInt(str3));   // NaN  ← 数字が先頭でない
console.log(parseFloat(str4)); // 10.5  ← 空白OK
JavaScript

まとめ(初心者の覚え方)

  • 「厳しい」順番で覚えると理解しやすい!
Number() ≒ +   ← 全体が数字でないとダメ(厳しい)
parseFloat()   ← 小数点もOK、途中の文字は無視
parseInt()     ← 整数だけ、途中の文字は無視

See the Pen Numeric Conversion Test by MONO365 -Color your days- (@monoqlo365) on CodePen.

タイトルとURLをコピーしました