UNPKG

@alwatr/is-number

Version:

A simple utility to Check the value is number or can convert to a number, for example string ' 123 ' can be converted to 123.

141 lines (108 loc) 3.83 kB
# is-number A lightweight, high-performance utility to check if a value is a number or can be converted to a number. ## Installation ```bash yarn add @alwatr/is-number # or npm install @alwatr/is-number ``` ## Usage ```typescript import {isNumber, toNumber, isFiniteNumber} from '@alwatr/is-number'; // Check if a value is a number isNumber(123); // true isNumber('123'); // true isNumber('abc'); // false // Convert a value to a number if possible toNumber(123); // 123 toNumber('123'); // 123 toNumber('abc'); // null // Check if a value is a finite number (without type coercion) isFiniteNumber(123); // true isFiniteNumber(Infinity); // false isFiniteNumber('123'); // false (no coercion) ``` ## API ### isNumber(value: unknown): boolean Checks if the value is a number or can be converted to a number. ### toNumber(value: unknown): number | null Converts the value to a number if possible, otherwise returns `null`. ### isFiniteNumber(value: unknown): boolean A cross-browser polyfill for `Number.isFinite`. Unlike the global `isFinite`, this doesn't coerce values to numbers before checking. ## Why is this needed? JavaScript type behavior can be confusing. This library helps to simplify number validation: ```ts console.log(typeof '123'); // 'string' console.log(+[]); // 0 console.log(+''); // 0 console.log(+' '); // 0 console.log(typeof NaN); // 'number' console.log(typeof Infinity); // 'number' ``` ### isNumber Examples #### Returns `true` ```ts isNumber(5e3); // true isNumber(0xff); // true isNumber(-1.1); // true isNumber(0); // true isNumber(1); // true isNumber(1.1); // true isNumber('-1.1'); // true isNumber('0'); // true isNumber('0xff'); // true isNumber('1'); // true isNumber('1.1'); // true isNumber('5e3'); // true isNumber('012'); // true isNumber(' 123 '); // true ``` #### Returns `false` ```ts isNumber(Infinity); // false isNumber(NaN); // false isNumber(null); // false isNumber(undefined); // false isNumber(''); // false isNumber(' '); // false isNumber('foo'); // false isNumber('123foo'); // false isNumber([1]); // false isNumber([]); // false isNumber(function () {}); // false isNumber({}); // false ``` ### toNumber Examples #### Returns a number ```ts toNumber(5e3); // 5000 toNumber(0xff); // 255 toNumber(-1.1); // -1.1 toNumber(0); // 0 toNumber(1); // 1 toNumber('-1.1'); // -1.1 toNumber('0'); // 0 toNumber('0xff'); // 255 toNumber('5e3'); // 5000 toNumber(' 123 '); // 123 ``` #### Returns `null` ```ts toNumber(Infinity); // null toNumber(NaN); // null toNumber(null); // null toNumber(undefined); // null toNumber(''); // null toNumber(' '); // null toNumber('foo'); // null toNumber('123foo'); // null toNumber([1]); // null toNumber([]); // null toNumber(function () {}); // null toNumber({}); // null ``` ## Sponsors The following companies, organizations, and individuals support Nanolib ongoing maintenance and development. Become a Sponsor to get your logo on our README and website. ### Contributing Contributions are welcome! Please read our [contribution guidelines](https://github.com/Alwatr/.github/blob/next/CONTRIBUTING.md) before submitting a pull request.