JavaScript Number MIN_SAFE_INTEGER Property

Beginner
⏱️ 10 min read
📚 Updated: Jul 2026
🎯 5 Examples
🚀 5 Try-it labs
Static property

What You’ll Learn

Number.MIN_SAFE_INTEGER is a static data property on Number (same API as MDN Number.MIN_SAFE_INTEGER). It is the smallest integer a JavaScript Number can represent exactly−(253 − 1) (-9007199254740991). Below it, use BigInt. This tutorial covers its value, the famous −1 === −2 trap, how it mirrors MAX_SAFE_INTEGER, five examples, and try-it labs.

01

Kind

Static property

02

Value

−(253−1)

03

Means

Exact integers

04

Below

Use BigInt

05

Writable

No

06

Baseline

Everywhere

Introduction

Safe integers form a symmetric window around zero. The positive edge is Number.MAX_SAFE_INTEGER; the negative edge is Number.MIN_SAFE_INTEGER — exactly -Number.MAX_SAFE_INTEGER.

Inside that window, every integer is exact and comparable. Step one past the negative bound and neighbors start collapsing — just like on the positive side.

💡
Static Property

Static properties belong to Number itself. Always write Number.MIN_SAFE_INTEGER. There is no (5).MIN_SAFE_INTEGER, and you do not call it like a function.

This page is part of JavaScript Number Properties. Related tools include Number.isSafeInteger(), Number.MAX_SAFE_INTEGER, and Number.MIN_VALUE (a different concept — smallest positive Number).

Understanding the MIN_SAFE_INTEGER Property

“Safe” means the integer can be stored exactly and compared correctly. The safe range is Number.MIN_SAFE_INTEGERNumber.MAX_SAFE_INTEGER inclusive.

  • It is a constant number, not a method.
  • Value: -9007199254740991 (−(253 − 1)).
  • Equals -Number.MAX_SAFE_INTEGER.
  • For more-negative exact integers, prefer BigInt.

📝 Syntax

General form of the static property Number.MIN_SAFE_INTEGER:

JavaScript
Number.MIN_SAFE_INTEGER

Value

-9007199254740991 (−(253 − 1)).

Property attributes

AttributeValue
Writablefalse
Enumerablefalse
Configurablefalse

Common patterns

JavaScript
Number.MIN_SAFE_INTEGER;                    // -9007199254740991
Number.MIN_SAFE_INTEGER === -(2 ** 53 - 1); // true
Number.MIN_SAFE_INTEGER === -Number.MAX_SAFE_INTEGER; // true

Number.isSafeInteger(Number.MIN_SAFE_INTEGER);     // true
Number.isSafeInteger(Number.MIN_SAFE_INTEGER - 1); // false

// Prefer BigInt past the safe range:
-9007199254740993n;  // exact

⚡ Quick Reference

GoalCode
Smallest exact integerNumber.MIN_SAFE_INTEGER
Largest exact integerNumber.MAX_SAFE_INTEGER
Test a candidateNumber.isSafeInteger(n)
More-negative exact intsBigInt / -123n
Most negative finite float-Number.MAX_VALUE (not exact ints)
Smallest positive NumberNumber.MIN_VALUE (different!)

🔍 At a Glance

Four facts to remember about Number.MIN_SAFE_INTEGER.

Kind
static

Property on Number

Value
-(2**53-1)

-9007199254740991

Mirror
-MAX

Equals -MAX_SAFE_INTEGER

Mutable
no

Read-only constant

📋 MIN_SAFE_INTEGER vs MIN_VALUE vs -MAX_VALUE

MIN_SAFE_INTEGERMIN_VALUE-MAX_VALUE
Approx. size~-9.0e155e-324~-1.8e308
SignNegativePositiveNegative
MeaningSmallest exact intClosest to 0+Most negative finite
Exact integers?Yes (at bound)N/A (tiny float)No (sparse)

Examples Gallery

Examples follow MDN Number.MIN_SAFE_INTEGER patterns. Use View Output or Try It Yourself for each case.

📚 Getting Started

Read the constant and see why “safe” matters on the negative side.

Example 1 — Read Number.MIN_SAFE_INTEGER

Print the smallest exact integer Number.

JavaScript
Number.MIN_SAFE_INTEGER;
// -9007199254740991
Try It Yourself

How It Works

Same as -(2 ** 53 - 1). Prefer the named constant in readable code.

Example 2 — MDN −1 === −2 Trap

Past the safe limit, consecutive integers are no longer distinct.

JavaScript
const x = Number.MIN_SAFE_INTEGER - 1;
const y = Number.MIN_SAFE_INTEGER - 2;

Number.MIN_SAFE_INTEGER;  // -9007199254740991
x;                        // -9007199254740992
x === y;                  // true  (!)
Try It Yourself

How It Works

Both x and y round to the same float — the negative twin of the MAX_SAFE_INTEGER trap.

📈 Practical Patterns

Checks, symmetry with MAX, and naming mix-ups.

Example 3 — Pair with isSafeInteger()

Test whether a value is still inside the exact-integer window.

JavaScript
Number.isSafeInteger(Number.MIN_SAFE_INTEGER);     // true
Number.isSafeInteger(Number.MIN_SAFE_INTEGER - 1); // false
Try It Yourself

How It Works

See the full isSafeInteger() tutorial for coercion rules and edge cases.

Example 4 — Mirror of MAX_SAFE_INTEGER

The two constants are exact opposites.

JavaScript
Number.MIN_SAFE_INTEGER === -Number.MAX_SAFE_INTEGER;  // true
Number.MAX_SAFE_INTEGER;  //  9007199254740991
Number.MIN_SAFE_INTEGER;  // -9007199254740991
Try It Yourself

How It Works

One 53-bit significand defines both edges of the safe integer window.

Example 5 — Not MIN_VALUE

Avoid the common naming mix-up.

JavaScript
Number.MIN_SAFE_INTEGER;  // -9007199254740991  (exact int floor)
Number.MIN_VALUE;         // 5e-324             (tiny positive)
Number.MIN_SAFE_INTEGER < 0;  // true
Number.MIN_VALUE > 0;         // true
Try It Yourself

How It Works

MIN_VALUE is about near-zero positives. MIN_SAFE_INTEGER is about exact negative integers.

🚀 Common Use Cases

  • Range clamps — keep counters between MIN and MAX safe integers.
  • ValidationNumber.isSafeInteger(n) before trusting integer math.
  • JSON numbers — stay inside the safe window or use strings / BigInt.
  • Teaching floats — show the negative twin of the +1 === +2 trap.
  • Not MIN_VALUE — do not use this when you mean the tiniest positive Number.
  • Not -MAX_VALUE — magnitude floor for floats is different from exact-int floor.

🧠 How Safe Integers Work (Negative Edge)

1

53-bit significand

Doubles store about 53 bits of precision for the fraction.

Bits
2

Exact down to −(253−1)

Every integer in the safe window has a unique Number encoding.

Safe
3

Gaps appear below

Some more-negative integers cannot be represented; neighbors collapse.

Trap
4

Switch strategy

Stay in range, or move to BigInt / string IDs.

📝 Notes

  • This is a static property — use Number.MIN_SAFE_INTEGER only.
  • Do not write Number.MIN_SAFE_INTEGER() — it is not a function.
  • Equals -Number.MAX_SAFE_INTEGER.
  • Do not confuse with Number.MIN_VALUE.
  • Do not confuse with -Number.MAX_VALUE (magnitude, not exact ints).
  • For more-negative exact integers, use BigInt.

Browser & Runtime Support

Number.MIN_SAFE_INTEGER is Baseline Widely available — part of ES2015 and supported in every modern browser and Node.js.

