使用javascript测量转换功能的麻烦。 “如果......其他如果......其他”

时间:2015-08-05 02:24:25

标签: javascript function

我有以下函数,它应该从一个在嵌套的函数中的其他位置声明的数组中获取一个数字,查看字符串数组中的相应字符串,并将转换因子应用于该数字,并写入输出到另一个数组。我正在使用画布,所以我编写了画布代码来输出调试,但我只是在最后得到“else”语句。每次用户更新页面中的信息时,都应调用该函数,并且该函数对其他函数正常工作。有什么明显的东西我不见了吗?

function arrayFinalizer()
{
var itemSelector = document.getElementById("itemSelector");
var i = itemSelector.value - 1;

if (arrayInput[i] == "Ounces")
{
    arrayFinal[i] = Math.ceil(arrayOut[i] / 16);
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ctx.fillText("Ounces", 0, 20);
    return arrayFinal[i];
}
else if (arrayInput[i] == "Pounds")
{
    arrayFinal[i] = Math.ceil(arrayOut[i]);
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ctx.fillText("Pounds", 0, 20);
    return arrayFinal[i];
}
else if (arrayInput[i] == "Grams")
{
    arrayFinal[i] = Math.ceil(arrayOut[i] / 453.592);
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ctx.fillText("Grams", 0, 20);
    return arrayFinal[i];
}
else if (arrayInput[i] == "Kilograms")
{
    arrayFinal[i] = Math.ceil(arrayOut[i] * 2.20462);
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ctx.fillText("Kilograms", 0, 20);
    return arrayFinal[i];
}
else
{
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ctx.fillText("mathEngine error", 0, 20);
    return;
}
};

注意:

我知道arrayInput正确写入,并且它可以接收的唯一值是“Ounces”“Pounds”“Grams”和“Kilograms”,因为我在此点之前和之后都使用了array.ToString()方法在程序中检查它的值。

我也知道arrayOut具有上述原因的数值。我知道我成功调用了这个函数,因为我得到了else fillText输出,并且它正在覆盖另一个调试语句。

我已经为if语句尝试了“==”和“===”运算符,并没有区别。

最后,我在控制台中没有收到任何错误消息。

2 个答案:

答案 0 :(得分:1)

请你把它放在线上没有。 5,告诉我们控制台日志,以便我们轻松解决它。

console.log(i);
console.log(arrayInput);

如果你对我作为整数和arrayInput有所提及的可能值有信心,你可以为每个if条件应用它,然后再试一次:

if (arrayInput[i].toLowerCase().trim() == "ounces")
else if (arrayInput[i].toLowerCase().trim() == "pounds")

答案 1 :(得分:0)

您是否尝试在arrayInput[i]子句中记录else以确保获得所期望的值?你提到了调试语句,所以 请用您的输出更新我们,以便我们更容易看到正在发生的事情。

此外,您的代码可以使用一些清理。

不要使用链式else if语句,而应考虑使用switch语句:

switch (arrayInput[i]) {
    case "Ounces":
        // Logic here
    break;
    // Everything else
    default:
        // Catch-all (final `else` clause)
        // No break required

}

当您调用arrayInput时,您还应该传递iarrayFinalizer作为参数,以便您可以更轻松地在控制台中调试它。

function arrayFinalizer(arrayInput, i) { ... }

控制台:

arrayFinalizer(["Ounces"], 0) -> ???