Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

JavaScriptでオブジェクトの型を判別するのにtypeof演算子使うとツラいよね

More than 5 years have passed since last update.

何がツラいって一番ありがちな下記のような場合ですよね。

var a = {}, b = [], c = 'hoge', d = new String('hoge');

typeof a; // "object"
typeof b; // "object" ← ファッ?!
typeof c; // "string"
typeof d; // "object" ← ファッ?!

ObjectArray を区別してくれないとかないわー。new String()使うことないけど、区別しちゃうとかないわー。

ということで以前に自分が日本語訳したJavaScript Gardenにも書いてあった方法を使うと
判別が楽になるんじゃないかと。

function is(type, obj) {
    var clas = Object.prototype.toString.call(obj).slice(8, -1);
    return obj !== undefined && obj !== null && clas === type;
}

is('String', 'hoge'); // true
is('String', new String('hoge')); // true

Object.prototype.toStringすることによって[[Class]]という内部プロパティを取得して必要なものを切り出してっていう話です。

これで下記のようなタイプを取得してこれますので比較対象として引数に渡してあげましょうという感じです。

  • String
  • Number
  • Boolean
  • Date
  • Error
  • Array
  • Function
  • RegExp
  • Object

これで大体感覚通りの型判別ができると思います。

余談ですが、上記のサイトの中で唯一typeofが使える場面としてた下記のような未定義変数の判別だけ!と書いてあります。

typeof hoge !== 'undefined'; // 未定義だとfalseに

ですよね…。

参照: http://bonsaiden.github.io/JavaScript-Garden/ja/#types.typeof

Layzie
興味は主にJavaScriptと、Spacemacs、Gitです。最近はAndroidとかiOSとかRailsとかも
http://layzie.hatenablog.com
medley
医療ヘルスケア分野の課題を解決する
https://www.medley.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away