如何使用JavaScript检查变量是字符串还是数字

6

我有一个变量var number="1234",虽然这个数值是数字,但它被包含在""中,因此当我使用typeofNaN检查时,得到的类型是字符串。

function test()
{
    var number="1234"

if(typeof(number)=="string")
{
    alert("string");
}
if(typeof(number)=="number")
{
    alert("number");
}

}

我经常得到alert("string"),请问如何检查这是否为数字?


由于您使用了 "" 存储它,因此它将仅为字符串。 您需要提供 var number = 12345。 - Gaurav Shah
1
看一下这个答案中定义的函数 - https://dev59.com/3nVD5IYBdhLWcg3wU56H - ipr101
6个回答

8

据我理解,您正在询问一种检测字符串是否表示数值的测试方法。

一个快速的测试方法是:

function test() {
   var number="1234"
   return (number==Number(number))?"number":"string"
}

如果不使用new关键字调用As Number函数,则将字符串转换为数字。 如果变量内容未被修改(==会将数值类型强制转换回字符串类型),则您正在处理一个数字。否则,它是一个字符串。

function isNumeric(value) {
   return (value==Number(value))?"number":"string"
}

/* tests evaluating true */
console.log(isNumeric("1234"));  //integer
console.log(isNumeric("1.234")); // float
console.log(isNumeric("12.34e+1")); // scientific notation
console.log(isNumeric(12));     // Integer
console.log(isNumeric(12.7));   // Float
console.log(isNumeric("0x12")); // hex number

/* tests evaluating false */
console.log(isNumeric("1234e"));
console.log(isNumeric("1,234"));
console.log(isNumeric("12.34b+1"));
console.log(isNumeric("x"));

当值为空字符串或空格时会失败,因为两者都转换为0且0 == '' - RobG

5

这条线

 var number = "1234";

使用值为“1234”的引号创建一个新的字符串对象,这意味着它是一个字符串。

如果要检查字符串是否只包含数字,则可以使用正则表达式

if (number.match(/^-?\d+$/)) {
    alert("It's a whole number!");
} else if (number.match(/^-?\d+*\.\d+$/)) {
    alert("It's a decimal number!");
}

模式/^\d+$/的意思是:在字符串开头(^)可能有一个负号(-?),然后是一个数字(\d),接着是任意多个数字(+),最后是字符串结尾($)。另一个模式只是查找数字组之间的点。


1
只有在值只包含数字的情况下才能正常工作,任何其他值(例如-1或1.5)将返回false。针对[Validate numbers in JavaScript - IsNumeric()](https://dev59.com/3nVD5IYBdhLWcg3wU56H#1830844)发布了一个强大的*isNumber()*函数。 - RobG

2

使用 parseInt,它将 "abcd" 和 "1234" 都转换为整数。这给了我错误的结果。我只想将 "1234" 转换为数字值。 - Romi
@Romi,实际上'romi'的“数字”值为NaN(不是数字)。也许你应该检查一下结果变量是否为isNaN(https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/isNaN)。 - spender

0

因为var number="1234"是一个字符串。双引号使它成为文字。

如果你想要一个数字,可以这样使用

var number = 1234;

更新:

如果你从一个输入标签中获取输入,那么 dataType 将会是字符串类型。如果你想要把它转换成数字,你可以使用 parseInt() 函数。

var number = "1234";

var newNumber = parseInt(number);

alert(typeof newNumber); // will result in string

Ibu: 是的,但我的问题是我从文本框中获取了“1234”,如何去掉“”使其成为数字。尽管当我在从文本框中获取的数据上放置警报时,我得到的是1234,但在检查它时却给我一个字符串。 - Romi
请看我的更新@Romi,使用parseInt()处理整数或parseFloat()处理小数可以帮助解决这个问题。 - Ibu
当输入包含非数字字符时,会失败。 - RobG

0
将其转换为数字,然后与原始字符串进行比较。
if ( parseFloat(the_string,10) == the_string ) {
    // It is a string containing a number (and only a number)
}

0

另一种简单的方法:

var num_value = +value;
if(value !== '' && !isNaN(num_value)) {
    // the string contains (is) a number
}

空字符串转换为零,因此 !isNaN(+('')) 返回 false。另外,空格和 null 也会转换为零,因此它们将返回 true(尽管在这种情况下 null 不是预期的值)。 - RobG
我认为最简单的方法是:function isNumber(n) { return !isNaN(parseFloat(n)) && isFinite(n); },它发布在这里 - RobG

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接