提醒用户每个数组值是否为数字

Alert user whether each array value is number or not

我的目标是创建一个数组,当单击一个按钮时,它会遍历数组的每个单独项目并提醒它是否为数字。

<body>
    <form id = "form">
        <p id = "instruction">Enter all values in the textbox, separated by a space.</p>
        <textarea id = "textarea" rows = "8" columns = "60"></textarea>
            <input id = "submit" type = "submit" value = "Sort Alphabetically" onclick = "stringSplitAlpha();">
            <p id = "p"></p>
        </form>
<script>
function stringSplitAlpha() {
    var str = document.getElementById("textarea").value;
    var arr1 = str.split(" ");
    for (var i = 0; i < arr1.length; i++) {
        window.alert(isNaN(arr1[i]));
        if (isNaN(arr1[i]) == 'true') {
            window.alert(arr1[i] + "is not a number.");
        } else {
            window.alert("arr1[i] + "is a number.");
        }
    }
}
</script>
</body>

当我 运行 代码时,一开始一切正常。我在数组的文本框中输入了一些值,当我单击按钮时,window.alert(isNaN(arr1[i])); 在字母上显示“true”,在数字上显示“false”。这是预期的。

但是,当它对某个字母说“真”时,下一个警报会显示“...是一个数字”。本文来自

if (isNaN(arr1[i]) == 'true') {
            window.alert(arr1[i] + "is not a number.");
        } else {
            window.alert("arr1[i] + "is a number.");
        }

,却完全出乎意料。 window.alert(isNaN(arr1[i])); 结果是“真”,所以它不应该说“...不是数字”吗?我在这里被难住了。我以为可能有某种语法错误,但似乎没有。双等号和三等号我都试过了,都没有用。

澄清一下,如果我在文本框中输入 "1 34 hello",这就是警报中显示的内容,顺序为:

"false," "1 is a number," "false," "34 is a number," "true," "hello is a number"。只有最后一个提示“你好是一个数字”是不正确的。

提前致谢。

isNaN 函数returns 一个布尔值,不是字符串。不要将它与 'true' 进行比较,而是尝试不进行比较。另一种选择是从 true 周围删除引号,您的原始示例应该可以工作。我在下面进一步压缩了它,因为您在代码中看到的最佳实践方式是省略布尔值的比较。

if (isNaN(arr1[i])) {
  window.alert(arr1[i] + " is not a number.");
} else {
  window.alert(arr1[i] + " is a number.");
}

更多文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN