【JavaScript】typeof演算子

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

–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

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

SNSでもご購読できます。

コメントを残す

*