JavaScriptの変数は場合に応じて文字列になったり数値になったりします。
このオブジェクトの型を調べたい場合にはtypeof関数を使用します。
戻り値は、以下の通りです。
戻り値 |
number |
string |
object |
boolean |
function |
undefined |
以下、例を見てください。
<script type="text/javascript">
<!--
var a;
var b=true;
var c = new Array();
var fnc = function(){};
document.write(typeof(1) + "<br />");
document.write(typeof("1") + "<br />");
document.write(typeof(c) + "<br />");
document.write(typeof(b) + "<br />");
document.write(typeof(a) + "<br />");
document.write(typeof(fnc) + "<br />");
-->
</script>
実行すると以下のように出力されます。
typeof 1というように記述することも出来ます。
JavaScriptで型を比較するには、
===を使う方法があります。
但し、undefinedは予約語ではなく変数のため、ブラウザによっては上書きすることが出来ます。Chrome23では上書きが出来ました。
そのため、以下のような書き方をすると間違ったロジックを通る可能性があります。
<script type="text/javascript">
<!--
function x(){
var i;
var undefined = 1;
if(i === undefined){
alert("未定義です" + undefined);
}else{
alert("定義済みです" + undefined);
}
}
-->
</script>
ボタンを押すと、どちらのロジックを通るか確認が出来ます。
undefinedの判断は
typeof演算子を使います。上記ロジックを以下のように書き換えます。
typeof演算子の戻り値はstringのため、==で判断に変えていいと思います。
以下、ソースです。
<script type="text/javascript">
<!--
function x(){
var i;
if(typeof(i) == "undefined"){
alert("未定義です");
}else{
alert("定義済みです");
}
}
-->
</script>
ボタンを押すと、どちらのロジックを通るか確認が出来ます。