检查JavaScript中变量是数字还是字符串

有谁知道如何检查JavaScript中的变量是数字还是字符串?

路易卡卡西2020/03/13 16:49:35

晚会很晚;但是,当我想检查某些输入是字符串还是数字时,以下内容对我来说一直很有效。

return !!Object.prototype.toString.call(input).match(/\[object (String|Number)\]/);
西门Jim2020/03/13 16:49:34
function IsNumeric(num) {
    return ((num >=0 || num < 0)&& (parseInt(num)==num) );
}
GreenSamA2020/03/13 16:49:34

只需使用

myVar.constructor == String

要么

myVar.constructor == Number

如果要处理定义为对象或文字的字符串并进行保存,则不想使用辅助函数。

2020/03/13 16:49:34

类型检查

您可以使用typeof运算符检查变量的类型

typeof variable

价值检查

下面的代码对数字返回true,对其他任何东西返回false:

!isNaN(+variable);
猿神奇梅2020/03/13 16:49:34

嗯?只需使用正则表达式即可!:)

function isInteger(val) {
  return val.match(/^[0-9]$/)
}

function isFloat(val) {
  return val.match(/^[0-9]*/\.[0-9]+$/)
}
TomGO梅2020/03/13 16:49:34

jQuery使用以下代码:

function isNumber(obj) {
  return !isNaN( parseFloat( obj ) ) && isFinite( obj );
}
西里神奇2020/03/13 16:49:34

仅供参考,如果您使用的是jQuery,

$.isNumeric() 

处理这个。有关http://api.jquery.com/jQuery.isNumeric/的更多详细信息

路易理查德2020/03/13 16:49:34

我认为将var转换为字符串会降低性能,至少在最新的浏览器中执行的测试表明如此。

因此,如果您关心性能,我会使用:

typeof str === "string" || str instanceof String

用于检查变量是否为字符串(即使使用var str = new String("foo")str instanceof String也将返回true)。

至于检查,如果它是一个数字我会去的原生:isNaN; 功能。

JimGO2020/03/13 16:49:34

嗯,怎么样:

function IsString(obj) {
    return obj !== undefined && obj != null && obj.toLowerCase !== undefined;
}

经过几个月的进一步审查,这只能保证obj是一个toLowerCase定义了方法或属性名称的对象我为自己的回答感到ham愧。请参阅票数最高的typeof一个。

泡芙Tom2020/03/13 16:49:34

这是一种基于以下想法的方法:通过添加零或空字符串将输入强制为数字或字符串,然后进行类型相等性比较。

function is_number(x) { return x === x+0;  }
function is_string(x) { return x === x+""; }

由于某些不可思议的原因,x===x+0似乎效果优于x===+x

是否有任何失败的情况?

同样:

function is_boolean(x) { return x === !!x; }

这似乎比x===true || x===false略快typeof x==="boolean"(并且比快得多x===Boolean(x))。

然后还有

function is_regexp(x)  { return x === RegExp(x); }

所有这些都取决于特定于每种类型的“标识”操作的存在,该操作可以应用于任何值并可靠地产生所讨论类型的值。我无法想到这样的日期操作。

对于NaN,有

function is_nan(x) { return x !== x;}

这基本上是下划线的版本,因为它代表约比快四倍isNaN(),但在下划线源提到,“南是唯一的评论数量不等于本身”,并增加了对_.isNumber检查。为什么?还有哪些其他对象不等于自己?另外,下划线使用- x !== +x但是+这里有什么不同

然后对于偏执狂:

function is_undefined(x) { return x===[][0]; }

或这个

function is_undefined(x) { return x===void(0); }
路易米亚2020/03/13 16:49:34

或仅使用以下内容的倒数isNaN()

if(!isNaN(data))
  do something with the number
else
  it is a string

是的,使用jQuery $.isNumeric()更有趣。

十三西里GO2020/03/13 16:49:34

您可以将其除以1吗?

我认为问题将是类似“ 123ABG”的字符串输入

var Check = "123ABG"

if(Check == Check / 1)
{
alert("This IS a number \n")
}

else
{
alert("This is NOT a number \n")
}

这是我最近做的一种方式。

Green老丝Itachi2020/03/13 16:49:34

您正在寻找isNaN()

console.log(!isNaN(123));
console.log(!isNaN(-1.23));
console.log(!isNaN(5-2));
console.log(!isNaN(0));
console.log(!isNaN("0"));
console.log(!isNaN("2"));
console.log(!isNaN("Hello"));
console.log(!isNaN("2005/12/12"));

请参见MDN上的JavaScript isNaN()函数

米亚阿飞2020/03/13 16:49:34

检查值是字符串文字还是String对象:

function isString(o) {
    return typeof o == "string" || (typeof o == "object" && o.constructor === String);
}

单元测试:

function assertTrue(value, message) {
    if (!value) {
        alert("Assertion error: " + message);
    }
}

function assertFalse(value, message)
{
    assertTrue(!value, message);
}

assertTrue(isString("string literal"), "number literal");
assertTrue(isString(new String("String object")), "String object");
assertFalse(isString(1), "number literal");
assertFalse(isString(true), "boolean literal");
assertFalse(isString({}), "object");

检查数字类似:

function isNumber(o) {
    return typeof o == "number" || (typeof o == "object" && o.constructor === Number);
}