Number.parseIntに色んな文字列を渡してみた結果
前回の記事で、
数値チェックするならNumber.parseIntの結果をisNaNでやらんほうがいいかもね
って、最後に補足で書いたけど、なぁぜなぁぜっていう理由を、実際のコードで試した結果を領域展開するよ
※ここのページをChromeで実行してみた結果
えっ、こんな文字列も数字扱いしてくれるの?
全部isNaNがfalse
console.log(Number.parseInt("11-1")); // 11
console.log(Number.parseInt("-11-1")); // -11
console.log(Number.parseInt("11e+5")); // 11(指数表記だから?)
console.log(Number.parseInt("1,000")); // 1(1000じゃなくて1になるクソ仕様)
console.log(Number.parseInt("1 111")); // 1(なぜ1になるんや。。。)
console.log(Number.parseInt("1 hello world!")); // 1(流石にisNaNになれよ。。。)
先頭の文字が以下のような数字パターンの場合、
- 数字(12345)
- 数字e(1e)
- -数字(-1)
- +数字(+1)
文字列の中に何度「+」「-」「,」「.」「e」があろうが、
下手したら後ろが普通に文章とかだったとしても数字扱いになるという動きだった。
ね、チェックで使っちゃいけない理由がわかったでしょ?
もし入力チェックをJavaScript(フロント)だけしかしないで、
API(バック)側ではやらないとかいう実装をしてる弱々プロジェクトがあった場合、
数値項目に変な文字入れられてそれによりAPIサーバーやDBに何か色々と問題が起こせそうな
コマンドとか送信できそうだなぁって夢見たりしちゃうので、
標準で用意されてる関数もきちんと使い所を見極めて使っていきたいものですね。