Deep Insider の Tutor コーナー
>>  Deep Insider は本サイトからスピンオフした姉妹サイトです。よろしく! 
jQuery逆引きリファレンス

jQuery逆引きリファレンス

変数の型情報を判定するには?($.isXxxxx/$.type)

2015年1月15日

$.isXxxxxメソッドを使って、変数のデータ型を判定する方法を解説。また、$.typeメソッドを使って、引数で指定されたオブジェクトの型を文字列として返す方法も解説する。

  • このエントリーをはてなブックマークに追加

 jQueryでは、変数のデータ型を判定するために、以下のような$.isXxxxxメソッドを提供しています(Xxxxxは判定するデータ型によって変わります)。以下に、具体的な例を見てみましょう。コメントはそれぞれの結果を示しています。

HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>jQuery TIPS</title>
</head>
<body>

<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
<script>
$(function() {
  var int_data = 15;
  var str_data = '15';
  var func_data = function() { /* hogehoge */ };
  var empty_data = {};
  var obj_data = { name: '山田理央', age: 17, sex: 'female' };
  var array_data = [ 1, 2, 3 ];
  var xml_data = $.parseXML('<data>123</data>');
  var html_data = $.parseHTML('<data>123</data>');

  console.log('$.isArray');
  console.log($.isArray(array_data));         // true
  console.log($.isArray(new Array()));        // true
  console.log($.isArray($('body')));          // false
  console.log('$.isEmptyObject');
  console.log($.isEmptyObject(empty_data));   // true
  console.log($.isEmptyObject(new Object())); // true
  console.log('$.isPlainObject');
  console.log($.isPlainObject(obj_data));     // true
  console.log($.isPlainObject(new Array()));  // false
  console.log('$.isFunction');
  console.log($.isFunction(func_data));       // true
  console.log($.isFunction($.each));          // true
  console.log($.isFunction(window.alert));    // true

  console.log('$.isNumeric');
  console.log($.isNumeric(int_data));         // true
  console.log($.isNumeric(str_data));         // true
  console.log('$.isWindow');
  console.log($.isWindow(this));              // false
  console.log($.isWindow(window));            // true
  console.log('$.isXMLDoc');
  console.log($.isXMLDoc(xml_data));          // true
  console.log($.isXMLDoc(html_data));         // false
});
</script>
</body>
</html>
$.isXxxxxメソッドでデータ型を判定するコード(type.html)

 それぞれのメソッドについて解説していきます。

$.isArrayメソッド

 変数が配列であるかどうかを判定します。リテラル([...])、new演算子で生成した場合にも正しく配列と認識します。ただし、jQueryオブジェクトのように、中に要素群を維持した、いわゆる配列ライクなオブジェクトは配列とは見なされません。

$.isEmptyObject/$.isPlainObjectメソッド

 $.isEmptyObjectメソッドは、Objectオブジェクトが空であるかどうかを判定します*1。引数には任意の値を指定できますが、Object以外のオブジェクトを渡した場合には、環境によって結果は変動する可能性がありますので、注意してください。

 オブジェクトがObjectであるかどうかは、$.isPlainObjectメソッドで確認できます。

  • *1 正しくはfor...in命令で走査できるプロパティを含まないかを確認しています。
$.isFunctionメソッド

 引数が関数であるかどうかを判定します。匿名関数、jQueryメソッド、ネイティブなメソッドいずれに対しても、$.isFunctionメソッドがtrueを返していることが確認できます。

$.isNumericメソッド

 引数が数値として解釈できるかを判定します。これは、厳密に数値だけでなく、数値と見なされるものにはtrueを返すということです。よって、ここでも'15'――クォート付きの文字列に対して、確かにtrue(数値である)を返していることが確認できます。

 同じく'0xFF''1.44E3'のような文字列も$.isNumericメソッドではtrueです。

$.isWindowsメソッド

 名前の通り、引数がwindowオブジェクト(=ブラウザー環境でのグローバルオブジェクト)であるかどうかを判定します。現在の操作が、ブラウザーウィンドウに対するものかなどを確認するために利用できます。

