【问题标题】:body of a for in statement error in JS [duplicate]JS中for in语句错误的主体[重复]
【发布时间】:2016-01-27 14:11:37
【问题描述】:

我正在为此绞尽脑汁,并且我已经阅读了之前所有已回答的问题,但我觉得我只是错过了一些东西。

JSHint 给出错误:

for in 的主体应包含在 if 语句中,以过滤原型中不需要的属性。

你们将如何解决这个错误?

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; }

【问题讨论】:

  • for in 的主体应该包含在 if 语句中,以过滤原型中不需要的属性。
  • 我很好奇这个错误是否与这种情况相关,大多数其他 cmets 声明应该使用 if 语句来检查项目是否存在或者它是否刚刚从原型继承.代码按原样运行良好。我只是对错误感到好奇。
  • 这不是标准的 JavaScript 错误消息。我也不认为这是 JavaScript 错误。这一定是您正在使用的某些工具发出的警告。请详细说明。
  • 抱歉,我忘了说,我正在使用 JSHint 进行检查。我按照其他用户的建议使用标准 for 循环而不是 for in 解决了这个问题。

标签: javascript jshint


【解决方案1】:

不要使用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;
}

有关更多信息,请参阅以下 Stack Overflow 帖子:What does the JSLint error 'body of a for in should be wrapped in an if statement' mean?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    • 2019-07-16
    • 2017-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多