–JavaScript Good parts P19 ここから–
typeofを利用すると、number、string、boolean、undefined、function、objectという値を得ることができる。ただしオペランドが配列かnullだった場合には、結果はobjectになってしまう。これは仕様におけるミスである。
–JavaScript Good parts P19 ここから–
–JavaScript Good parts P27 ここから–
typeof演算子はプロパティの変数型を調べるのに非常に訳に立つ。
–JavaScript Good parts P27 ここから–
–JavaScript Good parts P119 ここから–
typof演算子はそのオペランドの変数型を表す文字列を返す。
–JavaScript Good parts P119 ここから–
解説
オペランド(operand)は被演算子である。
typeof演算子は、オペランドがnullとオブジェクトと配列の場合は「object」を返すことに注意する。
この3つの判定はどうするか?
nullかどうかの判定はnullと比較する。
オブジェクトかどうかの判定はオブジェクトが真値(truthy)であり、typeofの判定がobjectであり、Array.isArrayがfalseであることを使う。
配列かどうかの判定は配列が真値(truthy)であり、typeofの判定がobjectであり、Array.isArrayがtrueであることを使う。
var add = function (a, b){
return a + b;
};
var array = [100,200,300];
var buf = null;
var obj = {"value":100};
console.log("typeof add = " + typeof add);//function
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(add) = " + Array.isArray(add));//false
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は配列ではない。");
}
参考
JavaScript:the good parts 「良いパーツ」によるベストプラクティス [ ダグラス・クロフォード ]のP19、27、119