2009-08-27 20 views
5

Mi scervella su questo. Ho il codice qui sotto: le prime fasi di un gioco JavaScript. Tutti gli oggetti sono ben definiti e sto usando jQuery per l'interazione DOM. Il puzzle è creato con il seguente codice JS:Perché il ciclo for si interrompe dopo una ripetizione?

var mypuzzle = new puzzle("{solution:'5+6+89',equations:[['5+3=8',23,23],['5+1=6',150,23],['5+3=6',230,23]]}"); 

Tuttavia, l'anello nella parte inferiore del codice non andrà oltre la prima iterazione. Qualche idea del perché? Nessun errore viene generato.

function equationBox(equation, top, left) {//draggable equation box 
    this.reposition = function() { 
     this.top = 0; 
     this.left = 0; 
    } 
    this.top = 0;//make random 
    this.left = 0;//make random 
    this.equation = equation; 
    if(top && left) { 
     this.top = top; 
     this.left = left; 
    } 
    this.content = this.equation.LHS.string + '<span> = </span>' + this.equation.RHS.string; 
    this.DOM = $('<li>').html(this.content); 
} 


function puzzle(json) { 

    this.addEquationBox = function(equationBox) { 
     $('#puzzle #equations').append(equationBox.DOM); 
    } 

    this.init = function() { 
     //this.drawPuzzleBox(); 
     this.json = JSON.parse(json); 
     this.solution = new expression(this.json.solution || ''); 
     this.equations = this.json.equations || []; 
     var iterations = this.equations.length; 
     for(i=0;i<iterations;i++) 
     { 
      console.log(i); 
      this.addEquationBox(new equationBox(stringToEquation(this.equations[i][0]),this.equations[i][1], this.equations[i][2])); 
     } 
    } 
    this.init(); 
} 
+0

A cosa servono le "iterazioni"? – ChrisF

+0

Dove è definito 'JSON.parse'? –

+0

Cosa succede quando si esegue il debug di questo? – Charlie

risposta

11

Forse la tua incapacità di portata variabile di contatore sta facendo, soprattutto se si prende l'abitudine di esso (dal momento che si sta utilizzando la variabile globale di questo nome, e tutti i loop che ha scritto in qualsiasi codice che si' ri chiamare potrebbe fare la stessa cosa). Prova:

for(var i=0;i<iterations;i++) 
+1

+1. IL classico Gotcha di Javscript. – AnthonyWJones

+0

Eccellente - grazie – wheresrhys

1

perché this.equations = this.json.equations || [], E, dal momento che this.json.equations non è definito, di venire assegnato a []

+1

Ciò comporterebbe l'esecuzione del ciclo per zero iterazioni, non uno. – chaos

+1

Perché credi che json.equations non sia definito? Se JSON ha analizzato l'input json a para, eter dovrebbe essere un array – AnthonyWJones

+1

è una possibilità. Dato che non abbiamo a disposizione l'intero progetto per dare una sbirciatina, possiamo solo fare delle ipotesi e usare l'esperienza per suggerire possibili errori. Ho appena usato la mia sfera di cristallo. In effetti, l'errore potrebbe essere più plausibile essere causato da un errore di ambito che utilizza "i" come variabile globale nell'istruzione for. – Rodrigo

0

Supponendo che si sta utilizzando JSON.parse come definito al https://github.com/douglascrockford/JSON-js/blob/master/json2.js, sembra che la stringa JSON non è l'analisi corretta:

var string1 = "{solution:'5+6+89',equations:[['5+3=8',23,23],['5+1=6',150,23],['5+3=6',230,23]]}" 
JSON.parse(string1); // throws SyntaxError("JSON.parse") 

Quando uso JSON.stringify, definito nello stesso file, per creare una stringa JSON dal vostro oggetto:

var obj = {solution:'5+6+89',equations:[['5+3=8',23,23],['5+1=6',150,23],['5+3=6',230,23]]} 
var string2 = JSON.stringify(obj); 
// {"solution":"5+6+89","equations":[["5+3=8",23,23],["5+1=6",150,23],["5+3=6",230,23]]} 
JSON.parse(string2); // returns a proper object 

si noti che la stringa che JSON.stringify sta creando è diverso da quello che si sta tentando di utilizzare, che potrebbe essere la causa del tuo problema.

Problemi correlati