当用户在此应用程序上键入一个空格时,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...");
}
}
这种行为背后的原因是什么?
检测空格的唯一方法是使用正则表达式?
最佳答案
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
)
关于Javascript 假定一个带有空格的字符串作为可操作值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34962734/