Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Khác biệt Object.freeze() vs const trong JavaScript

Hai khái niệm hoàn toàn khác nhau:

  • const — ràng buộc biến (binding): không gán lại biến được.
  • Object.freeze() — ràng buộc giá trị object (value): không mutate object được.

const — Không ngăn chặn mutation

<script>
  const person = { name: 'Suresh', country: 'India' };
  person.country = 'England'; // THÀNH CÔNG! — mutation cho phép
  // person = {}; // LỖI: Assignment to constant variable
  document.write(person.country); // England
</script>

Object.freeze() — Ngăn chặn mutation

<script>
  const person = { name: 'Suresh', country: 'India' };
  Object.freeze(person);
  person.country = 'England'; // Thất bại (strict: TypeError)
  document.write(person.country); // India — không đổi
</script>

Kết hợp cả hai: Best Practice

const CONFIG = Object.freeze({
  API_URL: 'https://api.example.com',
  TIMEOUT: 5000,
  RETRIES: 3
});
// CONFIG không gán lại được (const)
// CONFIG.API_URL không sửa được (freeze)

Bảng so sánh

Đặc điểmconstObject.freeze()
Áp dụng choVariable bindingObject value
Ngăn gán lại biếnCóKhông
Ngăn mutation propertyKhôngCó (shallow)
Ngăn thêm/xóa propertyKhôngCó
ScopeBlock scopeN/A (runtime)
Kế thừaKhông áp dụngKhông (shallow)

Lưu ý

  • const với primitive: giá trị thực sự bất biến (vì primitive immutable by nature).
  • freeze() shallow — nested object vẫn mutable.
  • Trong non-strict mode, vi phạm freeze thất bại thầm; strict mode → TypeError.