2014-03-18 39 views
2

Jslint正在返回一个奇怪的错误给我从我的教科书中复制的一段非常烦人的代码。下面是代码是如何在这本书:Javascript-意想不到)在for循环

.... 
{ 
for(var column = 0; column < COLUMNS; column++) 
{ 
var currentTile = levelMap[row][column]; 
if(currentTile !== EMPTY) 

,并抛出了一堆错误的,就像你不能分配的0未定义或任何一个值。所以我切换var声明像这样...

{var row = 0; 
    var column=0; 
    for(row < ROWS; row++;) 
    { 
    for(column < COLUMNS; column++;) 
    { 
     var currentTile = levelMap[row][column]; 

     if(currentTile !== EMPTY) 
     { 

所以有这样的方式,它现在的作品。 (有点...铬不会抛出错误,但它不能很好地工作,事情不会在我的游戏中显示),但如果我通过jslint 运行它,我得到这个错误。

Unexpected ')'. for(row < ROWS; row++;)

采取;row++打破它。把)打破了。

即使它运行,它也不会正常运行。如果你愿意,我可以提供更多的信息,我认为我只是保持在较短的一端。

即时通讯是一个白痴,显然,导致我无法弄清楚。

+3

如何:'为(;行<的行;行++)' –

+1

因为这个问题似乎是一个语法错误(缺少或额外的项目) - 只有一段代码很难知道发生了什么。你能提供更多的信息/代码来缩小它的范围吗? – ochi

+0

由于您对JavaScript比较陌生,请查看MDN的[JavaScript指南](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/JavaScript_Overview)。 – Zeta

回答

2

一个for循环中的javascript:

for (pre initialization; loop condition; post operation) {} 

当您删除;因为那么你只有3份环的2您的代码不工作:

for(row < ROWS; row++) // missing post operation 

随着;for(row < ROWS; row++;)具有row < ROWS;作为初始化(这什么都不做),row++;作为循环条件,它将通过长达row != 0,并且没有后期操作。

什么你可能打算利用是

for(row = 0; row < ROWS; row++) 
+0

我刚试过这个,它返回的错误是: 意外的')'。 for(column user3055668

+1

正确,同样的问题在那里。 'for(column = 0; column Bort

+0

感谢您的帮助,这似乎解决了我的问题。它似乎也没有为此而切断......感谢我尽管走了。 – user3055668

5

for环路由四个部分信息:

  • 初始动作 *,将实际循环
  • 条件 *,确定是否执行语句之前完成
  • 后动作 *,即在语句执行后完成
  • 声明

*其实那些都是表达式,但要记住他们是什么

for(init; cond; post) 
    statement; 

它可以直接翻译成while循环,如果你觉得它更重要使用那个更舒适:

init; 
while(cond){ 
    statement; 
    post; 
} 

正如你所看到的,你我们错过了init。请注意,所有四个都可以是空的。整体而言,我们得到:

var row, column, currentTile; 
for(row = 0; row < ROWS; row++) { 
    for(column = 0; column < COLUMNS; column++) { 
     currentTile = levelMap[row][column]; 

     if(currentTile !== EMPTY) { 
      // ... 
+0

这是如何设置代码的第一位,但这样做会返回此错误:未捕获TypeError:无法读取未定义 – user3055668

+3

@ user3055668的属性'0',这意味着您需要确保'levelMap [row]'不是在尝试查找其中的列之前,它是空的。 – Pointy

2

快速点回答:

错过for语句。使用这样的:

for(; row < ROWS; row++) 
{ 
    ... 
} 
0
... 
    for(row < ROWS; row++;) 
    { 
    for(column < COLUMNS; column++;) 
    ... 

也许应该是...

... 
    for(;row < ROWS; row++) 
    { 
    for(;column < COLUMNS; column++) 
    ... 

因为你rowcolumn已定义是有效的。它本质上是省去了var row = 0; var column=0;定义速记前的循环,如:

... 
    for(var row = 0;row < ROWS; row++) 
    { 
    for(var column = 0;column < COLUMNS; column++) 
    ...