Javascript-意外)在for循环中

时间:2014-03-18 21:58:43

标签: javascript loops for-loop syntax

Jslint正在将一个奇怪的错误返回到我从教科书中复制的非常恼人的代码部分。以下是本书中的代码:

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

并且引发了一堆错误,就像你不能将值0分配给undefined或者其他什么。所以我像这样切换var语句...

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

      if(currentTile !== EMPTY)
      {

所以这样做 - 它现在有效。 (有点...... Chrome不会抛出错误,但它不能正常工作。我的游戏中没有显示的东西)但如果我通过jslint运行它 我收到这个错误。

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

;关闭row++会打破它。取出)会打破它。

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

显然,我是一个白痴,因为我无法弄明白。

4 个答案:

答案 0 :(得分:5)

for循环由四部分信息组成:

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

*实际上这些都是表达式,但更重要的是要记住它们的用途

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) {
          // ...

答案 1 :(得分:2)

快速回答:

错过了 for for statement 。使用方式如下:

for(; row < ROWS; row++)
{
  ...
}

答案 2 :(得分:2)

javascript中的for循环是:

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

当您删除;时,您的代码无效,因为您在循环的3个部分中只有2个部分:

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

使用;for(row < ROWS; row++;)row < ROWS;作为初始化(什么都不做),row++;作为循环条件,它将传递{{1}没有后期操作。

您可能打算使用的是

row != 0

答案 3 :(得分: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++)
  ...