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

标签 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...");
    }
}

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

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

最佳答案

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/

相关文章:

javascript - 如何在 Node 中从浏览器使用 SFTP 下载文件

javascript - 单击滚动到 div(在中心屏幕上显示 div)

c# - 比较两个 List<string> 是否相等

javascript - if(x>y) { x=y} 在 javaScript 中的简写

JavaScript 关联数组比较

javascript - bootstrap 按钮下拉菜单将所选值设置为 li

javascript - 更新范围内部对象

php - MYSQL 唠叨给定 bool 值而不是变量

jquery - 搜索不区分大小写字符串的元素

javascript - 在 php 中转义此 javascript 代码