JavaScript Number Properties

Built-in constants and limits for JavaScript numbers

πŸ“Š What are Number Properties?

JavaScript Number properties are built-in constants that define the limits and special values for numbers. They help you understand what JavaScript can handle.


// Check the largest possible number
console.log(Number.MAX_VALUE); // 1.7976931348623157e+308
                                    

Output:

1.7976931348623157e+308

Essential Number Properties

πŸ”

MAX_VALUE

Largest possible number

console.log(Number.MAX_VALUE);
// 1.7976931348623157e+308
πŸ”»

MIN_VALUE

Smallest positive number

console.log(Number.MIN_VALUE);
// 5e-324
♾️

POSITIVE_INFINITY

Represents positive infinity

console.log(Number.POSITIVE_INFINITY);
// Infinity
❓

NaN

Not-a-Number value

console.log(Number.NaN);
// NaN

πŸ”Ή MAX_VALUE and MIN_VALUE

These properties define the range of numbers JavaScript can handle:

// Largest possible number
console.log("Largest number:", Number.MAX_VALUE);

// Smallest positive number (closest to zero)
console.log("Smallest positive:", Number.MIN_VALUE);

// What happens when you exceed MAX_VALUE?
let tooBig = Number.MAX_VALUE * 2;
console.log("Too big:", tooBig); // Infinity

// Testing with practical numbers
let bigNumber = 1e308;
console.log("1e308 is valid:", bigNumber); // 1e+308
let tooBigNumber = 1e309;
console.log("1e309 becomes:", tooBigNumber); // Infinity

Output:

Largest number: 1.7976931348623157e+308
Smallest positive: 5e-324
Too big: Infinity
1e308 is valid: 1e+308
1e309 becomes: Infinity

πŸ”Ή Infinity Properties

JavaScript has special values for infinity:

// Positive infinity
console.log("Positive infinity:", Number.POSITIVE_INFINITY);

// Negative infinity
console.log("Negative infinity:", Number.NEGATIVE_INFINITY);

// How to get infinity
console.log("Division by zero:", 1/0); // Infinity
console.log("Negative division by zero:", -1/0); // -Infinity

// Checking for infinity
let result = 1e400; // Too big, becomes Infinity
console.log("Is infinite?", result === Number.POSITIVE_INFINITY); // true

// Infinity in calculations
console.log("Infinity + 1000:", Number.POSITIVE_INFINITY + 1000); // Infinity
console.log("Infinity / 2:", Number.POSITIVE_INFINITY / 2); // Infinity

Output:

Positive infinity: Infinity
Negative infinity: -Infinity
Division by zero: Infinity
Negative division by zero: -Infinity
Is infinite? true
Infinity + 1000: Infinity
Infinity / 2: Infinity

πŸ”Ή NaN (Not-a-Number)

NaN represents an invalid number result:

// Different ways to get NaN
console.log("Number.NaN:", Number.NaN);
console.log("Invalid math:", Math.sqrt(-1)); // NaN
console.log("Invalid conversion:", Number("hello")); // NaN
console.log("Undefined calculation:", 0/0); // NaN

// Important: NaN is not equal to itself!
console.log("NaN === NaN:", Number.NaN === Number.NaN); // false
console.log("NaN == NaN:", Number.NaN == Number.NaN); // false

// How to check for NaN
let result = Number("abc");
console.log("Is NaN (wrong way):", result === Number.NaN); // false
console.log("Is NaN (correct way):", Number.isNaN(result)); // true
console.log("Is NaN (old way):", isNaN(result)); // true

Output:

Number.NaN: NaN
Invalid math: NaN
Invalid conversion: NaN
Undefined calculation: NaN
NaN === NaN: false
NaN == NaN: false
Is NaN (wrong way): false
Is NaN (correct way): true
Is NaN (old way): true

πŸ”Ή Safe Integer Properties

JavaScript has limits for safe integer calculations:

// Largest safe integer
console.log("Max safe integer:", Number.MAX_SAFE_INTEGER); // 9007199254740991

// Smallest safe integer
console.log("Min safe integer:", Number.MIN_SAFE_INTEGER); // -9007199254740991

// Why "safe"? Beyond this, integers lose precision
let safeNumber = Number.MAX_SAFE_INTEGER;
let unsafeNumber = Number.MAX_SAFE_INTEGER + 1;

console.log("Safe number:", safeNumber); // 9007199254740991
console.log("Unsafe number:", unsafeNumber); // 9007199254740992
console.log("Unsafe + 1:", unsafeNumber + 1); // 9007199254740992 (same!)

// Checking if a number is safe
console.log("Is safe?", Number.isSafeInteger(safeNumber)); // true
console.log("Is unsafe?", Number.isSafeInteger(unsafeNumber)); // false

Output:

Max safe integer: 9007199254740991
Min safe integer: -9007199254740991
Safe number: 9007199254740991
Unsafe number: 9007199254740992
Unsafe + 1: 9007199254740992
Is safe? true
Is unsafe? false

πŸ”Ή Practical Examples

Real-world usage of number properties:

// Validating user input
function validateNumber(input) {
    let num = Number(input);
    
    if (Number.isNaN(num)) {
        return "Invalid number";
    }
    if (num === Number.POSITIVE_INFINITY) {
        return "Number too large";
    }
    if (num === Number.NEGATIVE_INFINITY) {
        return "Number too small";
    }
    if (!Number.isSafeInteger(num) && num % 1 === 0) {
        return "Integer too large for safe calculation";
    }
    
    return "Valid number: " + num;
}

// Test the function
console.log(validateNumber("42")); // "Valid number: 42"
console.log(validateNumber("abc")); // "Invalid number"
console.log(validateNumber("1e400")); // "Number too large"
console.log(validateNumber("9007199254740992")); // "Integer too large for safe calculation"

Output:

Valid number: 42
Invalid number
Number too large
Integer too large for safe calculation

🧠 Test Your Knowledge

What is special about NaN in JavaScript?