LoginSignup
4
3

More than 3 years have passed since last update.

Node.js でどの parse を例外処理すべきか?

Last updated at Posted at 2019-03-27

Overview

JSON.parse() は不正な値を渡してしまった時に、例外投げられるのでちゃんと handling した方がいいですよー」と助言をいただいた。
勉強になるなあと思いつつ、Node.js で使える parse() は何種類かあった気がして、他はどうなんだろうと思い勢いで調べてまとめました。

@forl_head_officerさんからアドバイスいただき、Error handling した方がいいかどうかは各サービスの仕様に依存しそうだなーと思い直し、parse の挙動まとめの記事にしてみました。

JSON.parse()

渡した String を json として解析してくれるやつ。
不正な値を渡すと SyntaxError が投げられます。

const parsedJSON = JSON.parse({}); // SyntaxError: Unexpected token o in JSON at position 1
console.log('ここまで来ません');

Error handling するとしたらこんな感じですね。

try {
  const parsedJSON = JSON.parse({});
} catch(e) {
  // Error handling
  console.log(e); // SyntaxError: Unexpected token o in JSON at position 1
  console.log('ここには来ます');
}

url.parse()

渡した String を url として解析してくれるやつ。
不正な形式の値を渡すと TypeError が投げられます。

const url = require('url');
const parsedUrl = url.parse(0, true); // TypeError: Parameter "url" must be a string, ...
console.log('ここまで来ません');

Date.parse()

1970年1月1日00:00:00UTC から、渡した String までの経過したミリ秒数を返してくれるやつ。
不正な値を渡すと、Error は投げずに、NaN が返されます。

const parsedDate = Date.parse(null);
console.log(parsedDate); // NaN

parseInt()

最後に paseInt()、String から整数を返してくれるやつ。
こちらも不正な値を渡すと、Error は投げずに、NaN が返されます。

const parsedInt = parseInt('', 10);
console.log(parsedInt); // NaN

まとめ

parse() に不正なデータを渡した時...

  • JSONurl は Error を返す。
  • DateInt は NaN を返す。
4
3
4

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
4
3