Number

JavaScript has only one type of number, and that is a 64-bit floating-point number.
  • Unlike languages like Java and C++, there is no distinction between whole numbers (integers) and real values (numbers with decimals).
  • JavaScript permanently stores numbers as double-precision floating-point, following the international IEEE 754 standard.
let num;
num = 3.14159265;
console.log(typeof num);
num = 3;
console.log(typeof num);

So, an apparent integer is implicitly a floating-point number!

const num = 1 / 2;
console.log(num);

There is, like in most programming languages, unavoidable round-off errors:

console.log(0.1 + 0.2);

Number literals

  • Decimal numbers: 42, 0.42
  • Exponential notation: 4.2e-10
  • Hexadecimal: 0x2A
  • Binary: 0b101010
  • Octal: 0o52
// Try any of the above
let num = 42; 
console.log(num);

Special Values

JavaScript has the special values Infinity and -Infinity:

console.log(1 / 0);
console.log(-1 / 0);
console.log(10 * Number.MAX_VALUE);

There is also NaN, which means "Not a Number." You get this when, e.g., number cannot be parsed from a string or when a Math operation result is not a real number.

console.log(parseInt("blahblah"));
console.log(Math.sqrt(-1));

You also get NaN when you do weird stuff!

console.log(0 * Infinity);
console.log("JavaScript" / 2);

For a reference, visit MDN web docs on Infinity and NaN.

Number Wrapper object

You can borrow many useful methods defined in Number object. For instance, there is a toString method with optional base argument (between 2 and 36):

const num = 42;
console.log(num.toString(2));

The toPrecision and toExponential can be used for formatting:

const num = 3.14159265;
console.log(num.toPrecision(2));
const val = 1000000; 
console.log(val.toExponential()); 

The Number object has several useful static method and constants as well. For example, there is parseInt method with optional base argument (between 2 and 36):

const num = "0x2A";
console.log(Number.parseInt(num, 16));

There is parseFloat method to convert floating point to number:

const num = "0.001";
console.log(Number.parseFloat(num) * 2);

There are several methods for type checking:

console.log(Number.isFinite(-1 / 0));
console.log(Number.isNaN(1 / 0));
console.log(Number.isInteger(2.1));

And many useful constants:

console.log(Number.MAX_VALUE);
console.log(Number.MIN_VALUE);
console.log(Number.MAX_SAFE_INTEGER);
console.log(Number.MIN_SAFE_INTEGER);
console.log(Number.POSITIVE_INFINITY);
console.log(Number.NEGATIVE_INFINITY);

For a reference, visit Number on MDN web docs.

Big Integer!

JavaScript number type cannot represent integers bigger than 253-1 (Number.MAX_SAFE_INTEGER constant). For integers larger than that limit, you can use a special built-in object, BigInt.

BigInt can be used to represent arbitrary large integers.

BigInt literal have suffix n:

const num = 18889465931478580854784n;
console.log(typeof num);
console.log(num * num);

You can also create BigInt by calling BigInt() function:

const num = Number.MAX_SAFE_INTEGER;
console.log(BigInt(num * num));

You cannot mix BigInt with other numbers

const num = 18889465931478580854784n;
console.log(num + 1);
Resources

For a reference, visit BigInt on MDN web docs.