在JavaScript中使用typeof仍然会导致未定义对象

时间:2016-09-26 21:11:42

标签: javascript jquery amazon-web-services typeof

您好我正在查询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 - 这会占用根本不存在的对象属性?或者任何人都可以提出如何解决的建议?

谢谢

2 个答案:

答案 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中不存在图像。