2016-04-06 19 views
-4

Also mache ich eine Web-App für mein Studium, es verwendet im Grunde eine Kombination von Twitter Streaming API und Google Maps, um die Lat Lng Werte anzuzeigen.Warum läuft diese while-Schleife unendlich?

Y ist ein Element, das die Anzahl der empfangenen Tweets angibt (prüft die Länge eines Arrays), und X ist eine andere, deren Textinhalt jede Sekunde um 1 erhöht wird.

  • Ich habe nur einige zufällige Werte für die Zeit für sie zu nehmen, würde ich eine logischere Skala verwenden (alle 60 Sekunden oder so).
  • Ich wollte diese Informationen jede Minute protokollieren, um ein Diagramm zu machen, aber ich habe irgendwie eine Endlosschleife gemacht und ich bin mir nicht ganz sicher, wie.

    Hier ist der Code:

    if(x = "5"){ 
    

    Das bedeutet, dass x wird nie gleich "510" und Ihre Schleife geht auf:

    function saveinfo(){ 
    var x = document.getElementsByClassName('timer')[0].textContent; 
    var y = document.getElementsByClassName('counter')[0].textContent; 
    while (x != "510"){ 
        if(x = "5"){ 
         console.log(y); 
    
        } 
        else if (x = "200") { 
         console.log(y); 
    
        } 
        else if (x = "300"){ 
         console.log(y); 
    
        } 
        else if (x = "400"){ 
         console.log(y); 
    
        } 
        else if (x = "500"){ 
         console.log(y); 
         x = "510" 
        } 
    } 
    }; 
    
    +2

    ändern 'x = "200" 'sollte' x === "200" sein 'etc für einen Start. Sie möchten prüfen, ob sie gleich sind, und nicht 200 zu x zuweisen. – Andy

    +0

    Wenn x nicht '500' ist, wird es nicht geändert – ailerifren

    +1

    '= 'ist Zuweisung. '==' und '===' sind Vergleich – j08691

    Antwort

    3

    Wenn Ihre if Aussagen ausgewertet werden, sind Sie x Einstellung für immer.

    Um dies zu beheben, sollten Sie so etwas wie if(x === '5')

    +1

    Betrachten Community Wiki für diese Antwort. – Neal

    +0

    Ja, einfacher Fehler wirklich. Es löst jedoch nicht das eigentliche Problem (das Skript reagiert nicht, wenn ich die Seite lade). Ich denke, dass @Luaan korrekt ist, weil x und y lokal sind. Ich nahm an, dass sich die Variable ändern würde, wenn sich der Textinhalt des Elements ändert. Wenn das der Fall ist, muss ich auf die Elemente Textinhalt für jede Iteration zugreifen? Wenn JS single threaded ist, ist das unmöglich? –

    +0

    Ursache jetzt haben Sie zwei Probleme: '" 5 "=== 5 // false" String ist keine Nummer und 2.. wenn "x" nicht genau "500" ist, ändert die Schleife niemals "x" und daher ist die Bedingung für die Schleife immer wahr -> Endlosschleife. ** Ich glaube, du verstehst das 'while'-Schlüsselwort total falsch. ** – Thomas

    0

    Drei Hauptgründe tun:

    • x ist eine lokale Variable, kein Verweis auf den Inhalt im Element. Wenn sich der Inhalt ändert, bleibt der Wert in x gleich.
    • = ist der Zuweisungsoperator, nicht der Vergleichsoperator. Sie müssen == (oder besser, ===) zum Vergleich verwenden. Da x = "5" zu true auswertet, werden Sie nie über die erste if hinauskommen.
    • Ihre Schleife verhindert, dass die Benutzeroberfläche trotzdem aktualisiert wird, da JavaScript standardmäßig single-threaded ist. Selbst wenn Sie haben lesen Sie den Wert im Timer die ganze Zeit, anstatt das lokale lesen, würde es immer noch nie ändern.
    0

    Ihre if/else-Anweisungen funktionieren nicht.
    Sie setzen if(x = "200") statt if(x == "200").
    In if/else-Anweisungen funktioniert if(x=1) nicht.
    if(x==1) oder if(x=="1") immer funktionieren.
    if(x==="1") funktioniert nur, wenn x eine Zeichenfolge ist, die "1" sagt.
    if(x===1) funktioniert nur, wenn x eine Zahl ist.

    Alles, was Sie tun müssen, ist die if(x="number") in if(x=="number")