2015年08月11日

プロパティの存在確認

以下のようにif分内に直接プロパティを指定して存在確認をするのはあまり上手な方法ではない。

var huga = {};
huga.hoge = "foo"
if(huga.hoge){
console.log("ok");
}else{
console.log("ng");
}
以下のようにhogeの値がfalse相当のプリミティブ値(null,undefined,0,false,NaN、そして空文字)になった場合、存在していてもfalseを返却してしまう。

var huga = {};
huga.hoge = 0;
if(huga.hoge){
console.log("ok");
}else{
console.log("ng");
}


in演算子ならもっと確実にプロパティの存在確認が可能。

var huga = {};
console.log("hoge" in huga);//false
huga.hoge = "foo";
console.log("hoge" in huga);//true
huga.hoge = 0;
console.log("hoge" in huga);//true
huga.hoge = undefined;
console.log("hoge" in huga);//true
huga.hoge = null;
console.log("hoge" in huga);
delete huga.hoge;
console.log("hoge" in huga);//false


ただしin演算子はプロトタイプのプロパティもtrueを帰すので注意が必要。

var huga = {};
huga.hoge = "foo";
console.log("toString" in huga);//true


プロトタイプのプロパティを除きたい場合はin演算子ではなくhasOwnProperty()を利用しよう。

var huga = {};
huga.hoge = "foo";
console.log(huga.hasOwnProperty("toString"));
console.log(huga.hasOwnProperty("hoge"))
posted by ねこまんま at 07:38 | Comment(0) | TrackBack(0) | 関数/文法 | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック