is-number
In JavaScript, itβs not always as straightforward as it should be to reliably
check if a value is a number. Itβs common for devs to use +
, -
, or
Number()
to cast a string value to a number (for example, when values are
returned from user input, regex matches, parsers, etc). But there are many
non-intuitive edge cases that yield unexpected results:
console.log(+[]); //=> 0
console.log(+""); //=> 0
console.log(+" "); //=> 0
console.log(typeof NaN); //=> 'number'
Usage
Deno π¦
import { assertIsNumber, isNumber } from "https://deno.land/x/is_number/mod.ts";
isNumber("hello"); //=> false
isNumber("678"); //=> true
isNumber({}); //=> false
isNumber(+{ a: "34" }); //=> false
isNumber(345); //=> true
assertIsNumber([123]); //=> throws
assertIsNumber({}); //=> throws
assertIsNumber(34); //=> doesn't throws
Node.js π’
import { assertIsNumber, isNumber } from "@ultirequiem/is-number";
Browser
You can use any CDN π₯
Eg. ESM βΆ SkyPack / script tag βΆ JSDelivr.
The API is the same on all this platforms.
Documentation
Includes TypeScript type guards, so using it will narrow the type of previously-unknown values.
export function isEven(n: unknown): boolean {
n++ // Error, n is not a number
assertIsNumber(n);
return n % 2 === 0; // OK
}
True Cases
isNumber(5e3);
isNumber(0xff);
isNumber(-1.1);
isNumber(0);
isNumber(1);
isNumber(1.1);
isNumber(10);
isNumber(10.1);
isNumber(100);
isNumber("-1.1");
isNumber("0");
isNumber("012");
isNumber("0xff");
isNumber("1");
isNumber("1.1");
isNumber("10");
isNumber("10.10");
isNumber("100");
isNumber("5e3");
isNumber(parseInt("012"));
isNumber(parseFloat("012"));
False cases
Everything else is false.
isNumber(Infinity);
isNumber(NaN);
isNumber(null);
isNumber(undefined);
isNumber("");
isNumber(" ");
isNumber("foo");
isNumber([1]);
isNumber([]);
isNumber(function () {});
isNumber({});
See the tests for more examples.
CLI Tool
Was done mainly as usage example.
Install
- Node.js π¦
npm install -g @ultirequiem/is-number
- Deno π¦
deno install https://deno.land/x/is_number/is-number.ts
Usage
is-number 1 2 hey
true
true
false
Or with the verbose flag π
is-number 1 2 hey --verbose
"1" is a number? true
"2" is a number? true
"hey" is a number? false
Support
Open an Issue, I will check it a soon as possible π
If you want to hurry me up a bit send me a tweet π
Consider supporting me on Patreon if you like my work π
Donβt forget to star the repo β
Versioning
We use SemVer for versioning. For the versions available, see the tags.
Authors
Eliaz Bobadilla (a.k.a UltiRequiem) - Creator and Maintainer πͺ
See also the full list of contributors who participated in this project.
Licence
Licensed under the MIT License.