有谁知道如何在 JavaScript 中检查变量是数字还是字符串?
在 JavaScript 中检查变量是数字还是字符串
IT技术
javascript
types
2021-01-20 12:52:39
6个回答
如果您正在处理文字符号,而不是构造函数,则可以使用typeof :。
typeof "Hello World"; // string
typeof 123; // number
如果您通过构造函数创建数字和字符串,例如var foo = new String("foo")
,您应该记住,typeof
可能会返回object
for foo
。
也许检查类型的更简单的方法是利用underscore.js 中的方法(可以在此处找到带注释的源代码),
var toString = Object.prototype.toString;
_.isString = function (obj) {
return toString.call(obj) == '[object String]';
}
这将返回true
以下内容的布尔值:
_.isString("Jonathan"); // true
_.isString(new String("Jonathan")); // true
最好的方法是使用isNaN
+ 类型转换:
更新 all-in 方法:
function isNumber(n) { return !isNaN(parseFloat(n)) && !isNaN(n - 0) }
同样使用正则表达式:
function isNumber(n) { return /^-?[\d.]+(?:e-?\d+)?$/.test(n); }
------------------------
isNumber('123'); // true
isNumber('123abc'); // false
isNumber(5); // true
isNumber('q345'); // false
isNumber(null); // false
isNumber(undefined); // false
isNumber(false); // false
isNumber(' '); // false
我发现的最好方法是检查字符串上的方法,即:
if (x.substring) {
// do string thing
} else{
// do other thing
}
或者如果您想对数字属性进行数字检查,
if (x.toFixed) {
// do number thing
} else {
// do other thing
}
这有点像“鸭子打字”,这取决于您哪种方式最有意义。我没有足够的 karma 来评论,但 typeof 对盒装字符串和数字失败,即:
alert(typeof new String('Hello World'));
alert(typeof new Number(5));
会提醒“对象”。
您正在寻找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() 函数。
从 ES2015 开始,检查变量是否包含有效数字的正确方法是 Number.isFinite(value)
例子:
Number.isFinite(Infinity) // false
Number.isFinite(NaN) // false
Number.isFinite(-Infinity) // false
Number.isFinite(0) // true
Number.isFinite(2e64) // true
Number.isFinite('0') // false
Number.isFinite(null) // false