JavaScript Number Padding with Zeros - Complete Guide to padStart() and Custom Functions
JavaScript Number Padding with Zeros - Complete Guide
🎯 Core Solutions (Ready to Use)
Most Commonly Used Patterns
// 1. Modern method - Using padStart() (ES2017+)
const number = 5;
const paddedNumber = number.toString().padStart(2, '0');
console.log(paddedNumber); // "05"
// 2. Functional approach for reusability
function pad(num, size = 2) {
return num.toString().padStart(size, '0');
}
pad(1); // "01"
pad(9); // "09"
pad(10); // "10"
pad(5, 3); // "005"
// 3. Custom function for legacy environments
function pad(d) {
return (d < 10) ? '0' + d.toString() : d.toString();
}
pad(1); // "01"
pad(9); // "09"
pad(10); // "10"
// 4. Versatile function supporting various digit counts
function zeroPad(num, places) {
const zero = places - num.toString().length + 1;
return Array(+(zero > 0 && zero)).join("0") + num;
}
zeroPad(5, 2); // "05"
zeroPad(123, 5); // "00123"
📚 Detailed Explanation
Background and Necessity
Number padding with zeros is frequently needed in the following situations:
- Time display: 09:05, 01:30
- Date formatting: 2023-07-01
- File sorting: file001.txt, file002.txt
- Fixed-width display: product codes, IDs, etc.
Detailed Analysis by Method
1. padStart() Method (Recommended)
// Basic usage
const num = 7;
const result = num.toString().padStart(3, '0');
console.log(result); // "007"
// Various padding characters
const text = "5";
console.log(text.padStart(4, '0')); // "0005"
console.log(text.padStart(4, '*')); // "***5"
console.log(text.padStart(4)); // " 5" (default: space)
Advantages:
- ES2017 standard method
- Supports various padding characters
- Good readability
Disadvantages:
- Not supported in older browsers (IE, etc.)
2. Custom Functions (Compatibility)
// Simple 2-digit padding
function pad(d) {
return (d < 10) ? '0' + d.toString() : d.toString();
}
// Extended version
function pad(num, size = 2, char = '0') {
let s = num.toString();
while (s.length < size) {
s = char + s;
}
return s;
}
// Usage examples
console.log(pad(5)); // "05"
console.log(pad(42, 4)); // "0042"
console.log(pad(3, 3, '*')); // "**3"
3. Using Array and join
function zeroPad(num, places) {
const zero = places - num.toString().length + 1;
return Array(+(zero > 0 && zero)).join("0") + num;
}
// Or more simply
function pad(num, size) {
return Array(size).join('0').slice((size || 2) * -1) + num;
}
Practical Use Cases
Time Formatting
function formatTime(hours, minutes, seconds) {
const pad = (num) => num.toString().padStart(2, '0');
return `${pad(hours)}:${pad(minutes)}:${pad(seconds)}`;
}
console.log(formatTime(9, 5, 30)); // "09:05:30"
console.log(formatTime(14, 0, 7)); // "14:00:07"
Date Formatting
function formatDate(date) {
const year = date.getFullYear();
const month = (date.getMonth() + 1).toString().padStart(2, '0');
const day = date.getDate().toString().padStart(2, '0');
return `${year}-${month}-${day}`;
}
const today = new Date();
console.log(formatDate(today)); // "2023-07-10"
Sequence Number Generation
function generateSequence(start, end, digits = 3) {
const sequence = [];
for (let i = start; i <= end; i++) {
sequence.push(i.toString().padStart(digits, '0'));
}
return sequence;
}
console.log(generateSequence(1, 5, 3));
// ["001", "002", "003", "004", "005"]
Performance Comparison
// Performance test (1,000,000 iterations)
const numbers = Array.from({length: 1000000}, (_, i) => i);
console.time('padStart');
numbers.forEach(n => n.toString().padStart(2, '0'));
console.timeEnd('padStart'); // About 150ms
console.time('custom function');
numbers.forEach(n => (n < 10) ? '0' + n : n.toString());
console.timeEnd('custom function'); // About 100ms
Conclusion: Custom function is slightly faster, but the difference is negligible in real-world usage
Error Handling
function safePad(value, length = 2, char = '0') {
// Input validation
if (value === null || value === undefined) {
return char.repeat(length);
}
// Handle non-numeric values
if (isNaN(value)) {
return value.toString().padStart(length, char);
}
return value.toString().padStart(length, char);
}
console.log(safePad(null)); // "00"
console.log(safePad(undefined)); // "00"
console.log(safePad("abc")); // "0abc"
Browser Compatibility Alternative
// Polyfill for environments without padStart support
if (!String.prototype.padStart) {
String.prototype.padStart = function(targetLength, padString) {
targetLength = Math.floor(targetLength) || 0;
if (targetLength < this.length) return this;
padString = String(padString || ' ');
let pad = '';
let len = targetLength - this.length;
while (pad.length < len) {
pad += padString;
}
return pad.slice(0, len) + this;
};
}
Conclusion
There are several ways to pad numbers with zeros in JavaScript:
- Modern environments: Use
padStart()
method (most recommended) - Legacy environments: Simple implementation with custom functions
- High performance needed: Conditional-based custom functions
In practice, check browser support range first and prioritize using padStart()
, then substitute with polyfills or custom functions when necessary.