Javascript 关于for if循环中布尔逻辑的混淆

Javascript 关于for if循环中布尔逻辑的混淆,javascript,boolean,Javascript,Boolean,首先,我有一个对象列表,如果它们不干扰列表中已经包含的对象,我将向该列表添加新对象(有点像碰撞检测)。我正在尝试创建一个可以检测这种干扰的函数 我设计它的方式是,如果发生冲突(非直觉地),则输出'false',如果没有,则输出'true',因为我稍后将在if语句中使用此结果,并且我希望它在没有发生冲突的情况下执行该语句。该列表称为顶点。可能有很多错误,但我最困惑的是布尔函数的逻辑以及它如何通过if和for循环 我期望的结果是,如果新对象干扰列表中已有的任何对象,则函数将输出“false”,并且仅

首先,我有一个对象列表,如果它们不干扰列表中已经包含的对象,我将向该列表添加新对象(有点像碰撞检测)。我正在尝试创建一个可以检测这种干扰的函数

我设计它的方式是,如果发生冲突(非直觉地),则输出'false',如果没有,则输出'true',因为我稍后将在if语句中使用此结果,并且我希望它在没有发生冲突的情况下执行该语句。该列表称为顶点。可能有很多错误,但我最困惑的是布尔函数的逻辑以及它如何通过if和for循环

我期望的结果是,如果新对象干扰列表中已有的任何对象,则函数将输出“false”,并且仅当该对象不干扰任何元素时,它才会输出“true”。然而,我不认为我的代码正在做我在这里描述的事情。if的第一个结果是“真”还是“假”?如果所有结果都为真,它是否只输出“真”。我认为这是我问题的症结所在(我可能弄错了)

可能有一种更有效的方法可以做到这一点(如果是这样,请通知我!),但现在我实际上正在使用for循环遍历列表中已经存在的每个元素,然后使用if语句编写冲突测试。我的代码如下:

function test(x, y, len) {
  var k;
  for (k=0; k < vertices.length; k++) {
    if (((y + len) < (vertices[k][1])) || (y > (vertices[k][1] + vertices[k][2])) || ((x + len) < vertices[k][0]) || (x > (vertices[k][0] + vertices[k][2])))
    {
      return false
    } else 
    {
      return true
    }
  }
}
功能测试(x,y,len){
var-k;
对于(k=0;k(顶点[k][1]+顶点[k][2]))|(x+len)<顶点[k][0])|(x>(顶点[k][0]+顶点[k][2]))
{
返回错误
}否则
{
返回真值
}
}
}

可能是碰撞条件本身有问题,“…或…或…”,但我认为情况并非如此。我认为我上面描述的逻辑有问题。如果有人能给我一些解释,让我把事情弄清楚,我将不胜感激。正如你所知道的,我对这件事很陌生。谢谢

在for循环外移动
返回true

然后,只有循环完成而没有首先找到结果时,它才会返回true

function test(x, y, len) {
  var k;
  for (k=0; k < vertices.length; k++) {
    if (((y + len) < (vertices[k][1])) || (y > (vertices[k][1] + vertices[k][2])) || ((x + len) < vertices[k][0]) || (x > (vertices[k][0] + vertices[k][2])))
    {
      return false
    } 
  }
 return true;
}
功能测试(x,y,len){
var-k;
对于(k=0;k(顶点[k][1]+顶点[k][2]))|(x+len)<顶点[k][0])|(x>(顶点[k][0]+顶点[k][2]))
{
返回错误
} 
}
返回true;
}

您在循环中执行了一个返回(函数),它将循环中断了很多次,这正是让我困惑的地方。我的代码仍然不能像我希望的那样运行,但是在你的帮助下,我可以自信地说问题出在别处。谢谢