in演算子の使用法:続JavaScriptのオブジェクトについて

白石俊平(あゆた)
2008-01-23 08:05:00
  • このエントリーをはてなブックマークに追加

 JavaScriptをより深く知りたい人のための当連載、今回が五回目です。

 前回は、JavaScriptのオブジェクトを簡単に生成するための「オブジェクトリテラル」と、それに関連した話題である「JSON」についてお話ししました。

 今回は、JavaScriptオブジェクトに関する基本的なトピックの最後として、in演算子と言うものをご紹介したいと思います。

in演算子

 「JavaScriptのオブジェクトにどんなプロパティ(やメソッド)が存在するか」を知りたいことはよくあります。なぜなら、JavaScriptは動的にプロパティを追加/削除することができるため、実際にチェックしてみない限り、オブジェクト内にプロパティがあるかどうかを知ることはできないからです。

 そこで用いられるのが「in」演算子です。in演算子は、以下のように二通りの使い方があります。

  • オブジェクトにプロパティが存在するかどうかを判定する
  • forループとともに用い、オブジェクトのプロパティを全てループ処理する

 一般的には、二番目の用途がよく知られています。一応、順番に見ていきましょう。

オブジェクトにプロパティが存在するかどうかを判定する

 inを用いてこの判定を行うには、「"プロパティ名" in オブジェクト」という形式をとります。例えば、objと言う変数に「v1」と言うプロパティが存在するかどうかをテストするには以下のようにします。

    // (1)
    if ("v1" in obj) {
        // window.alertが存在するときの処理
    }

 しかし、この方法はあまり用いられません。なぜなら、ほぼ同じ処理をよりわかり易く記述できるからです。

    // (2)
    if (obj.v1) {
        // window.alertが存在するときの処理
    }

 この二つの判定方法には細かな違いが存在します(※)が、現実的には後者の判定方法で事足りることがほとんどです。従って、in演算子のこうした用法はあまり用いられません。

※ (2)の方法では、「obj.v1が宣言されていない/undefinedが代入されている/nullが代入されている」と言った細かい差異を読み取れません(全てfalseとなる)。厳密に「宣言されているか」をテストするのがin演算子です。プロパティにundefinedやnullが代入されている場合を厳密に判定するには、「if (obj.v1 !== undefined)」や「if (obj.v1 !== null)」のように行います。

※ さらに、「オブジェクトからプロパティの宣言を取り除く」ための「delete」と言う構文もあります。「delete obj.v1;」のように使用します。ただしdeleteもあまり用いられることはなく、nullやundefinedをプロパティに代入する、と言う処理で代用されることがほとんどです。

  • 新着記事
  • 特集
  • ブログ