我正在尝试编写脚本来测试用户输入的数字是否为素数。我正在编写几个不同的素数测试,但特别是给我一个艰难的时间。
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
语句定义的值。
谁能告诉我为什么会这样?我希望这是有道理的,如果需要“不相关的代码”,我会提供它。谢谢!
答案 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?