当用户在此应用程序上键入单个空格时,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...");
}
}
这种行为背后的原因是什么?
检测空格的唯一方法是使用正则表达式吗?
答案 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
)