Первое, что я хотел бы прояснить, это то, что между ними нет никакой связи и сравнения, это две совершенно разные вещи.

const

Ключевое слово const применяется к привязкам и создает неизменяемую привязку. Другими словами, привязке нельзя присвоить новое значение.

let person = {
   name: "Leonardo"
};
console.log(person); //output { name: 'Leonardo' }

Теперь добавьте еще один объект и назначьте его объекту person:

let person = {
   name: "Leonardo"
};
let animal = {
   species: "snake"
};
person = animal;
console.log(person); //output { species: 'snake' }

Хорошо, если вы измените объявление объекта person на константу, приведенный выше код больше не будет работать:

const person = {
   name: "Leonardo"
};
let animal = {
   species: "snake"
};
person = animal; // ERROR "person" is read-only
console.log(person);

Но вы можете изменить его значения:

const person = {
   name: "Leonardo"
};
let animal = { 
   species: "snake"
};
person.name = "Lima";
console.log(person); //output { name: 'Lima' }

Имеет смысл, правда?

Object.freeze

Он работает с значениями и делает объект неизменяемым, то есть вы не можете изменять, добавлять или удалять его свойства, но вы можете назначить другой экземпляр.

let person = {
   name: "Leonardo"
};
let animal = {
   species: "snake"
};
Object.freeze(person);
person = animal;
console.log(person); { species: 'snake' }

Как вы можете видеть выше, даже с помощью Object.freeze я мог назначить объект-животное человеку. А теперь давайте попробуем изменить некоторые свойства человека:

let person = {
   name: "Leonardo"
};
let animal = {
   species: "snake"
};
Object.freeze(person);
person.name = "Lima"; //TypeError: Cannot assign to read only property 'name' of object
console.log(person);

Как видите, мы не можем изменить какое-либо значение объекта после того, как он заморожен, он неизменяемый. Единственная проблема в том, что это не глубокая заморозка.

let person = {
   name: "Leonardo",
   profession: {
      name: "developer"
   }
};
Object.freeze(person);
person.profession.name = "doctor";
console.log(person); //output { name: 'Leonardo', profession: { name: 'doctor' } }

Если вы хотите, чтобы объект был глубоко заморожен, вам нужно создать рекурсивную функцию, чтобы заморозить каждое свойство, которое имеет тип object:

function deepFreeze(object) {
   let propNames = Object.getOwnPropertyNames(object);
   for (let name of propNames) {
      let value = object[name];
      object[name] = value && typeof value === "object" ?  
                           deepFreeze(value) : value;
   }
   return Object.freeze(object);
}
let person = {
   name: "Leonardo",
   profession: {
      name: "developer"
   }
};
deepFreeze(person);
person.profession.name = "doctor"; // TypeError: Cannot assign to read only property 'name' of object
console.log(person);

Это все, ребята,

Спасибо за прочтение!