use*_*546 143 typescript
在Typescript中,这显示一个错误,即isNaN仅接受数值
isNaN('9BX46B6A')
Run Code Online (Sandbox Code Playgroud)
并返回false,因为parseFloat('9BX46B6A')求值为9
isNaN(parseFloat('9BX46B6A'))
Run Code Online (Sandbox Code Playgroud)
我仍然可以运行Visual Studio中出现的错误,但我想以正确的方式执行.
目前,我已经写了这个修改过的功能 -
static isNaNModified = (inputStr: string) => {
var numericRepr = parseFloat(inputStr);
return isNaN(numericRepr) || numericRepr.toString().length != inputStr.length;
}
Run Code Online (Sandbox Code Playgroud)
C S*_*ver 270
将字符串转换为数字的方法是Number,而不是parseFloat.
Number('1234') // 1234
Number('9BX9') // NaN
Run Code Online (Sandbox Code Playgroud)
如果你喜欢速记,你也可以使用一元加运算符:
+'1234' // 1234
+'9BX9' // NaN
Run Code Online (Sandbox Code Playgroud)
检查NaN(操作员===并且!==不能按预期工作NaN)时要小心.使用:
isNaN(maybeNumber) // returns true if NaN, otherwise false
Run Code Online (Sandbox Code Playgroud)
Ric*_*Lee 44
我通过解决它ISNUMERIC运营商从rxjs库(进口rxjs/UTIL/ISNUMERIC
Gil*_*ain 24
我已经从C Snover解释中构建了一个函数.
function isNumber(value: string | number): boolean
{
return ((value != null) && !isNaN(Number(value.toString())));
}
Run Code Online (Sandbox Code Playgroud)
Hun*_* Vu 17
我这里的简单解决方案是:
const isNumeric = (val: string) : boolean => {
return !isNaN(Number(val));
}
// isNumberic("2") => true
// isNumeric("hi") => false;
Run Code Online (Sandbox Code Playgroud)
我会选择现有且已经测试过的解决方案。例如,来自打字稿中的 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;
}
Run Code Online (Sandbox Code Playgroud)
没有 rxjs isArray() 函数并使用简单类型:
function isNumeric(val: any): boolean {
return !(val instanceof Array) && (val - parseFloat(val) + 1) >= 0;
}
Run Code Online (Sandbox Code Playgroud)
您应该始终使用您的用例来测试此类功能。如果您有特殊的值类型,此函数可能不是您的解决方案。 您可以在这里测试该功能。
结果是:
enum : CardTypes.Debit : true
decimal : 10 : true
hexaDecimal : 0xf10b : true
binary : 0b110100 : true
octal : 0o410 : true
stringNumber : '10' : true
string : 'Hello' : false
undefined : undefined : false
null : null : false
function : () => {} : false
array : [80, 85, 75] : false
turple : ['Kunal', 2018] : false
object : {} : false
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,如果将此函数与枚举一起使用,则必须小心。
您可以使用该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
Run Code Online (Sandbox Code Playgroud)
注意:全局函数isFinite()和后者有显着区别Number.isFinite()。在前者的情况下,执行字符串强制 - 所以isFinite('0') === truewhile Number.isFinite('0') === false。
另外,请注意,这在 IE 中不可用!
简单的答案:(注意空白和空值)
isNaN(+'111') = false;
isNaN(+'111r') = true;
isNaN(+'r') = true;
isNaN(+'') = false;
isNaN(null) = false;
Run Code Online (Sandbox Code Playgroud)
https://codepen.io/CQCoder/pen/zYGEjxd?editors=1111
考虑到您的变量可以是字符串或数字或任何类型 - 对于 Angular/Typescript 中的完整数字(非浮点数),您可以使用:
var isFullNumber: boolean =
Number.isInteger(Number(yourVariable)) && yourVariable !== null;
Run Code Online (Sandbox Code Playgroud)
正如 @tarrbal 所指出的那样进行编辑 - 我们不能仅使用:
Number.isInteger(yourVariable);
Run Code Online (Sandbox Code Playgroud)
为了证明这一点,请检查这 3 个测试:
let testVariables = [0, 1, "0", "1", "A", {}, -3, 0.1, NaN, null, undefined];
let isFullNumber: boolean;
let ix: number = 1;
testVariables.forEach(v => {
isFullNumber = Number.isInteger(v); // <---
console.log(ix++, ': ', v, isFullNumber);
})
console.log('--------------');
ix = 1;
testVariables.forEach(v => {
isFullNumber = Number.isInteger(Number(v)); // <---
console.log(ix++, ': ', v, isFullNumber);
})
console.log('--------------');
ix = 1;
testVariables.forEach(v => {
isFullNumber = Number.isInteger(Number(v)) && v !== null; // <---
console.log(ix++, ': ', v, isFullNumber);
})
Run Code Online (Sandbox Code Playgroud)
这 3 个结果:
1 : 0 true
2 : 1 true
3 : 0 false <- would expect true
4 : 1 false <- would expect true
5 : A false
6 : {} false
7 : -3 true
8 : 0.1 false
9 : NaN false
10 : null false
11 : undefined false
----------------------------
1 : 0 true
2 : 1 true
3 : 0 true
4 : 1 true
5 : A false
6 : {} false
7 : -3 true
8 : 0.1 false
9 : NaN false
10 : null true <- would expect false
11 : undefined false
----------------------------
1 : 0 true
2 : 1 true
3 : 0 true
4 : 1 true
5 : A false
6 : {} false
7 : -3 true
8 : 0.1 false
9 : NaN false
10 : null false
11 : undefined false
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
137395 次 |
| 最近记录: |