for循环不会结束。不知道为什么

时间:2014-11-27 11:21:49

标签: for-loop infinite-loop

我为一个项目写了一个for循环,提示用户输入一个数字并不断提示,不断添加数字。引入字符串时,循环应该停止。我用while循环完成了它,但是项目声明我们必须使用for循环来完成它。问题是,即使“a = false”,提示仍会继续运行。有人可以解释javascript的思维过程吗?我想知道为什么即使条件不满足它也会继续在循环中运行。谢谢

 var addSequence2 = function() {

        var total = 0;
        var a;

        for (; a = true; ) {
            var input = prompt("Your current score is " +total+ "\n" + "Next number...");

            if (!isNaN(input)) {
                a = true;
                total = +total + +input;
            }
            else if (isNaN(input)) {
                a = false;
                document.write("Your total is " + total);
            }
        }
 };

8 个答案:

答案 0 :(得分:3)

a = truea == true之间存在差异。

你的for循环基本上是在问“我可以将'设置'为真吗?”,答案是肯定的,然后循环继续。

将条件更改为a == true(因此询问“'a'的值是否为真?”


详细说明,在大多数编程语言中,我们区分赋值(“Make'x'为4”)和测试相等性(“Is'x'4?”)。按照惯例(至少在从C语言派生语法的语言中),我们使用'='来分配/设置一个值,并使用'=='来测试。

如果我正确理解规范(不保证),这里发生的是条件浓缩如下:

  1. 是(a = true)是真的吗?
  2. 完成括号:将a设置为true
  3. (a)是真的吗? (我们只是将它设置为true,所以一定是!)

答案 1 :(得分:2)

尝试使用等于运算符,即更改

  

for(; a = true;){

for(; a == true;){

答案 2 :(得分:1)

您应该使用== true而不是a = true ...... =是赋值运算符

答案 3 :(得分:1)

for(; a = true;),您将值赋给变量“a”并且它将始终保持为真并且将以无限循环结束。在JavaScript中,它应 a === true

答案 4 :(得分:0)

我怀疑你希望你看起来像这样:

for(;a==true;)

as a = true是一个赋值,而不是一个比较。

答案 5 :(得分:0)

a == true。双等号比较两者。 Single equal将值true赋给a,因此总是返回true。

答案 6 :(得分:0)

for(; a = true;)< - 这是一个分配

for(; a == true;)< - 这应该更好

答案 7 :(得分:0)

这是您的固定代码:

var addSequence2 = function() {

    var total = 0;
    var a = true;

    for(;Boolean(a);) {
        var input = prompt("Your current score is " +total+ "\n" + "Next number...");

        if (!isNaN(input)) {
            total = total + input;
        }
        else{
            a = false;
            document.write("Your total is " + total);
        }
    }
};