在Typescript中,这显示一个错误,即isNaN仅接受数值
isNaN('9BX46B6A')
并且返回false,因为parseFloat('9BX46B6A')
评估为9
isNaN(parseFloat('9BX46B6A'))
我仍然可以使用Visual Studio中出现的错误运行,但我想以正确的方式执行此操作。
目前,我已经编写了这个修改过的函数 -
static isNaNModified = (inputStr: string) => {
var numericRepr = parseFloat(inputStr);
return isNaN(numericRepr) || numericRepr.toString().length != inputStr.length;
}
答案 0 :(得分:228)
将字符串转换为数字的方法是Number
,而不是parseFloat
。
Number('1234') // 1234
Number('9BX9') // NaN
如果您喜欢速记,也可以使用一元加运算符:
+'1234' // 1234
+'9BX9' // NaN
在检查NaN时要小心(运营商===
和!==
无法按预期使用NaN
)。使用:
isNaN(maybeNumber) // returns true if NaN, otherwise false
答案 1 :(得分:39)
我使用 rxjs 库中的 isNumeric 运算符解决了这个问题(导入 rxjs / util / isNumeric
答案 2 :(得分:14)
我已经从 C Snover 解释中构建了一个函数。
function isNumber(value: string | number): boolean
{
return ((value != null) && !isNaN(Number(value.toString())));
}
答案 3 :(得分:5)
简单的答案:(注意空白和空值)
isNaN(+'111') = false;
isNaN(+'111r') = true;
isNaN(+'r') = true;
isNaN(+'') = false;
isNaN(null) = false;
答案 4 :(得分:4)
您可以使用Number.isFinite()
函数:
Number.isFinite(Infinity); // false
Number.isFinite(NaN); // false
Number.isFinite(-Infinity); // false
Number.isFinite('0'); // false
Number.isFinite(null); // false
Number.isFinite(0); // true
Number.isFinite(2e64); // true
注意:全局函数isFinite()
与后者Number.isFinite()
之间存在显着差异。在前者的情况下,将执行字符串强制转换-因此isFinite('0') === true
而Number.isFinite('0') === false
。
另外,请注意,这在IE中不可用!
答案 5 :(得分:0)
字符串是否可以解析为数字是运行时关注的问题。 Typescript不支持此用例,因为它专注于编译时(而非运行时)安全性。
答案 6 :(得分:0)
我会选择一个现有的且已经过测试的解决方案。例如,来自打字稿中的rxjs:
function isNumeric(val: any): val is number | string {
// parseFloat NaNs numeric-cast false positives (null|true|false|"")
// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
// subtraction forces infinities to NaN
// adding 1 corrects loss of precision from parseFloat (#15100)
return !isArray(val) && (val - parseFloat(val) + 1) >= 0;
}
答案 7 :(得分:0)
大多数时候,我们要检查的值是字符串还是数字,所以这是我使用的函数:
const isNumber = (n: string | number): boolean =>
!isNaN(parseFloat(String(n))) && isFinite(Number(n));
const willBeTrue = [0.1, '1', '-1', 1, -1, 0, -0, '0', "-0", 2e2, 1e23, 1.1, -0.1, '0.1', '2e2', '1e23', '-0.1', ' 898', '080']
const willBeFalse = ['9BX46B6A', "+''", '', '-0,1', [], '123a', 'a', 'NaN', 1e10000, undefined, null, NaN, Infinity, () => {}]
答案 8 :(得分:0)
对于Angular中的整数(非浮点数),您可以使用:
if (Number.isInteger(yourVariable)) {
...
}
答案 9 :(得分:0)
我这里的简单解决方案是:
const isNumeric = (val: string) : boolean => {
return !isNaN(Number(val));
}
// isNumberic("2") => true
// isNumeric("hi") => false;
答案 10 :(得分:0)
滚动浏览每个答案,惊讶地发现这个简单的单行文字还没有出现:
const isNumber = (val: string | number) => !!(val || val === 0) && !isNaN(Number(val.toString()));
答案 11 :(得分:-1)
如果 var sum=0; var x;
那么,这个呢? sum+=(x|0);