πŸ›‘οΈ JavaScript Object Protection

πŸ“Œ 1. Why Protect Objects?

  • Prevent accidental changes
  • Secure data from tampering
  • Lock configuration/settings
  • Improve code stability and debugging

βœ… 2. Protection Levels in JavaScript

MethodPrevent AddingPrevent DeletingPrevent ChangingPrevent Reconfiguring
Object.preventExtensions()βœ…βŒβŒβŒ
Object.seal()βœ…βœ…βŒβœ…
Object.freeze()βœ…βœ…βœ…βœ…

πŸ”’ 3. Object.preventExtensions()

Prevents adding new properties, but existing ones can still be changed or deleted.

jsCopyEditconst user = { name: "Alice" };
Object.preventExtensions(user);

user.age = 30;           // ❌ Won't add
console.log(user.age);   // undefined

user.name = "Bob";       // βœ… Allowed
delete user.name;        // βœ… Allowed

πŸ” 4. Object.seal()

Prevents adding or deleting properties. Values can still be modified.

jsCopyEditconst user = { name: "Alice" };
Object.seal(user);

user.age = 30;           // ❌ Won't add
delete user.name;        // ❌ Won't delete

user.name = "Bob";       // βœ… Can update value

🧊 5. Object.freeze()

Makes the object completely immutable: can’t add, delete, or change properties.

jsCopyEditconst config = {
  apiKey: "12345"
};
Object.freeze(config);

config.apiKey = "54321";  // ❌ No change
config.url = "api.com";   // ❌ Won't add
delete config.apiKey;     // ❌ Won't delete

πŸ” Object.freeze() is shallow: it only applies to the top-level properties. To deep-freeze, you must recursively freeze nested objects.


πŸ“Œ 6. Checking Protection State

jsCopyEditObject.isExtensible(obj); // false if preventExtensions used
Object.isSealed(obj);     // true if sealed
Object.isFrozen(obj);     // true if frozen

πŸ”„ 7. Deep Freezing Utility Function

jsCopyEditfunction deepFreeze(obj) {
  Object.getOwnPropertyNames(obj).forEach(name => {
    const value = obj[name];
    if (value && typeof value === "object") {
      deepFreeze(value);
    }
  });
  return Object.freeze(obj);
}

// Usage
const settings = {
  server: {
    host: "localhost",
    port: 8080
  }
};

deepFreeze(settings);
settings.server.port = 3000; // ❌ Won't change

πŸ§ͺ Practice Challenge

Create an object bankAccount:

  • With properties: owner, balance
  • Use Object.seal() to prevent property removal or addition
  • Add a method deposit(amount) to increase balance

πŸ’‘ Summary Table

FunctionPurpose
Object.preventExtensions()Disallow adding properties
Object.seal()Disallow add/delete, allow update
Object.freeze()Full lock-down, immutable
Object.isFrozen(obj)Check freeze status
deepFreeze(obj)Recursively freeze an object

Would you like:

  • πŸ§ͺ Interactive sandbox or playground?
  • πŸ“„ Downloadable PDF version?
  • βœ… Quiz on object protection methods?