{"id":13353,"library":"isnumber","title":"isNumber","description":"The `isNumber` package provides a minimal, single-line utility function to determine if a value represents a finite number. Currently at version 1.0.0, this package is highly stable with an extremely infrequent release cadence, reflecting its narrow and well-defined scope (last published 13 years ago). Its key differentiator lies in its approach to type coercion: unlike `Number.isFinite()` which strictly checks the type, `isNumber` uses `parseFloat()` to first attempt to parse the input into a number. It then verifies that the parsed result is a finite number and not `NaN`. This makes it suitable for scenarios where number-like strings (e.g., \"123.45\") should be treated as valid numbers, but it also introduces specific behaviors for other complex types that are not strictly numbers or strings.","status":"maintenance","version":"1.0.0","language":"javascript","source_language":"en","source_url":"git@github.com:brycebaril/node-isnumber","tags":["javascript","number","test","isNumber","finite"],"install":[{"cmd":"npm install isnumber","lang":"bash","label":"npm"},{"cmd":"yarn add isnumber","lang":"bash","label":"yarn"},{"cmd":"pnpm add isnumber","lang":"bash","label":"pnpm"}],"dependencies":[],"imports":[{"note":"The package uses CommonJS `module.exports = function(...)` which translates to a default import in ESM contexts. Named imports will fail.","wrong":"import { isNumber } from 'isnumber'","symbol":"isNumber","correct":"import isNumber from 'isnumber'"},{"note":"Standard CommonJS import for Node.js environments. This is how the package is originally structured and shown in the README.","symbol":"isNumber (CommonJS)","correct":"const isNumber = require('isnumber')"},{"note":"For TypeScript users, the function's type can be inferred directly. The package does not ship separate type definitions, so rely on inference or a global `@types/isnumber` if available (none officially shipped).","symbol":"Type of isNumber","correct":"type IsNumberFn = typeof isNumber;"}],"quickstart":{"code":"import isNumber from 'isnumber';\n\nconsole.log('--- Valid Numbers (including coerced strings) ---');\nconsole.log('isNumber(13):', isNumber(13)); // true\nconsole.log('isNumber(\"1241.12\"):', isNumber(\"1241.12\")); // true\nconsole.log('isNumber(0xff):', isNumber(0xff)); // true (0xff is 255)\nconsole.log('isNumber(\"5e3\"):', isNumber(\"5e3\")); // true (5e3 is 5000)\n\nconsole.log('\\n--- Invalid Numbers ---');\nconsole.log('isNumber(Infinity):', isNumber(Infinity)); // false\nconsole.log('isNumber(\"cat\"):', isNumber(\"cat\")); // false\nconsole.log('isNumber({foo: \"bar\"}):', isNumber({foo: \"bar\"})); // false\nconsole.log('isNumber(NaN):', isNumber(NaN)); // false\nconsole.log('isNumber(null):', isNumber(null)); // false\nconsole.log('isNumber(undefined):', isNumber(undefined)); // false\nconsole.log('isNumber(\"\"):', isNumber(\"\")); // false\nconsole.log('isNumber([]):', isNumber([])); // false\n\nconsole.log('\\n--- Common Gotchas ---');\nconsole.log('isNumber([1]):', isNumber([1])); // true (due to parseFloat([1]) === 1)\nconsole.log('isNumber(new Number(42)):', isNumber(new Number(42))); // true (Number objects are parsed correctly)","lang":"typescript","description":"Demonstrates `isNumber` with various inputs, highlighting its string parsing and unique handling of single-element arrays."},"warnings":[{"fix":"If strict type checking for `number` primitives is required, use `typeof value === 'number' && Number.isFinite(value)` instead. Understand the `parseFloat()` behavior for non-string/non-number inputs if you intend to use `isNumber`.","message":"The `isNumber` function performs internal type coercion using `parseFloat()`. This means that values which are not strictly numbers or strings can sometimes be coerced into a valid number. For example, `isNumber([1])` returns `true` because `parseFloat([1])` evaluates to `1`.","severity":"gotcha","affected_versions":">=1.0.0"},{"fix":"Choose the utility that matches your intended coercion behavior. For strict type and value checking, use `Number.isFinite()`. For forgiving string-to-number parsing, `isNumber` is appropriate.","message":"`isNumber` behaves differently from the native `Number.isFinite()`. While `isNumber(\"123\")` returns `true` by parsing the string, `Number.isFinite(\"123\")` returns `false` as it does not coerce non-number types. Be aware of this distinction when choosing a utility.","severity":"gotcha","affected_versions":">=1.0.0"},{"fix":"Evaluate newer, similar packages like `is-number` (by jonschlinkert or ultirequiem) which offer more recent updates, broader test coverage, or specific type-guard features, or rely on built-in `Number.isFinite()` and explicit parsing functions.","message":"The `isnumber` package has not been updated in 13 years (since August 2013). While its functionality is simple and stable, it may not be actively maintained or respond to modern JavaScript ecosystem changes or new edge cases. Consider using more actively maintained alternatives or native JavaScript methods if long-term support is critical.","severity":"deprecated","affected_versions":">=1.0.0"}],"env_vars":null,"last_verified":"2026-04-19T00:00:00.000Z","next_check":"2026-07-18T00:00:00.000Z","problems":[{"fix":"Change the import statement to `import isNumber from 'isnumber';` to correctly import the default export.","cause":"Attempting to use `import { isNumber } from 'isnumber'` for a package that provides a default export (CommonJS `module.exports`).","error":"TypeError: isnumber_1.isNumber is not a function"},{"fix":"For ESM environments, use `import isNumber from 'isnumber';`. If you must use `require` in ESM, consider a CommonJS wrapper or a bundler that handles interoperability.","cause":"Using `const isNumber = require('isnumber')` in a modern ES Module (ESM) environment where `require` is not globally available.","error":"ReferenceError: require is not defined (in ESM context)"}],"ecosystem":"npm","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null,"pypi_latest":null,"cli_name":null,"cli_version":null}