代码之家  ›  专栏  ›  技术社区  ›  wheresrhys

为什么我的for循环在一次迭代后停止?

  •  5
  • wheresrhys  · 技术社区  · 15 年前

    在这件事上绞尽脑汁。我有下面的代码:JavaScript游戏的第一阶段。所有对象都定义良好,我使用jquery进行DOM交互。拼图是用以下JS代码创建的:

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

    但是,代码底部的循环不会比第一次迭代更深入。你知道为什么吗?根本不会引发任何错误。

    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();
    }
    
    3 回复  |  直到 15 年前
        1
  •  11
  •   chaos    15 年前

    可能是因为你没有确定你的计数器变量的范围,特别是如果你习惯了使用它(因为你使用的是这个名称的全局变量,而你在调用的任何代码中编写的任何循环都可能做同样的事情)。尝试:

    for(var i=0;i<iterations;i++)
    
        2
  •  1
  •   Rodrigo    15 年前

    因为this.equations=this.json.equations[],而且由于this.json.equations未定义,所以它被分配给[]

        3
  •  0
  •   Daniel Vandersluis    15 年前

    假设你正在使用 JSON.parse 定义见 https://github.com/douglascrockford/JSON-js/blob/master/json2.js ,似乎您的JSON字符串没有正确解析:

    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")
    

    当我使用 JSON.stringify 在同一个文件中定义,以从对象创建JSON字符串:

    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
    

    注意字符串 JSON 创建与您尝试使用的不同,这可能是导致问题的原因。