Javascript:在不使用内置平方根公式的情况下测试完美正方形

Javascript:在不使用内置平方根公式的情况下测试完美正方形,javascript,Javascript,我是javascript新手,正在对codewars进行一些测试,我正在编写一个检查完美数字的代码,即如果一个数字的平方根是一个整数,那么它应该返回true。这是我的代码,它只适用于0和1,从这里它返回false,即使是完美平方的数字。我需要理解为什么我的代码不工作,我看不到我的问题在哪里 var isSquare = function(n){ for ( var i=0; i>=0; i++){ var product= i*i; if( produ

我是javascript新手,正在对codewars进行一些测试,我正在编写一个检查完美数字的代码,即如果一个数字的平方根是一个整数,那么它应该返回true。这是我的代码,它只适用于0和1,从这里它返回false,即使是完美平方的数字。我需要理解为什么我的代码不工作,我看不到我的问题在哪里

var isSquare = function(n){
      for ( var i=0; i>=0; i++){

      var product= i*i;
      if( product === n ) 
      return true;

      else if(product !==n)
      return false;

      }
    }

每次输入的
n
不等于测试的
产品时,您的
返回false
都在运行。也就是说,在第一次迭代中,如果
n
不是
0
,它将
返回false
。如果
n
小于测试的
产品
,则可能只应
返回false
,并忽略迭代条件,因为测试是在循环体中完成的:

var isSquare=函数(n){
对于(变量i=0;i++){
var乘积=i*i;
如果(product==n)返回true;
否则如果(产品>n)返回false;
}
}
控制台日志(isSquare(9));

控制台日志(isSquare(10))每次输入的
n
不等于测试的
产品时,您的
返回false
都在运行。也就是说,在第一次迭代中,如果
n
不是
0
,它将
返回false
。如果
n
小于测试的
产品
,则可能只应
返回false
,并忽略迭代条件,因为测试是在循环体中完成的:

var isSquare=函数(n){
对于(变量i=0;i++){
var乘积=i*i;
如果(product==n)返回true;
否则如果(产品>n)返回false;
}
}
控制台日志(isSquare(9));

控制台日志(isSquare(10))您的问题在于else-if,因为您不需要else-if,所以将返回移动到循环外,它将一直检查,直到您的循环变为false,并且您还需要重写布尔表达式

var isSquare=函数(n){

对于(var i=0;i您的问题在于else if,因为您不需要else if,所以将返回移动到循环外,它将一直检查,直到您的循环变为false,并且您还需要重写布尔表达式

var isSquare=函数(n){


对于(var i=0;我看了非常感谢,我看了它,非常有用!看了非常感谢,我看了它,非常有用!如果你可以将它移到循环外,你不需要其他东西,因为如果它不返回true,它将返回false我不这么认为,因为否则,什么会决定循环何时终止?我知道通常你可以这样做,但这不是那种情况,除非你想重新编写大部分代码。我忘了你没有放表达式,如果你放了,那么它将在循环结束时终止。非常感谢你指出我的问题所在,你的代码工作了,我已经理解我的问题所在;)如果你能把它移到循环外,你不需要其他的东西,因为如果它不返回true,它将返回false。我不这么认为,因为否则,什么会决定循环何时终止?我知道通常你可以这样做,但这不是那种情况,除非你想重写大部分代码。我忘了你没有放一个表达式,如果如果您这样做了,那么它将在循环结束时终止非常感谢您指出了我的问题所在,您的代码工作了,我已经理解了我的问题所在;)非常感谢您,您的代码工作了,我已经理解了我的问题所在;)记住投票接受答案,如果它真的对你有帮助的话。我很乐意,但我的声誉还不到15,所以我现在不能投票接受答案。当我达到这个水平时,我会投票接受。实际上@CertainPerformance的答案有更高的性能,因为我的循环会停止直到我到达n,而他的循环会停止直到我*我到达n,所以我的循环会停止在1000次迭代后执行op,而他的循环将在10次迭代后停止非常感谢,您的代码运行良好,我已经了解我的问题所在;)记住投票接受答案,如果它真的对您有帮助,我会很乐意接受,但我的声誉不到15,所以我现在无法投票支持答案。实际上,当我达到那个级别时,我会投票@CertainPerformance的答案具有更高的性能,因为我的循环在我达到n之前停止,而他的循环将在我达到n之前停止,所以我的循环将在1000次迭代后停止,而他的循环将在10次迭代后停止