javascript isNaNでの数値判定について
- 作成日 2021.02.14
- 更新日 2022.08.05
- javascript
- javascript

javascriptで、isNaNでの数値判定を行うと、nullやtrue・falseなどが数値と判定されるため、使用すべきではないので、その実例を記述してます。
環境
- OS windows10 pro 64bit
- Apache 2.4.43
- ブラウザ chrome 103.0.5060.134
数値判定
「isNaN」での数値判定を行うと「javascript」の仕様で「null」や「true・false」などが数値に変換されてしまうため、数値であると判定されてしまいます。
console.log(
!isNaN('a') // false
);
console.log(
!isNaN(1) // true
);
console.log(
!isNaN(-1) // true
);
// nullは0扱い
console.log(
!isNaN(null) // true
);
console.log(
!isNaN(true) // true
);
console.log(
!isNaN(false) // true
);
console.log(
!isNaN(Number.MIN_VALUE) // true
);
console.log(
!isNaN(Number.MAX_VALUE) // true
);
console.log(
!isNaN('1') // true
);
正規表現を使用
数値判定を行う場合は、正規表現か「」を使用するのがおすすめです。
// + - 符号と小数点を含む数値判定
const regex = RegExp(/^[-+]?[0-9]+(\.[0-9]+)?$/);
console.log(
regex.test(1) // true
);
console.log(
regex.test(0.01) // true
);
console.log(
regex.test(-1.11) // true
);
console.log(
regex.test(0xFF) // true
);
console.log(
regex.test(Number.MIN_VALUE) // false
);
console.log(
regex.test(Number.MAX_VALUE) // false
);
console.log(
regex.test(Number.MIN_SAFE_INTEGER) // true
);
console.log(
regex.test(Number.MAX_SAFE_INTEGER) // true
);
console.log(
regex.test(10n) // true
);
console.log(
regex.test('1') // true
);
console.log(
regex.test('-1.1') // true
);
console.log(
regex.test('01') // true
);
console.log(
regex.test(true) // false
);
console.log(
regex.test(false) // false
);
console.log(
regex.test('a') // false
);
console.log(
regex.test([10]) // false
);
console.log(
regex.test({a:1}) // false
);
console.log(
regex.test(null) // false
);
console.log(
regex.test(undefined) // false
);
console.log(
regex.test(NaN) // false
);
console.log(
regex.test(Infinity) // false
);
ただし、「文字列の数値」は「true」に、「Number.MAX_VALUE」と「Number.MIN_VALUE」などは「false」になります。
console.log(
regex.test(Number.MIN_VALUE) // false
);
console.log(
regex.test(Number.MAX_VALUE) // false
);
console.log(
regex.test('1') // true
);
「isFinite」を使用すれば、これらは逆に判定されます。
※ただし、BIGINT型は「false」になります。
console.log(
Number.isFinite(1) // true
);
console.log(
Number.isFinite(0.01) // true
);
console.log(
Number.isFinite(-1.11) // true
);
console.log(
Number.isFinite(0xFF) // true
);
console.log(
Number.isFinite(Number.MIN_VALUE) // true
);
console.log(
Number.isFinite(Number.MAX_VALUE) // true
);
console.log(
Number.isFinite(Number.MIN_SAFE_INTEGER) // true
);
console.log(
Number.isFinite(Number.MAX_SAFE_INTEGER) // true
);
console.log(
Number.isFinite(10n) // false
);
console.log(
Number.isFinite('1') // false
);
console.log(
Number.isFinite('-1.1') // false
);
console.log(
Number.isFinite('01') // false
);
console.log(
Number.isFinite(true) // false
);
console.log(
Number.isFinite(false) // false
);
console.log(
Number.isFinite('a') // false
);
console.log(
Number.isFinite([10]) // false
);
console.log(
Number.isFinite({a:1}) // false
);
console.log(
Number.isFinite(null) // false
);
console.log(
Number.isFinite(undefined) // false
);
console.log(
Number.isFinite(NaN) // false
);
console.log(
Number.isFinite(Infinity) // false
);
-
前の記事
ASP.NET Core データベース ファースト(db first)でモデルを生成する 2021.02.14
-
次の記事
python ファイル・フォルダをコピーする 2021.02.14
コメントを書く