2015-10-27 4 views
-3

Я нахожу свой мозг на этом, и я прочитал все предыдущие вопросы, на которые был дан ответ, но я чувствую, что я просто что-то пропустил.body of a for in error error in JS

JSHint выдает ошибку:

The body of a for in should be wrapped in an if statement to filter unwanted properties from the prototype.

Как бы вы идти о решении этой ошибки?

function checkCollision(X, Y, arrayObjs) { 
for (var obj in arrayObjs) { 

var objX = (arrayObjs[obj].x/101).toFixed(0); 
    var objY = (arrayObjs[obj].y/83).toFixed(0); 




    //checking collision by checking character placement as well as enemies 

    if ((objX == (X/101).toFixed(0)) && (objY == (Y/83).toFixed(0))) { 
     //collision 
     return true; 
    } 
} 

return false; } 
+4

Какая ошибка? –

+0

Тело a для in должно быть завернуто в инструкцию if для фильтрации нежелательных свойств прототипа. –

+0

Мне больше любопытно, является ли эта ошибка актуальной в этом случае, большинство других комментариев утверждают, что оператор if должен использоваться для проверки наличия элемента или того, что он только что был унаследован от прототипа. код работает нормально, как есть. Мне просто интересно об ошибке. –

ответ

0

Вместо того, чтобы использовать for in петли, используйте простой for цикл, таким образом, вы можете итерацию по массиву, не превышая прототип:

function checkCollision(X, Y, arrayObjs) { 
    for (var i = 0, length = arrayObjs.length; i < length; i++) { 
     var objX = (arrayObjs[i].x/101).toFixed(0); 
     var objY = (arrayObjs[i].y/83).toFixed(0); 
     //checking collision by checking character placement as well as enemies 

     if ((objX == (X/101).toFixed(0)) && (objY == (Y/83).toFixed(0))) { 
      //collision 
      return true; 
     } 
    } 
    return false; 
} 

Смотрите следующее переполнение стеки пост для получения дополнительной информации : What does the JSLint error 'body of a for in should be wrapped in an if statement' mean?