For-Loop忽略break语句?

时间:2016-08-24 15:07:00

标签: javascript loops for-loop

当我在if语句中得到错误结果时,我试图停止循环,但是它不起作用,我看不到我错过了什么。我添加了一个标签,希望这将是解决方案,但仍然没有。

let a1 = [1321, 144, 19, 161, 19, 144, 19, 11];
let a2 = [11*11, 121*121, 144*144, 19*19, 161*161, 19*19, 144*144, 19*19];

function comp(a,b){
  a.sort()
  b.sort()

  var result = true;

  if ( a === null || b === null) { return !result }
  if( a.length < 1 || b.length < 1 ) { return !result }

 loop_label: for (var i =0; i < a.length; i++) {
    console.log(a[i]*a[i], b[1],(a[i]*a[i]) == b[i])
    if(!(a[i]*a[i]) == b[i]) {
      return !result;
      break loop_label;
    }
  }
  return result;
};

相反,它会继续循环并在结束时返回true,但是当其中一个评估为false时,我希望它返回false。

3 个答案:

答案 0 :(得分:1)

你的if必须是这样的:

if(a[i]*a[i] != b[i]) {
    return !result;
}

你甚至不需要labelbreak,因为返回已经离开了你的功能,因此循环显然会停止。

答案 1 :(得分:1)

未达到break loop_label;,因为上面的行是:return !result。结束对comp的调用,返回值为!result

如果实际应用了中断,将会返回相反的内容,并且会返回result(不会被否定,方法的最后一行)。

因此,请考虑在循环中删除return !result;行,或将其更改为return result;,使其与最终返回相同 - 以所需的行为为准。

答案 2 :(得分:0)

为什么你不这样结构,if将跳过,else会做你想要的

if(!(a[i]*a[i]) == b[i]) {} else{ // do something here }