繁体   English   中英

为什么我的 if/else 语句不起作用? (JavaScript)

[英]Why won't my if/else statement work? (JavaScript)

我正在尝试编写一个脚本来测试用户输入的数字是否为质数。 我正在编写几种不同的素性测试,但特别是其中一个让我很难受。

function isPrimeSix() {
    var numberPrimeSix = document.getElementById("primeSixInput").value;
    var loopCount = 0;
    for (var i = 1; i < Math.floor((numberPrimeSix / 6) + 1) + 1; i++)
    {
        if (numberPrimeSix === (6 * i) + 1)
        {
            //Irrelevant code here//
        }
        else if (numberPrimeSix === (6 * i) - 1)
        {
            //More irrelevant code//
        }
        else
        {
            loopCount++
        }
    };
    if (numberPrimeSix === 2 || numberPrimeSix === 3 || numberPrimeSix === 5 || numberPrimeSix === 7)
    {
        alert(numberPrimeSix + " is prime.");
    }
    else if (prime === false || loopCount === Math.floor((numberPrimeSix / 6) + 1))
    {
        alert(numberPrimeSix + " is not prime.");
    }
    else if (prime === true)
    {
        alert(numberPrimeSix + " is prime.");
    }
    else
    {
        alert("Error");
    };
}

每次for循环运行时,嵌入的if语句都不会求值,即使对于i特定值,其中一个语句为真。 无论分配给numberPrimeSix数字是什么,脚本将始终转到循环的else部分,这意味着将弹出一个警报,告诉我该数字不是素数(因为loopCount的值等于定义的值)最后一个if语句)。

谁能告诉我这是为什么? 我希望这是有道理的,如果需要“无关代码”,我会提供。 谢谢!

字符串永远不会与数字完全相等 ( === )。 在 JavaScript 中,如果使用== ,则操作数将在比较之前转换为相同类型。 如果您改为使用=== ,则该步骤将被跳过,而是将测试它们是否严格相等,这意味着相同的类型和值,而不仅仅是相同的值。

你有两个选择。 ==替换=== ,或者,在循环之前转换值并继续使用严格相等。 在循环之前转换值会快得多,这样您就不会在每次迭代时一遍又一遍地转换它。

var numberPrimeSix = parseInt(document.getElementById("primeSixInput").value, 10);

更多阅读: 在 JavaScript 比较中应该使用哪个等于运算符 (== vs ===)?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM