JavaScript オブジェクトの内容を読みだす

最終更新日

オブジェクトの内容を読みだすには「for…in」文を使います。「for(変数名 in オブジェクト)」とすると、オブジェクトのプロパティ名が1つずつ読みだされます。「for…in」文では、オブジェクトで「DontEnum」属性になっているものは読み出すことができません。「DontEnum」属性は、「Object.create()」メソッドによってオブジェクト生成するときや、「defineProperty()」メソッドや「defineProperties()」メソッドを使って後から設定することができます。これらのメソッドなどでは、次の表に示すオブジェクトの属性値を設定することができます。オブジェクトのプロパティが列挙型かどうかは、、「enumerable」属性で指定することができます。

また、ブラウザによってはオブジェクト内容を読みだすエラーになる場合がある。これは、「try…catch」文で回避することができます。

オブジェクトの属性値説明
writableプロパティに書き込みができるかどうか。「true」なら書き込み可能、「false」なら不可
enumerable列挙可能かどうか。「for…in」文での抽出対象になるかどうか。「true」なら列挙可能、「false」なら列挙不可
configurable再定義可能かどうか。「true」なら再定義可能、「false」なら再定義不可

「in」演算子を使うと、オブジェクトにプロパティがあるかどうか調べることができます。調べることができるのはプロパティとオブジェクトで、メソッドは対象外になります。次の例では、「navigator」オブジェクトに「geolocation」が含まれる場合は、「true」、そうでない場合は「false」が変数に格納されます。

var flag = "geolocation" in navigator;

なお、「in」演算子は、プロタイプチェーンをたどってプロパティがあるかどうか調べます。

<body>
<script>
    window.addEventListener("load" , function(){
        //結果を入れる変数を用意
        var data = "";
        //windowオブジェクトの内容を出力
        for(var i in window){
            try{
                data = data + i + " = " + window[i] + "<br>";
            }catch(e){}
        }
        //結果を出力
        document.getElementsByTagName("output")[0].innerHTML = data;

    }, false);
</script>
    <output></output>
</body>
実行結果
実行結果