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
)
当用户在此应用程序上键入单个 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
)