JavaScriptで変数のデータ型をチェックする関数を、自分が使いやすいように書いてみました。
javascriptの変数のデータ型を知りたいと思ったとき、typeof や Object.prototype.toString.call() を使って調べていました。
戻ってくる値が大文字だったり小文字だったりするのを暗記できずに毎回調べていたところに、連想配列(ハッシュ・collection)の変数を「Object」や「object」で返されてイラついたので、変数のデータ型を調べる関数を書いてみました。
取得できる値一覧
書いてみた関数の名前は「get_var_type()」と「get_var_type2()」として、Object.prototype.toString.call()や正規表現などを使って、返り値を自分が使いやすいようにしています。
※ get_var_type() ・・・ Object.prototype.toString.call()の値を返す。
※ get_var_type2() ・・・ Object.prototype.toString.call()の値を小文字にして返す。但し、連想配列の形のものを「object」でなく「array」を返す。
| データ型 | typeof | get_var_type | get_var_type2 |
|---|---|---|---|
| 文字列 value = "文字列" |
string | String | string |
| 数値 value = 1 |
numeric | Numeric | numeric |
| 配列 value = [] |
object | Array | array |
| 連想配列 (ハッシュ・collection) value = {} |
object | Object | array |
get_ver_type() のコード
get_var_type()は、 Object.prototype.toString.call() で得られる文字列 [object String][object Numeric][object Array][object Object] の後半の「String」「Numeric」「Array」「Object」を抜き出して返します。
<script>
//変数の型名を返す
function get_var_type(arg){
var type = false;
var rs = Object.prototype.toString.call(arg);
if(typeof rs == "string"){
var matches = rs.match(/^\[object\s*(.+)?\]$/i);
if(matches.length > 1){
type = matches[1];
}else{
type = rs;
}
}
return type;
}
</script>
get_ver_type2() のコード
get_var_type2()は、 get_var_type() に加えて、連想配列(ハッシュ・collection)の形の変数の場合は「array」を返すように強制します。
さらに、返す文字列を toLowerCase() を使用して、全て小文字になるように強制します。
<script>
//変数の型名を返す(連想配列の場合も「array」を返すようにする)
function get_var_type2(arg){
var type = false;
var rs = Object.prototype.toString.call(arg);
if(typeof rs == "string"){
var matches = rs.match(/^\[object\s+(.+)?\]$/i);
if(matches.length > 1){
type = matches[1];
}else{
type = rs;
}
//連想配列判定。連想配列の場合も「array」を返すようにする
if(
matches[1].match(/(object)/i)||
(typeof arg == "object" && "length" in arg && "item" in arg)
){
type = "array";
}
}
//全て小文字にして返す
if(typeof type == "string"){
type = type.toLowerCase();
}
return type;
}
</script>