2017-05-28 3 views
0

Ich habe eine seltsame Javascript-Problem. Ich verwende vue js und axios, um einige Daten von einer API zu bekommen. Ich habe console.log ausgegeben und die Werte sind da, aber meine if-Anweisung wird nicht wahr sein.Javascript wenn nicht wahr

Die Dateien wurden entfernt, damit das Codebeispiel kleiner ist.

Siehe Inline-Kommentare.

HTML: 

<input v-model="system_id"> 
<button v-on:click="getSystemData" class="btn btn-primary">Get system data</button> 


Data model: 

data:() => ({ 
    errors: [], 
    system_id: null, 
    system_data: null 
}), 



Function: 

getSystemData() { 
    HTTP.get('/api/get_systems') 
    .then(response => { 
     this.response = response.data 

     // equals 1234 
     console.log(this.system_id) 
     for (var key in this.response) { 

     // the id 1234 is found here in a large list 
     console.log(this.response[key].system_id) 


     // Does not go true?!?! 
     if (this.response[key].system_id === this.system_id) { 
      this.system_data = this.response[key].system_data 
     } 
     } 
    }) 
    .catch(e => { 
     this.errors.push(e) 
    }) 
    } 

Warum funktioniert das wenn nie?

+0

Zunächst würde ich sicherstellen, dass die Aussage tatsächlich wahr ist. Zum Beispiel, indem Sie zuvor einen Debugger in die Zeile setzen. Oder wie sonst haben Sie sich selbst bewiesen, wenn die Aussage jemals wahr ist? – trueunlessfalse

+0

Was ist der Typ für 'this.system_id'? https://stackoverflow.com/questions/359494/which-equals-operator-vs-should-be-used-in-javascript-comparisons –

+0

Versuchen Sie mit '==' anstelle von '==='. Der Operator "===" prüft Wert und Typ. Ich kenne Ihren Fall nicht, aber vielleicht haben Ihre Werte verschiedene Arten, z. 'Nummer' und' Zeichenfolge'? – mingos

Antwort

2

Das Problem möglicherweise mit nicht übereinstimmenden Datentypen. === Der Operator gibt false für if zurück (1234 === "1234"). Verwenden Sie == Operator

+2

Um zu verstehen, was schiefgelaufen ist, würde ich immer noch empfehlen, den Debugger zu verwenden, sich die Unterschiede zwischen den Typen anzuschauen und zu verstehen, warum. Dann können Sie sich bewusst dafür entscheiden, == hier zu verwenden, was in anderen Situationen eine schlechte Wahl sein könnte. – trueunlessfalse

+0

Ja, es war String vs Integer-Vergleich. Ich musste folgendes verwenden: if (this.response [key] .system_id === Nummer (this.system_id)) ... using == eslint beschwert. – John

Verwandte Themen