Sign inDemoInstall


Package Overview
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies



Returns true if a number or string value is a finite number. Useful for regex matches, parsing, user input, etc.

Version published
Install size
10.3 kB

Package description

What is is-number?

The is-number npm package is a simple utility for checking if a value is a number. It works with various types of numeric representations, including strings that can be coerced to numbers, and provides a straightforward API for determining if a value can be considered a number in JavaScript.

What are is-number's main functionalities?

Check if a value is a number

This feature allows you to check if a value is a number, including numeric strings.

const isNumber = require('is-number');

console.log(isNumber(5)); // true
console.log(isNumber('5')); // true
console.log(isNumber('five')); // false

Check if a value is not a number

This feature allows you to check if a value is not a number, including strings that cannot be coerced to numbers and other non-numeric types.

const isNumber = require('is-number');

console.log(isNumber('foo')); // false
console.log(isNumber([1, 2, 3])); // false

Check if a value is a finite number

This feature allows you to check if a value is a finite number, excluding Infinity, -Infinity, and NaN.

const isNumber = require('is-number');

console.log(isNumber(Infinity)); // false
console.log(isNumber(-Infinity)); // false
console.log(isNumber(NaN)); // false

Other packages similar to is-number



is-number NPM version NPM monthly downloads NPM total downloads Linux Build Status

Returns true if the value is a finite number.

Please consider following this project's author, Jon Schlinkert, and consider starring the project to show your :heart: and support.


Install with npm:

$ npm install --save is-number

Why is this needed?

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'

This library offers a performant way to smooth out edge cases like these.


const isNumber = require('is-number');

See the tests for more examples.


isNumber(5e3);               // true
isNumber(0xff);              // true
isNumber(-1.1);              // true
isNumber(0);                 // true
isNumber(1);                 // true
isNumber(1.1);               // true
isNumber(10);                // true
isNumber(10.10);             // true
isNumber(100);               // true
isNumber('-1.1');            // true
isNumber('0');               // true
isNumber('012');             // true
isNumber('0xff');            // true
isNumber('1');               // true
isNumber('1.1');             // true
isNumber('10');              // true
isNumber('10.10');           // true
isNumber('100');             // true
isNumber('5e3');             // true
isNumber(parseInt('012'));   // true
isNumber(parseFloat('012')); // true


Everything else is false, as you would expect:

isNumber(Infinity);          // false
isNumber(NaN);               // false
isNumber(null);              // false
isNumber(undefined);         // false
isNumber('');                // false
isNumber('   ');             // false
isNumber('foo');             // false
isNumber([1]);               // false
isNumber([]);                // false
isNumber(function () {});    // false
isNumber({});                // false

Release history


  • Refactor. Now uses .isFinite if it exists.
  • Performance is about the same as v6.0 when the value is a string or number. But it's now 3x-4x faster when the value is not a string or number.


  • Optimizations, thanks to @benaadams.


Breaking changes

  • removed support for instanceof Number and instanceof String


As with all benchmarks, take these with a grain of salt. See the benchmarks for more detail.

# all
v7.0 x 413,222 ops/sec ±2.02% (86 runs sampled)
v6.0 x 111,061 ops/sec ±1.29% (85 runs sampled)
parseFloat x 317,596 ops/sec ±1.36% (86 runs sampled)
fastest is 'v7.0'

# string
v7.0 x 3,054,496 ops/sec ±1.05% (89 runs sampled)
v6.0 x 2,957,781 ops/sec ±0.98% (88 runs sampled)
parseFloat x 3,071,060 ops/sec ±1.13% (88 runs sampled)
fastest is 'parseFloat,v7.0'

# number
v7.0 x 3,146,895 ops/sec ±0.89% (89 runs sampled)
v6.0 x 3,214,038 ops/sec ±1.07% (89 runs sampled)
parseFloat x 3,077,588 ops/sec ±1.07% (87 runs sampled)
fastest is 'v6.0'



Pull requests and stars are always welcome. For bugs and feature requests, please create an issue.

Running Tests

Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:

$ npm install && npm test
Building docs

(This project's is generated by verb, please don't edit the readme directly. Any changes to the readme must be made in the readme template.)

To generate the readme, run the following command:

$ npm install -g verbose/verb#dev verb-generate-readme && verb

You might also be interested in these projects:




Jon Schlinkert


Copyright © 2018, Jon Schlinkert. Released under the MIT License.

This file was generated by verb-generate-readme, v0.6.0, on June 15, 2018.



Last updated on 04 Jul 2018

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.


Related posts

SocketSocket SOC 2 Logo


  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc