【问题标题】:Checking if variable is an Integer in Javascript检查变量是否是Javascript中的整数
【发布时间】:2015-01-28 13:52:40
【问题描述】:

我开始在学校学习 JavaScript,其中一项作业要求我检查用户的输入是否为整数。

此代码不适用于我在 Chrome 上

var person = prompt("Please enter your name", "Enter Name");
alert("Hello " + person);
var age = prompt("Please enter your age", "Enter age");

if (age == parseInt(age, 10))
    alert("data is integer")
else
    alert("data is not an integer")

无论我在提示框中输入字符串还是整数,它总是显示“数据不是整数”消息。

【问题讨论】:

标签: javascript parseint


【解决方案1】:

提示总是返回字符串,但由于 JS 是松散类型的语言,这些字符串会在需要时自动转换为数字(整数在 JS 中称为数字),这就是为什么您的示例工作正常

为了更好地检查,您可以使用!isNaN

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN

alert(!isNaN('10'));
alert(!isNaN('abc'));
alert(!isNaN(10));

对于疯狂的投票者,这是 OP 代码的优化版本:

var age = parseInt(prompt("Please enter your age", "Enter age"), 10);

alert(isNaN(age) ? 'Not a number' : age);

【讨论】:

  • isNaN 不会检查整数,而是检查数字(浮点数和整数):所以 alert(!isNaN(10.6));不适合某个年龄。
  • @KyleK 我们显然是在谈论字符串与整数……但感谢您的反对。
  • 变量名是age。问题是检查是否是整数。抱歉 isNaN 不合适。
  • @KyleK 你将从不EVER从 JS 提示符中获取一个整数。
  • 我们从来没有谈论过你的答案,而是抨击我的......我总是可以说出同样愚蠢的事情,比如负数不适合称为年龄的变量,但你的答案并不能处理它们...但这是毫无疑问的范围。
【解决方案2】:

prompt 将始终返回一个字符串,因此在您的情况下:

var integerAge = parseInt(age);

if(!isNaN(integerAge) && age === '' + integerAge)
    alert("data is integer")
else
    alert("data is not an integer")

如果是年龄,您还可能会在下一个验证步骤中检查它是带有一些 integerAge >= 0 或自定义最小值和最大值的正整数。

【讨论】:

  • == 没有检查变量的类型,它应该具有相同的行为
  • 是的,我知道,所以我使用 === 来检查类型。
  • 您能解释一下为什么原始代码不起作用吗?
  • @user3072143 "15" == 15"15" === "" + 15 结果相同,如何解决您的问题?
  • @KyleK 当你输入你的年龄时你给一个 0 之前?,如果一个数字以 0 开头,javascript 把这个值当作八进制
【解决方案3】:

你可以试试这个来检查它是否是一个整数:

function isInteger(x) {
        return x % 1 === 0;
    }

【讨论】:

  • 您能解释一下为什么原始代码不起作用吗?
  • 有些白痴更喜欢投反对票而不是写下他认为好的答案......悲伤的时候。
  • 代码问题确实有效,然后给出其他最佳解决方案
  • 伤心,甚至让我失去动力。作为一名新开发人员,我对编程一无所知。当我有一个工作选项时,我会给它。只是为了同情@Shomz而给你投票,而为工作答案投赞成票:)
  • @KornelitoBenito 是的,有时它也会让我感到沮丧,而且我不是新来的。保持你的下巴,它不会经常发生 - 它通常是一个糟糕的发布/不清楚的问题 + 在你发布答案的那一刻阅读它的疯子。 :)
猜你喜欢
  • 2011-04-08
  • 2013-01-16
  • 1970-01-01
  • 1970-01-01
  • 2013-10-14
  • 2011-01-12
  • 2014-01-25
  • 1970-01-01
  • 2022-11-17
相关资源
最近更新 更多