Javascript 假定一个带有 space 的字符串作为可操作值

Javascript assumes a string with a space as an operable value

当用户在此应用程序上键入单个 space 时,JavaScript 假定它是一个可操作值 (DEMO):

var num;
for (var i = 0; i < 5; i++) {
    num = prompt("Number plz", "Number here...");
    if (num < 10) {
        alert("Lower 10");
    } else if (isNaN(num)) {
        alert("Unoperable...");
    }
}

这种行为背后的原因是什么?

检测空白的唯一方法 space 是使用正则表达式吗?

value returned by prompt will be a String。你正在比较这一行中的一个字符串和一个数字

if (num < 10) {

当比较两个不同类型的值时,会发生类型强制,然后比较值。在您的情况下,当您输入空字符串时,num 将被强制转换为一个数字以获得 0.

console.log(Number(' '));
// 0

因为 0 < 10 您看到了警报。

您可能想了解更多相关信息 here


你实际上应该将 prompt 返回的值转换为数字,像这样

num = parseInt(prompt("Number plz", "Number here..."), 10);

然后像这样交换条件

if (isNaN(num)) {
    alert("Unoperable...");
} else if (num < 10) {
    alert("Lower 10");
}

注意: 即使,parseInt 也接受数字,即使数字后跟的字符不是数字。例如,

console.log(parseInt('123abc456def'));
// 123

所以,为了绝对确定,您需要检查字符串是否只有数字,就像这样

num = prompt("Number plz", "Number here...");
if (/^\d+$/.test(num)) {
    alert("Unoperable...");
} else if (parseInt(num, 10) < 10) {
    alert("num < 10");
}

这里,^\d+$表示从字符串的开头(^)到字符串的结尾($),应该有一个或多个(+,如果是*,则表示零个或多个)位(\d)