把我的大脑放在这个上面。我有以下代码: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();
}
答案 0 :(得分:11)
可能你没有对你的计数器变量进行范围调整,特别是如果你习惯它(因为你正在使用该名称的全局变量,并且你在任何代码中编写的任何循环可能是做同样的事情)。尝试:
for(var i=0;i<iterations;i++)
答案 1 :(得分:1)
因为this.equations = this.json.equations || [],并且,由于this.json.equations未定义,因此将其分配给[]
答案 2 :(得分:0)
假设您正在使用https://github.com/douglascrockford/JSON-js/blob/master/json2.js中定义的JSON.parse
,则表明您的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.stringify
创建的字符串与您尝试使用的字符串不同,这可能是导致问题的原因。