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;
}
我收到一条错误消息:“无法获取”height“属性,引用为null或未定义”
(我翻译了法语:Impossible d'obtenirlapropriété«height»d'uneréférencenullounondéfinie)
我做错了什么?
答案 0 :(得分: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 */
}
答案 1 :(得分: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")
}
}
答案 2 :(得分:0)
有一系列对象。
因此,请使用并获取所需对象的属性。
给定代码中存在语法错误。用引号关闭字符串。
示例代码在这里。
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);
}