2016-09-26 1 views
0

Hallo, ich frage Amazon API und hin und wieder ein Element hat kein Bild. Ich versuche, dies zu erklären, aber ich bekomme immer noch die Fehlermeldung: Typeerror: kann Eigenschaft ‚0‘ undefinierterDie Verwendung von typeof in JavaScript verursacht immer noch einen Fehler für undefiniertes Objekt

 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]); 
     } 

Wenn ich die if-Anweisung Kommentar aus dem Fehler verschwindet - gibt es eine bessere Art und Weise zu verwenden, typeof - was würde bedeuten, dass die Objekteigenschaft überhaupt nicht existiert? Oder kann jemand Ratschläge geben, wie er zu lösen ist?

Dank

+3

Das bedeutet 'results.ItemSearchResponse.Items',' results.ItemSearchResponse.Items [0] .Item', 'results.ItemSearchResponse.Items [0] .Item [i] .SmallImage' oder' results.ItemSearchResponse.Items [0] .Item [i] .SmallImage [0] .URL' sind "undefiniert". Grundsätzlich kann alles, auf das Sie bei einem Index zugreifen, "undefiniert" sein. Überprüfen Sie sie unabhängig voneinander. –

+0

Sie müssen jede Ebene des Objekts überprüfen, 'typeof' behandelt keine Referenzfehler innerhalb der RHS,' typeof foo; // undefined' aber 'typeof foo.bar; // error' –

+0

versuchen, jedes Array zu protokollieren, um das zu erhalten, das nicht definiert ist console.log (results.ItemSearchResponse.Items [0] .Item) console.log (results.ItemSearchResponse.Items [0] .Item [i ] .SmallImage) Konsole.log (results.ItemSearchResponse.Items [0] .Item [i] .SmallImage [0] .UR L) –

Antwort

6

typeof immer einen String zurückgibt, so dass es

if (typeof something_to_check !== 'undefined') 

ist, wenn Sie für die eigentliche undefined überprüfen Sie es, wie undefined !== "undefined"

Was den Fehler fehlschlägt, bedeutet dies, du bist versuchen, auf den ersten Index ([0]) von etwas zuzugreifen, das nicht definiert ist, entweder

result.ItemSearchResponse.Items 

oder

result.ItemSearchResponse.Items[0].Item 

oder

result.ItemSearchResponse.Items[0].Item[i].SmallImage 

oder

result.ItemSearchResponse.Items[0].Item[i].SmallImage[0].URL 

Sie haben jeden zu überprüfen, wenn Sie nicht wissen, was man nicht

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] 
    } 

Wenn die Indizes falsch sein können, oder nicht ein Array usw., müssen Sie dies auch überprüfen.

+0

** typeof window.foo.bar ** nicht (* wahrscheinlich *) geben Sie eine Zeichenfolge – JonSG

1

Warum

var arr = results.ItemSearchResponse.Items[0].Item[i].SmallImage || false; 
if(arr[0]){ 
    // do some work 
} 

nicht Da die Bedingung fehlschlägt, wenn eine der enthaltenden Arrays existiert nicht oder, wenn kein Bild in SmallImage existiert.

+3

Die Zuordnung wird werfen, so dass Sie wahrscheinlich in ein ** einschließen möchten versuchen ** blockieren. – JonSG

+0

@ JonSG guten Ruf, ich habe nicht daran gedacht! –

+0

Innovative Antwort und spart viele Zeilen! Danke vielmals! –

Verwandte Themen