$.isXMLDocメソッド

 指定されたノードがXMLドキュメントそのもの、もしくはその配下のノードであるかを判定します。サンプルで変数xml_dataを得るために利用している$.parseXMLメソッドは、XML文字列をXMLDocumentオブジェクトに変換するためのメソッドです。ちなみに、変数html_dataを得るために利用している$.parseHTMLメソッドは、HTML文字列からノード配列を作成するためのメソッドです。

任意の型を文字列として取得する

 特定の型を判定する$.isXxxxxメソッドに対して、指定された引数の型を文字列として返す$.typeメソッドもあります。コメントは、それぞれの結果を表します。

HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>jQuery TIPS</title>
</head>
<body>

<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
<script>
$(function() {
console.log($.type('jquery'));            // string
console.log($.type(true));                // boolean
console.log($.type(12.3));                // number
console.log($.type(['peach', 'melon']));  // array
console.log($.type({ x: 10, y: 50 }));    // object
console.log($.type(function() { }));      // function
console.log($.type(new Date()));          // date
console.log($.type(/[0-9]{3,}/g));        // regexp
console.log($.type());                    // undefined
console.log($.type(String.ng_var));       // undefined
console.log($.type(null));                // null
});
</script>
</body>
</html>
$.typeメソッドで変数の型を判定する例(type2.html)

 標準のJavaScriptにも、似たような機能としてtypeof演算子がありますが、$.typeメソッドに比べると低機能です。プリミティブ型の判定は可能ですが、例えば配列や正規表現などのオブジェクトに対しては、全てobjectを返します。また、ラッパーオブジェクトに対しても、objectを返します。

JavaScript
console.log($.type(new String('hoge')));  // string
console.log(typeof(new String('hoge')));  // object
$.type/typeofとの結果の違い

 型を判定する際には、$.type$.isXxxxxメソッドを利用することを強くお勧めします。

処理対象:変数のデータ型の判定($.isXxxxxメソッド) カテゴリ:ユーティリティ
API:jQuery.isArray() カテゴリ:Utilities(ユーティリティ)
API:jQuery.isEmptyObject() カテゴリ:Utilities(ユーティリティ)
API:jQuery.isPlainObject() カテゴリ:Utilities(ユーティリティ)
API:jQuery.isFunction() カテゴリ:Utilities(ユーティリティ)
API:jQuery.isNumeric() カテゴリ:Utilities(ユーティリティ)
API:jQuery.isWindow() カテゴリ:Utilities(ユーティリティ)
API:jQuery.isXMLDoc() カテゴリ:Utilities(ユーティリティ)
API:jQuery.type() カテゴリ:Utilities(ユーティリティ)

※以下では、本稿の前後を合わせて5回分(第8回~第12回)のみ表示しています。
 連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。

jQuery逆引きリファレンス
8. 要素のプロパティを取得/設定するには?(prop)

任意の要素に対してJavaScriptのプロパティを設定/取得する方法を解説。また、要素の属性を設定/取得できるattrメソッドと機能を比較する。

jQuery逆引きリファレンス
9. 要素の高さ/幅を設定/取得するには?(height/width/innerHeight/innerWidth/outerHeight/outerWidth)

任意の要素に対して幅/高さを設定/取得する方法を解説。また、height/width、innerHeight/innerWidth、outerHeight/outerWidthメソッドの使い分け方法も説明する。

jQuery逆引きリファレンス
10. 【現在、表示中】≫ 変数の型情報を判定するには?($.isXxxxx/$.type)

$.isXxxxxメソッドを使って、変数のデータ型を判定する方法を解説。また、$.typeメソッドを使って、引数で指定されたオブジェクトの型を文字列として返す方法も解説する。

jQuery逆引きリファレンス
11. 配列の内容を順番に処理するには?($.each)

$.eachメソッドを使って、配列やオブジェクトの内容を順に処理する方法を解説。またJavaScriptのevery/someメソッドを、jQueryの$.eachで代替する方法も説明する。

jQuery逆引きリファレンス
12. 配列の内容を順番に加工するには?($.map)

$.mapメソッドを使って、配列やオブジェクトの内容を順に加工する方法を解説。Internet Explorer 8以前の環境ではJavaScriptのmapメソッドをこれで代替しよう。

サイトからのお知らせ

Twitterでつぶやこう!