如果语句显示NaN消息而不是自定义警报

时间:2019-04-29 16:03:04

标签: javascript alert

我有一个if语句,用于检查用户输入的数字是否为0到数组的最后一个索引之间的数字。当我输入数字以外的其他内容时,它会显示“ NaN”,而不是转到代码的“其他”部分并显示警告消息。

$("#delete_task").click(function() {   
        var taskIndex = prompt("Please enter the index number of the task to delete.",0);
        if(!isNaN(taskIndex) && taskIndex >= 0 && taskIndex < tasks.length) {
            tasks.sort();
            tasks.splice(taskIndex, 1);
            displayTaskList();
        } else {
            alert("Please enter a number between 0 and " + tasks.length-1 + ".");
        }
    });

3 个答案:

答案 0 :(得分:0)

由于您要使用输入的值作为数字,而prompt()总是返回字符串,因此您需要在其中执行一个额外的步骤才能将提示响应转换为数字:

$("#delete_task").click(function() {   
    var taskIndex = prompt("Please enter the index number of the task to delete.",0);
    taskIndex = Number(taskIndex); // or +taskIndex
    if(!isNaN(taskIndex) && taskIndex >= 0 && taskIndex < tasks.length) {
        tasks.sort();
        tasks.splice(taskIndex, 1);
        displayTaskList();
    } else {
        alert("Please enter a number between 0 and " + (tasks.length-1) + ".");
    }
});

isNaN()检查仍然有效,因为如果在提示对话框中键入“ foo”,则转换将产生NaN。但是,转换为数字后,这些比较将可以正确地用作数字比较,而不是字符串比较。

edit -另一个错误:在错误alert()调用中,必须用括号tasks.length-1括起来。如果不这样做,则调用中的表达式将被解释为如同被编写

(("Please enter a number between 0 and " + tasks.length) - 1) + "."

减法运算符总是尝试将其自变量转换为数字,显然,最初 string 加法的结果将最终为NaN。我已经修复了示例代码。

答案 1 :(得分:0)

prompt()始终返回一个字符串。

减法将尝试将字符串强制转换为数字,因此纠正此问题的一种方法是仅确保在其余警报中在加法(串联)之前进行该操作:

let tasks = {length: "5"}

alert("Please enter a number between 0 and " + (tasks.length-1) + ".");

此处的括号与数学方程式完全相同:它们控制运算的顺序。有了上面的括号,tasks.length - 1首先发生,并且因为它是减法,所以变量(由于较早的isNaN()测试,我们只包含数字字符)被成功地强制为数字。然后,对结果执行“加法”操作(从左到右顺序),顺便将其转换回字符串。

不带括号,该操作将从左到右进行,因此您首先要串联“请输入介于0和”之间的数字和tasks.length(字符串)。然后它将尝试从中减去1,但是由于无法将“请输入数字”转换为数字,因此您会以NaN结尾。最后是“。”被串联起来,得到字符串“ NaN”。

let tasks = {length: "5"}

alert("Please enter a number between 0 and " + tasks.length-1 + ".");

答案 2 :(得分:0)

问题是因为您有一个字符串,您需要将Number中的taskIndex转换为Number(taskIndex)