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

时间:2015-07-06 18:04:06

标签: javascript if-statement for-loop

我正在尝试编写脚本来测试用户输入的数字是否为素数。我正在编写几个不同的素数测试,但特别是给我一个艰难的时间。

JSON.parse()

每次... //d3.csv(@Model.output, type, function (error, data) { try { var data = JSON.parse("@Model.output"); data.forEach(function(d){ x.domain(data.map(function (d) { return d.SupplierName })); y.domain([0, d3.max(data, function (d) { return d.Query })]); }); ... } catch(e){ ... } 循环移动时,嵌入的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语句定义的值。

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

1 个答案:

答案 0 :(得分:0)

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

您有两种选择。将===替换为==,或者在循环之前转换该值并继续使用严格相等。 It will be much faster转换循环前的值,以便您不会在每次迭代时反复转换它。

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

更多阅读:Which equals operator (== vs ===) should be used in JavaScript comparisons?