您好我正在查询Amazon API,并且每次都有一个项目没有图像。我试图解释这个但我仍然得到错误:TypeError:无法读取未定义的属性'0'
if (typeof result.ItemSearchResponse.Items[0].Item[i].SmallImage[0].URL[0] !== undefined) {
//items['image'][i] = result.ItemSearchResponse.Items[0].Item[i].LargeImage[0].URL[0];
console.log(result.ItemSearchResponse.Items[0].Item[i].SmallImage[0].URL[0]);
}
如果我注释掉if语句错误消失了 - 是否有更好的方法来使用typeof - 这会占用根本不存在的对象属性?或者任何人都可以提出如何解决的建议?
谢谢
答案 0 :(得分:6)
typeof
总是返回一个字符串,所以它是
if ( typeof something_to_check !== 'undefined' )
如果您检查实际的undefined
失败,则为undefined !== "undefined"
至于错误,这意味着您尝试访问未定义的内容的第一个索引([0]
),
result.ItemSearchResponse.Items
或
result.ItemSearchResponse.Items[0].Item
或
result.ItemSearchResponse.Items[0].Item[i].SmallImage
或
result.ItemSearchResponse.Items[0].Item[i].SmallImage[0].URL
如果你不知道哪一个失败,你必须检查每一个
if ( result.ItemSearchResponse.Items &&
result.ItemSearchResponse.Items[0].Item &&
result.ItemSearchResponse.Items[0].Item[i].SmallImage &&
result.ItemSearchResponse.Items[0].Item[i].SmallImage[0].URL
) {
// use
var img = result.ItemSearchResponse.Items[0].Item[i].SmallImage[0].URL[0]
}
如果索引可能是错误的,或者不是数组等,你也必须检查它。
答案 1 :(得分:1)
为什么不使用
var arr = results.ItemSearchResponse.Items[0].Item[i].SmallImage || false;
if(arr[0]){
// do some work
}
如果条件失败,如果任何包含的数组不存在或者SmallImage
中不存在图像。