回答:
const isNumber = value => !Number.isNaN(Number(value));
Airbnbのドキュメントを引用:
どうして?グローバルisNaNは、非数値を数値に強制変換し、NaNに強制変換するすべての場合にtrueを返します。この動作が必要な場合は、明示的にしてください。
// bad
isNaN('1.2'); // false
isNaN('1.2.3'); // true
// good
Number.isNaN('1.2.3'); // false
Number.isNaN(Number('1.2.3')); // true
Number('1.2.3')
上記の例にある理由です。
typeof
。そうしないと、チェックを実行するだけで済みます。
Number.isNaN(+'1.2.3')
これは使用する+
場合の追加Number.isNaN
参考までに、これはIEでは機能しません。ブラウザの互換性については、こちらをご覧ください。
@Andy Gaskell isNumber('1.2.3')
return true
、答えを編集してNumber()
、parseFloat()
const isEmpty = value => typeof value === 'undefined' || value === null || value === false;
const isNumeric = value => !isEmpty(value) && !Number.isNaN(Number(value));
console.log(isNumeric('5')); // true
console.log(isNumeric('-5')); // true
console.log(isNumeric('5.5')); // true
console.log(isNumeric('5.5.5')); // false
console.log(isNumeric(null)); // false
console.log(isNumeric(undefined)); // false
私の場合、5(整数)、5.4(10進数)、 '5'、 '5.4'を数値として扱いたいと思っていました。
同様の要件がある場合は、以下の方が効果的です。
const isNum = num => /^\d+$/.test(num) || /^\d+\.\d+$/.test(num);
//Check your variable if it is a number.
let myNum = 5;
console.log(isNum(myNum))
負の数を含めるには:
const isNum = num => /^-?\d+$/.test(num) || /^-?\d+\.\d+$/.test(num);
これにより、isNaNのグローバルな使用の問題もなくなります。isNum関数を通常のES5関数に変換すると、IEブラウザーでも機能します。
私にとってこれはうまくいき、ESlintには何の問題もありませんでした
window.isNaN()
Number.isNaN('abc')
ですfalse
。そしてisNaN('abc')
あるtrue
window.isNan()
は他のAirBnbの構成に反することを述べたいだけです(ルールはeslint.org/docs/rules/no-restricted-propertiesです)
no-restricted-properties
です。この問題のため、残念ながら非アクティブ化する必要がありました
isNaN
とNumber.isNaN
同じ機能ではありません。たとえばisNaN('1a') true Number.isNaN('1a') false