Javascript假定一个字符串,其中空格为可操作值

时间:2016-01-23 11:14:49

标签: javascript string comparison

当用户在此应用程序上键入单个空格时,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...");
    }
}

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

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

1 个答案:

答案 0 :(得分:3)

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