2016-05-05 32 views
0

Ich versuche zu überprüfen, ob ein bestimmtes Javascript-Objekt existiert.Der Typof-Operator funktioniert nicht wie erwartet

var success = function(data) { 

    var x= 0; 
    var numOfCards = data.length; 

    for (x=0;x<data.length - 1;x++) 
     { 
      if (typeof data[x].labels[0].name !== 'undefined') 
      { 
       alert("Object Exists"); 
      } 
     } 
    } 

jedoch Chrome erhalten folgende Fehlermeldung:

(index):21 Uncaught TypeError: Cannot read property 'name' of undefined

Sicher, meine Verwendung von typeof den Status des Objekts überprüfen sollte, für sich genommen nicht, zu einem Fehler führen? Bei der ersten Iteration, die Warnfenster wird angezeigt, wie erwartet, weil:

data[0].labels[0].name = "I am a value"

jedoch

data[0].labels[1].name

den Fehler verursacht, als die "Etiketten" Array leer ist.

+0

'typeof' gibt einfach den" Typ "eines Wertes zurück. Sie können sicherlich einen Fehler erhalten, wenn Sie den Ausdruck bewerten, der den Wert generiert. Beispiel: 'typeof foo()'. Wenn 'foo' keine Funktion ist, wird ein Fehler ausgegeben. –

Antwort

4

Dies funktioniert definitiv wie erwartet.

Surely, my use of typeof to check the status of the object should not, in itself, result in an error?

Sicher, wenn name undefiniert waren. In diesem Fall ist data[0].labels[0] bereits undefiniert!

Sie müssten für jede Ebene if Anweisungen mit einer typeof verschachteln, wenn Sie alle Ebenen auf undefined zulassen möchten, bevor Sie die verschachtelten Objekte darin untersuchen. wenn TypeOf Daten [x] .labels [0] .name! == 'undefined', stellen Sie sicher,

+0

Wie ich wünschte, hatte Javascript Inline-Existenz-Betreiber wie Coffeescript und Ruby hat, so dass Sie nicht durch den Overhead des manuellen Schreibens dieser verschachtelten Schecks belastet sind. z.B. 'data [0] ?. labels [0] ?. name' – jusopi

+0

https://github.com/Kikobeats/existential –

0

vor der Überprüfung, dass TypeOf Daten [x] .labels [0]! == ‚undefined

if (typeof data[x].labels[0] !== 'undefined') 
{ 
    alert("Object Exists"); 
} 
Verwandte Themen