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?

More than 5 years have passed since last update.

JavaScriptの型判定 typeof はもう使用しない!では、何を使ってますか?

Last updated at Posted at 2018-12-03

#typeof 使ってますか?
typeof って世間一般的に (恐らく) あまり使ってないんじゃないかと思います。

使ってない理由としては私的には以下のような理由です。

  • typeof null が "object" になる。
  • typeof [] や {} が "object" になる。
  • typeof new Number(0) とかも "object" になっちゃう。

まったく、直観的にイメージする判定ができないので使っていません。(…たまに使うかな)

ただ、かなり前ですが小飼弾さんという方が typeof を再定義されていたのでこれを一瞬だけ使ってみたこともあります。
 javascript - typeof()を再発明する
 javascript - 関数名の取得とtypeof()の再々発明
 (そうとう古い記事なので参考にする場合には時代背景に考慮を)

今なら Array だけは Array.isArray() でいいですけどね。昔は大変でした。

#私なりの型判定方法
今は以下のようにしています。共通で読み込む js の先頭に定義します。
結構古いブラウザでも対応していてIE9でも大丈夫です。

Object.defineProperty(Array   .prototype, 'isArray'   , { value:true, writable:false, enumerable:false, configurable:false });
Object.defineProperty(String  .prototype, 'isString'  , { value:true, writable:false, enumerable:false, configurable:false });
Object.defineProperty(Number  .prototype, 'isNumber'  , { value:true, writable:false, enumerable:false, configurable:false });
Object.defineProperty(Function.prototype, 'isFunction', { value:true, writable:false, enumerable:false, configurable:false });
Object.defineProperty(Boolean .prototype, 'isBoolean' , { value:true, writable:false, enumerable:false, configurable:false });
Object.defineProperty(RegExp  .prototype, 'isRegExp'  , { value:true, writable:false, enumerable:false, configurable:false });

これで色々型の判定をしています。

if( ary.isArray ){ ・・・ }

[].isArray
(()=>{}).isFunction
/ /.isRegExp
(99).isNumber
'aiueo'.isString

このような感じです。

Object.defineProperty() を使用すれば for(x in ary)Object.keys() などでも列挙されないように定義できるので便利になりました。

.prototype を汚すのは良くないかなとは思うのですが、あると色々楽になるのでこれだけ例外として使用しています。


型判定って良く行うと思うのですが、上記のようなやり方を他で見たことがなかったのでご紹介でした。

もし、この方法では良くない、とか、他にもっと分かりやすいやり方があるよ、とか、二番煎じだよとかあれば教えて頂けるとありがたいです。

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?