javascriptのユーティリティー・ライブラリをアプリケーションに頻繁に使用することがあります。 開発プロセスをスピードアップするため、あるいは単に動作が確認されているユーティリティー機能が欲しいだけの場合もあるでしょう。

ユーティリティー・ライブラリを使って、変数が有効な数値かどうかを検証したことはありますか? 有効とは、その値がエラーを起こさないことや、NaNのように予想外の結果を返さないことを意味します。 lodashやunderscoreに依存している場合、そのisNumber関数を使いたくなるかもしれません。

では、isNumber関数の lodash と underscore の実装を見てみましょう。

https://github.com/jashkenas/underscore/blob/e51aa7251f3e010fe003fbb9d969a74b9dcda103/underscore.js#L1325-L1330
となります。
https://github.com/lodash/lodash/blob/04ebca6c86deba0ff733847f6c11fd5265e1ce03/isNumber.js#L29-L32

一般的なライブラリは、どちらも似たような実装をしています。 Javascriptのクラス名型の変数との文字列を比較します。

あなたはそれでいいと思うかもしれませんが、NaNもJavascriptではNumberであることをご存知でしょうか? javascriptでのNaNは、値を表すNumberです。 Not-A-Numberとなります。 ちょっとわかりにくいですね。

toString.call(NaN)
// ->

だから、isNumberNaNではない数字かどうかをチェックする必要があります。

const isValidNumber = _.isNumber(obj) && !isNaN(obj)

では、isDate 関数はどうでしょうか。

new Date("31/1/2019")new Date("test123") のように、無効な Date オブジェクトを初期化しようとすると、問題が発生します。 結果として得られる値は、Dateオブジェクトではありますが、無効なDateオブジェクトとなります。 これにより、Date関連のロジックに不具合が生じる可能性があります。

const isValidDate = _.isDate(obj) && !isNaN(obj.getTime()) 

Recap:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です