JavaScript Number Methods

JavaScript provides built-in methods to work with numbers. These methods can convert numbers to strings, format decimal places, parse strings into numbers, and validate number types.

toString() and valueOf()

toString() converts a number to a string. You can optionally pass a radix (base) for different number systems. valueOf() returns the primitive value of a Number object.

toString() and valueOf()
let num = 255;

// Convert to string
console.log(num.toString());
console.log(typeof num.toString());

// Different bases (radix)
console.log(num.toString(2));
console.log(num.toString(8));
console.log(num.toString(16));

// valueOf() returns primitive number
let numObj = new Number(42);
console.log(numObj.valueOf());
console.log(typeof numObj.valueOf());

toFixed() and toPrecision()

toFixed() formats a number to a specified number of decimal places. toPrecision() formats a number to a specified total number of significant digits. Both return strings.

Formatting Numbers
let price = 9.6789;

// toFixed(decimals) — fixed decimal places
console.log(price.toFixed(0));
console.log(price.toFixed(2));
console.log(price.toFixed(4));

let pi = 3.14159265;

// toPrecision(digits) — total significant digits
console.log(pi.toPrecision(2));
console.log(pi.toPrecision(4));
console.log(pi.toPrecision(7));

// Useful for currency
let total = 19.1;
console.log(`$${total.toFixed(2)}`);

Number(), parseInt(), parseFloat()

These global functions convert other types to numbers. Number() converts the entire value, parseInt() extracts an integer from the beginning of a string, and parseFloat() extracts a floating-point number.

Converting to Numbers
// Number() — converts the entire value
console.log(Number("123"));
console.log(Number("123.45"));
console.log(Number("  99  "));
console.log(Number("12abc"));
console.log(Number(true));
console.log(Number(false));
console.log(Number(""));

// parseInt() — extracts integer from start
console.log(parseInt("42px"));
console.log(parseInt("3.14"));
console.log(parseInt("0xFF", 16));
console.log(parseInt("11", 2));

// parseFloat() — extracts decimal from start
console.log(parseFloat("3.14rem"));
console.log(parseFloat("  42.5  "));
console.log(parseFloat("abc"));

Number.isInteger(), Number.isFinite(), Number.isNaN()

These static methods on the Number object provide reliable type checking for numbers. Unlike the global isNaN() and isFinite(), these do not coerce the argument to a number first.

Number Validation Methods
// Number.isInteger()
console.log(Number.isInteger(42));
console.log(Number.isInteger(42.0));
console.log(Number.isInteger(42.5));
console.log(Number.isInteger("42"));

// Number.isFinite()
console.log(Number.isFinite(100));
console.log(Number.isFinite(Infinity));
console.log(Number.isFinite(-Infinity));
console.log(Number.isFinite(NaN));
console.log(Number.isFinite("100"));

// Number.isNaN() vs global isNaN()
console.log(Number.isNaN(NaN));
console.log(Number.isNaN("hello"));
console.log(isNaN("hello"));
console.log(Number.isNaN(undefined));

Global isNaN() vs Number.isNaN()

The global isNaN() first coerces its argument to a number, then checks if it is NaN. Number.isNaN() does not coerce — it only returns true if the value is exactly NaN. Always prefer Number.isNaN() for reliable checks.

isNaN Comparison
// Global isNaN() coerces first
console.log(isNaN("hello"));
console.log(isNaN(undefined));
console.log(isNaN({}));

// Number.isNaN() does NOT coerce
console.log(Number.isNaN("hello"));
console.log(Number.isNaN(undefined));
console.log(Number.isNaN(NaN));

// Practical example
let result = 0 / 0;
console.log(Number.isNaN(result));
MethodDescriptionReturns
toString(base)Convert to string in given baseString
toFixed(n)Format with n decimal placesString
toPrecision(n)Format with n significant digitsString
valueOf()Get primitive number valueNumber
Number(val)Convert value to numberNumber
parseInt(str, base)Parse integer from stringNumber
parseFloat(str)Parse float from stringNumber
Number.isInteger(val)Check if value is an integerBoolean
Number.isFinite(val)Check if value is finiteBoolean
Number.isNaN(val)Check if value is exactly NaNBoolean
📝 Note: Always use Number.isNaN() instead of the global isNaN(). The global version coerces its argument, so isNaN('hello') returns true even though 'hello' is not NaN — it's a string.
Exercise:
What does parseInt('42px') return?
Try it YourselfCtrl+Enter to run
Click Run to see the output here.