typeof演算子は変数型を調べるのに非常に役に立つが、typeof演算子はnullもobjectも配列もすべて「object」と判定してしまう。
なので、この3つを区別するためには、nullが偽値(falsy)であること、Array.isArrayで配列がtrue、Array.isArrayでオブジェクトがfalseになることを利用する。次のようになる。
var array = [100,200,300];
var buf = null;
var obj = {"value":100};
console.log("typeof array = " + typeof array);//Object
console.log("typeof buf = " + typeof buf);//Object
console.log("typeof obj = " + typeof obj);//Object
console.log("Array.isArray(array) = "+Array.isArray(array));//true
console.log("Array.isArray(buf) = "+Array.isArray(buf));//false
console.log("Array.isArray(obj) = "+Array.isArray(obj));//false
if(buf === null){
console.log("bufはnullである。");
}
if(obj && typeof obj === 'object' && !Array.isArray(obj)){
console.log("objはオブジェクトである。");
}else{
console.log("objはオブジェクトではない。");
}
if(array && typeof array === 'object' && Array.isArray(array)){
console.log("arrayは配列である。");
}else{
console.log("arrayは配列ではない。");
}