2

dataはJsonデータの配列です。各オブジェクトの構造は次のとおりです。

var data = [
{
    id: 0, 
    img: "image_src", 
    width: 107, 
    height: 80, 
    shadowBoxLink: "....",
    th: {
        width: 107,
        height: 70, 
        img: "src"
    }
},
{
    id: 1, 
    img: "image_src", 
    width: 107, 
    height: 80, 
    shadowBoxLink: "....",
    th: {
        width: 107,
        height: 80, 
        img: "src"
    }
}
];

ループ内の配列にアクセスしようとすると(IE8、IE7でのみ発生します)、次のようになります。

for(var i in data) {
    var imgHeight = data[i].th.height;
}

「「高さ」のプロパティを取得できません。参照がnullであるか、定義されていません」というエラーメッセージが表示されました。

(私はフランス語からのメッセージを翻訳しました:不可能なd'obtenirlapropriété«高さ»d'uneréférencenullounondéfinie)

私は何が間違っているのですか?

4

3 に答える 3

8

配列要素へのアクセスは、次のように意味的に行うことができます。

for(var i = 0, n = data.length; i < n; i ++) {
    var imgHeight = data[i].th.height;
    ...
}

for..inループは、キーベースのオブジェクトで使用することを意図しています。

注:オブジェクトに終了引用符がありません:

th: Object {
   width: 107,
   height: 80, 
   img: "src /* NEED A CLOSING " HERE */
}
于 2013-03-20T11:28:57.217 に答える
2

存在しない場所でプロパティを探しているようです

簡単なテストを行います:

for(var i in data) {
  if(data[i] && data[i].th && data[i].th.height){
    console.log('the property exists');
  }else{
    console.log("no, it doesn't")
  }      
}
于 2013-03-20T11:32:41.767 に答える
0

オブジェクトの配列があります。

したがって、 for を使用して、必要なオブジェクトのプロパティを取得します。

指定されたコードに構文エラーがあります。文字列を引用符で閉じます。

サンプルコードはこちらです。

var data = [
    {
        id: 0, 
        img: "image_src1", 
        width: 107, 
        height: 80, 
        shadowBoxLink: "....",
        th: {
            width: 107,
            height: 70, 
            img: "src"
        }
    },
    {
        id: 1, 
        img: "image_src2", 
        width: 107, 
        height: 80, 
        shadowBoxLink: "....",
        th: {
            width: 107,
            height: 40, 
            img: "src"
        }
    }
];

for(var i=0; i<data.length; i++) {
    var imgHeight = data[i].th.height;
    alert(imgHeight);
}            
于 2013-03-20T11:35:40.630 に答える