Skip to main content

JavaScript Constants

Constants are a fundamental concept in JavaScript that allows you to store values that cannot be changed once they've been defined. They were introduced in ECMAScript 6 (ES6) and provide a way to declare immutable variables, which helps prevent accidental reassignment and makes your code more predictable.

Introduction to Constants​

In JavaScript, constants are declared using the const keyword. Unlike variables declared with var or let, constants cannot be reassigned a new value after their initial assignment.

Let's start with a simple example:

javascript
const PI = 3.14159;
console.log(PI); // Output: 3.14159

// Trying to reassign will cause an error
// PI = 3.14; // TypeError: Assignment to constant variable.

Why Use Constants?​

Constants offer several benefits in your JavaScript code:

  1. Code clarity: They signal to other developers that this value should not change
  2. Prevention of errors: They protect against accidental reassignment
  3. Performance optimizations: In some cases, JavaScript engines can optimize code with constants

Declaring Constants​

Basic Syntax​

The syntax for declaring a constant is straightforward:

javascript
const CONSTANT_NAME = value;

By convention, constants that represent fixed values are often written in UPPERCASE_WITH_UNDERSCORES, though this is a style preference, not a language requirement.

Declaration Rules​

When working with constants, keep these rules in mind:

  1. Constants must be initialized at the time of declaration
  2. You cannot declare a constant without assigning a value
  3. Constants have block scope (similar to let)

Example of these rules:

javascript
// Must initialize at declaration time
const API_KEY = "abc123"; // Correct

// Cannot declare without a value
// const DATABASE_URL; // SyntaxError: Missing initializer in const declaration

// Block scope example
{
const BLOCK_CONSTANT = "I'm local to this block";
console.log(BLOCK_CONSTANT); // Output: I'm local to this block
}
// console.log(BLOCK_CONSTANT); // ReferenceError: BLOCK_CONSTANT is not defined

Constants vs Variables​

Here's a quick comparison between constants and variables:

javascript
// Variable (can be reassigned)
let count = 1;
count = 2; // This works fine

// Constant (cannot be reassigned)
const MAX_USERS = 100;
// MAX_USERS = 200; // TypeError: Assignment to constant variable.

// But variables created with var don't have block scope
{
var x = 10;
const y = 20;
}
console.log(x); // Output: 10
// console.log(y); // ReferenceError: y is not defined

Constants and Objects​

An important distinction to understand is that while a constant cannot be reassigned, the content of objects or arrays declared as constants can be modified.

Objects with const​

javascript
const user = {
name: "John",
age: 30
};

// You can modify properties
user.age = 31;
console.log(user); // Output: { name: "John", age: 31 }

// But you cannot reassign the entire object
// user = { name: "Jane", age: 25 }; // TypeError: Assignment to constant variable.

Arrays with const​

javascript
const numbers = [1, 2, 3, 4];

// You can modify elements
numbers.push(5);
console.log(numbers); // Output: [1, 2, 3, 4, 5]

// But you cannot reassign the entire array
// numbers = [5, 6, 7]; // TypeError: Assignment to constant variable.

Preventing Object Mutations​

If you want to make an object truly immutable, you can use Object.freeze():

javascript
const settings = Object.freeze({
theme: "dark",
notifications: true,
fontSize: 16
});

// Modification attempts are silently ignored in non-strict mode
settings.theme = "light";
console.log(settings.theme); // Output: "dark" (unchanged)

// In strict mode, it throws an error
// "use strict";
// settings.theme = "light"; // TypeError: Cannot assign to read only property 'theme' of object

Real-World Applications​

Let's look at some practical examples of using constants:

Configuration Settings​

javascript
const CONFIG = {
API_URL: "https://api.example.com/v1",
MAX_RETRIES: 3,
TIMEOUT_MS: 5000,
DEBUG_MODE: false
};

function fetchData(endpoint) {
console.log(`Fetching from ${CONFIG.API_URL}/${endpoint}...`);
// Actual fetch logic would go here
}

fetchData("users"); // Output: Fetching from https://api.example.com/v1/users...

Application Constants​

javascript
const DAYS_IN_WEEK = 7;
const HOURS_IN_DAY = 24;
const SECONDS_IN_MINUTE = 60;

function calculateTotalSeconds(days, hours, minutes) {
return days * DAYS_IN_WEEK * HOURS_IN_DAY * SECONDS_IN_MINUTE * SECONDS_IN_MINUTE +
hours * SECONDS_IN_MINUTE * SECONDS_IN_MINUTE +
minutes * SECONDS_IN_MINUTE;
}

const totalSeconds = calculateTotalSeconds(1, 2, 30);
console.log(`Total seconds: ${totalSeconds}`); // Output: Total seconds: 95400

Event Types​

javascript
const EVENTS = {
CLICK: 'click',
HOVER: 'mouseover',
SUBMIT: 'submit',
LOAD: 'load'
};

function addEventHandler(element, eventType, handler) {
if (Object.values(EVENTS).includes(eventType)) {
element.addEventListener(eventType, handler);
console.log(`Event handler for ${eventType} added.`);
} else {
console.error(`Unsupported event type: ${eventType}`);
}
}

// Usage (in a browser environment)
// addEventHandler(document.getElementById('submit-button'), EVENTS.CLICK, () => {
// console.log('Button clicked!');
// });

Best Practices for Using Constants​

  1. Use constants for values that should not change - Mathematical constants, configuration values, etc.

  2. Follow naming conventions - Use uppercase names with underscores for true constants (MAX_SIZE), and regular camelCase for constant objects or arrays that might have internal changes (userConfig).

  3. Declare at the appropriate scope - Place constants at the narrowest possible scope where they're needed.

  4. Group related constants - Consider organizing related constants together in objects.

  5. Use Object.freeze() for immutable objects - When you need to ensure that even the properties of an object constant cannot be changed.

Summary​

Constants are a powerful feature in JavaScript that help make your code more predictable and safe. Remember these key points:

  • Constants are declared using the const keyword and cannot be reassigned
  • Constants must be initialized when declared
  • They have block scope, like variables declared with let
  • For object and array constants, the contents can still be modified
  • Use Object.freeze() to create truly immutable objects

By properly using constants, you can write more robust code that clearly communicates your intentions to other developers and prevents a whole class of potential bugs.

Exercises​

  1. Create a calculator that uses constants for mathematical operations like PI, E, etc.
  2. Create a configuration object with constants for a web application (theme colors, API endpoints, etc.).
  3. Try to implement a "true" constant by combining const with Object.freeze() and test its behavior.
  4. Convert a program that uses regular variables to use constants where appropriate.

Additional Resources​

Happy coding!



If you spot any mistakes on this website, please let me know at feedback@compilenrun.com. I’d greatly appreciate your feedback! :)