1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Number.parseIntってアホな子なの?

Posted at

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に何か色々と問題が起こせそうな
コマンドとか送信できそうだなぁって夢見たりしちゃうので、
標準で用意されてる関数もきちんと使い所を見極めて使っていきたいものですね。

1
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?