Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/ultirequiem/is-number

๐Ÿงต Check if something is a number
https://github.com/ultirequiem/is-number

deno denoland javascript typescript

Last synced: 3 months ago
JSON representation

๐Ÿงต Check if something is a number

Awesome Lists containing this project

README

        

# is-number

[![Code Coverage](https://codecov.io/gh/ultirequiem/is-number/branch/main/graph/badge.svg)](https://codecov.io/gh/ultirequiem/is-number)
[![Deno Doc](https://doc.deno.land/badge.svg)](https://doc.deno.land/https/deno.land/x/is_number/mod.ts)

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:

```javascript
console.log(+[]); //=> 0
console.log(+""); //=> 0
console.log(+" "); //=> 0
console.log(typeof NaN); //=> 'number'
```

## Usage

### [Deno ๐Ÿฆ•](https://deno.land/x/is_number)

```javascript
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 ๐Ÿข](https://npmjs.com/package/@ultirequiem/is-number)

```javascript
import { assertIsNumber, isNumber } from "@ultirequiem/is-number";
```

### Browser

You can use any [CDN](https://en.wikipedia.org/wiki/Content_delivery_network) ๐Ÿ”ฅ

Eg. [ESM](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules)
โ–ถ [SkyPack](https://cdn.skypack.dev/@ultirequiem/is-number) _/_
[script tag](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script) โ–ถ
[JSDelivr](https://cdn.jsdelivr.net/npm/@ultirequiem/is-number).

_The API is the same on all this platforms._

## Documentation

[Autogenerated Documentation](https://doc.deno.land/https://deno.land/x/is_number/mod.ts)

Includes
[TypeScript type guards](https://www.typescriptlang.org/docs/handbook/2/narrowing.html#using-type-predicates),
so using it will narrow the type of previously-unknown values.

```javascript
export function isEven(n: unknown): boolean {
n++ // Error, n is not a number

assertIsNumber(n);

return n % 2 === 0; // OK
}
```

### True Cases

```javascript
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.

```javascript
isNumber(Infinity);
isNumber(NaN);
isNumber(null);
isNumber(undefined);
isNumber("");
isNumber(" ");
isNumber("foo");
isNumber([1]);
isNumber([]);
isNumber(function () {});
isNumber({});
```

See the [tests](./mod_test.ts) for more examples.

## CLI Tool

Was done mainly as usage example.

### Install

- Node.js ๐Ÿฆ

```sh
npm install -g @ultirequiem/is-number
```

- Deno ๐Ÿฆ•

```sh
deno install https://deno.land/x/is_number/is-number.ts
```

### Usage

```sh
is-number 1 2 hey
true
true
false
```

Or with the verbose flag ๐Ÿ‘‡

```sh
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](https://twitter.com/intent/tweet?text=%40UltiRequiem%20) ๐Ÿ˜†

Consider [supporting me on Patreon](https://patreon.com/UltiRequiem) if you like
my work ๐Ÿš€

Don't forget to star the repo โญ

## Versioning

We use [SemVer](http://semver.org) for versioning. For the versions available,
see the [tags](https://github.com/UltiRequiem/is-number/tags).

## Authors

[Eliaz Bobadilla (a.k.a UltiRequiem)](https://ultirequiem.com) - Creator and
Maintainer ๐Ÿ’ช

See also the full list of
[contributors](https://github.com/UltiRequiem/is-number/contributors) who
participated in this project.

## Licence

Licensed under the MIT License.