在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;
}

当前回答

将字符串转换为数字的方法是使用number,而不是parseFloat。

Number('1234') // 1234
Number('9BX9') // NaN

如果你喜欢速记,你也可以使用一元加号运算符:

+'1234' // 1234
+'9BX9' // NaN

检查NaN时要小心(运算符===和!==不能像NaN那样工作)。使用:

 isNaN(+maybeNumber) // returns true if NaN, otherwise false

其他回答

如果 var和= 0; var x;

那么,这个呢? 和+ = (x | 0);

我的解决方案:

 function isNumeric(val: unknown): val is string | number {
  return (
    !isNaN(Number(Number.parseFloat(String(val)))) &&
    isFinite(Number(val))
  );
}
// true
isNumeric("-10");
isNumeric("0");
isNumeric("0xff");
isNumeric("0xFF");
isNumeric("8e5");
isNumeric("3.1415");
isNumeric("+10");
isNumeric("144");
isNumeric("5");

// false
isNumeric("-0x42");
isNumeric("7.2acdgs");
isNumeric("");
isNumeric({});
isNumeric(NaN);
isNumeric(null);
isNumeric(true);
isNumeric(Infinity);
isNumeric(undefined);
isNumeric([]);
isNumeric("some string");
 const isNumeric = (value: string): boolean =>
  !new RegExp(/[^\d]/g).test(value.trim());

如果你想允许小数点

   const isNumeric = (value: string): boolean =>
      !new RegExp(/[^\d.]/g).test(value.trim());

字符串是否可以解析为数字是运行时关心的问题。Typescript不支持这个用例,因为它关注的是编译时(而不是运行时)安全。

将字符串转换为数字的方法是使用number,而不是parseFloat。

Number('1234') // 1234
Number('9BX9') // NaN

如果你喜欢速记,你也可以使用一元加号运算符:

+'1234' // 1234
+'9BX9' // NaN

检查NaN时要小心(运算符===和!==不能像NaN那样工作)。使用:

 isNaN(+maybeNumber) // returns true if NaN, otherwise false