Baseline · Widely available

Number.MIN_SAFE_INTEGER

Safe for production everywhere. Use it as the named floor for exact Number integers.

100% Universal support
Google Chrome Supported · Desktop & Mobile
Full support
Mozilla Firefox Supported · Desktop & Mobile
Full support
Apple Safari Supported · macOS & iOS
Full support
Microsoft Edge Supported · Chromium
Full support
Internet Explorer No native support · Use a polyfill
Polyfill
Opera Supported · Modern versions
Full support
Samsung Internet Supported · Android
Full support
Bun Supported · JavaScript runtime
Supported
Deno Supported · JavaScript runtime
Supported
Node.js Supported · Server runtime
Supported
Android WebView Supported · Modern WebView
Full support
Number.MIN_SAFE_INTEGER Excellent

Bottom line: Stay within MIN_SAFE_INTEGER … MAX_SAFE_INTEGER for exact Number integers. Use BigInt outside that window.

Conclusion

Number.MIN_SAFE_INTEGER is the static constant for the smallest integer a JavaScript Number can represent exactly. Below that point, prefer BigInt when every integer must stay distinct.

Continue with MAX_SAFE_INTEGER, isSafeInteger(), MIN_VALUE, or the Number properties hub.

💡 Best Practices

✅ Do

  • Read Number.MIN_SAFE_INTEGER on the constructor
  • Validate with Number.isSafeInteger(n)
  • Remember it equals -MAX_SAFE_INTEGER
  • Use BigInt for integers below the safe floor
  • Clamp ranges with both MIN and MAX safe integers

❌ Don’t

  • Write (5).MIN_SAFE_INTEGER or call it as a function
  • Confuse it with Number.MIN_VALUE
  • Assume -MAX_VALUE integers are exact
  • Decrement past the safe limit and trust ===
  • Mix BigInt and Number in the same arithmetic without converting

Key Takeaways

Knowledge Unlocked

Five things to remember about Number.MIN_SAFE_INTEGER

Static floor for exact Number integers.

5
Core concepts
📝 02

Value

-(2**53-1)

Constant
03

Trap

-1 === -2

Pitfall
n 04

Below

BigInt

Next
05

Mutable

no

Readonly

❓ Frequently Asked Questions

Number.MIN_SAFE_INTEGER is the smallest integer JavaScript can represent exactly as a Number — -(2^53 - 1), which is -9007199254740991. Below that, integer spacing is no longer 1.
Yes. Read it on Number itself: Number.MIN_SAFE_INTEGER. There is no (5).MIN_SAFE_INTEGER on number instances, and it is not a method.
MIN_SAFE_INTEGER equals -MAX_SAFE_INTEGER. Together they bound the safe integer window: from -(2^53 - 1) to 2^53 - 1.
Safe means integers can be represented exactly and compared correctly. Past the bound, Number.MIN_SAFE_INTEGER - 1 === Number.MIN_SAFE_INTEGER - 2 is true — which is mathematically wrong.
No. MIN_VALUE (~5e-324) is the smallest positive Number near zero. MIN_SAFE_INTEGER is the most negative exact integer (~-9e15).
It is Baseline Widely available (ES2015) and supported in every modern browser and Node.js.
Did you know?

The safe integer range is perfectly symmetric: [MIN_SAFE_INTEGER, MAX_SAFE_INTEGER] = [−(253−1), 253−1]. Zero sits in the middle, and both edges share the same 53-bit precision story.

More Number Properties

Return to the hub for static Number constants.

Number properties hub →

About the author

Mari Selvan M P
Mari Selvan M P 🔗

Developer, cloud engineer, and technical writer

  • Experience 12 years building web and cloud systems
  • Focus Full Stack Development, AWS, and Developer Education

I write practical tutorials so students and working developers can learn by doing—from databases and APIs to deployment on AWS.

8 people found this page helpful