我有一个函数来测试提示输入是否是一个数字,如下所示:
function myFunction()
{
var person = prompt("Please enter your name", "");
if (person != null)
{
if(isNaN(person))
{
document.write("hello " + person + "<br><br>");
}
else
document.write("You gave me a number");
}
else
{
document.write("You didn't answer.<br><br>");
}
}
但每次输入数字时都会输出hello +数字。我已经搜索了这个功能很长一段时间了,这对我来说没有意义,似乎它应该有效。为什么人回归真实?
答案 0 :(得分:3)
NaN is a special value in Javascript。 isNaN
做的是检查传递的值是否等于此特殊值。如果你想检查某些东西是不是数字流,你可以使用正则表达式:
if (!/^\d+(\.\d+)?/.exec(person)) {
或者将值解析为数字,看它是否转换回相同的字符串:
var n = parseFloat(person);
if (n.toString() !== person) {
*我们不使用===
是有原因的,但这超出了这个答案的范围。
答案 1 :(得分:1)
isNaN函数检查值是否为NaN。 NaN是在进行需要非数字的数字的操作时发生的值。请参阅documentation。
但是,函数不检查值是否为类型编号。要检查值是否为类型编号,请使用typeof
运算符
typeof person === 'number'
答案 2 :(得分:-1)
您的代码是使用isNaN方法的正确方法。但是,对于任何其他阅读此文章的人,我都看到了一个奇怪的异常,其中记录在案的IsNaN的使用无法正常工作,我通过将parseInt方法与IsNaN方法结合使用解决了这个问题。根据W3c网站(https://www.w3schools.com/jsref/jsref_isnan.asp),IsNan('123')应该返回false,而IsNan('g12')应该返回true,但是我看到的情况并非如此。 如果您无法使用已记录的方法,请尝试以下代码:
var unitsToAdd = parseInt($('#unitsToAdd').val());
if(isNaN(unitsToAdd)) {
alert('not a number');
$('#unitsToAdd').val('1');
returnVal = false;
}
或者,您也可以尝试这种经过良好测试的方法。
function isNumber(searchValue) {
var found = searchValue.search(/^(\d*\.?\d*)$/);
//Change to ^(\d*\.?\d+)$ if you don't want the number to end with a . such as 2.
//Currently validates .2, 0.2, 2.0 and 2.
if(found > -1) {
return true;
}
else {
return false;
}
}
希望这会有所帮助。