Object.freeze() এবং const-এর পার্থক্য হলো, প্রথমটি মিউটেবিলিটি (mutability) রোধ করে, দ্বিতীয়টি রোধ করে না। ভালোভাবে বুঝতে আলাদা আলাদা আলোচনা করা যাক।
Const
Const-এর আচরণ let-এর মতো। একবার const দিয়ে ভ্যারিয়েবল ডিক্লেয়ার করলে সেটিকে রিঅ্যাসাইন (reassign) করা যায় না। Const দিয়ে ডিক্লেয়ারড ভ্যারিয়েবল ব্লক স্কোপড (block scoped), ফাংশন স্কোপড (function scoped) নয় যেমন var।
const কীওয়ার্ডের মূল খামি হলো এটি অবজেক্টকে মিউটেবিলিটি-থেকে রক্ষা করে না। অবজেক্টের প্রোপার্টিগুলো পরিবর্তন করা যায় এমনকি অবজেক্টটি const দিয়ে ডিক্লেয়ার করা থাকলেও। এটাকে মিউটেবিলিটি বলে। সাধারণ ধারণা হলো const দিয়ে অ্যাসাইন করা ভ্যারিয়েবল রিঅ্যাসাইন করা যায় না। কিন্তু অবজেক্ট const দিয়ে ডিক্লেয়ার করলে তার প্রোপার্টি পরিবর্তন করা যায়। সেক্ষেত্রে মিউটেবিলিটি রোধ করতে const এড়িয়ে যাওয়া ভালো।
উদাহরণ
নিচের উদাহরণে প্রোপার্টি 'country'-র প্রাথমিক মান "India"। পরে সেটি "England" পরিবর্তন করা হয়েছে এমনকি ভ্যারিয়েবল const দিয়ে ডিক্লেয়ার করা থাকলেও।
<html> <body> <script> const person = { "name" : "Suresh", "Country" : "India", "Designation" : "Mayor" } person.Country = "England" document.write(person.Country); </script> </body> </html>আউটপুট
England
Object.freeze()
এই মেথড ইমিউটেবিলিটি (immutability) প্রদান করে। একবার কোনো অবজেক্ট ফ্রিজ হলে তার প্রোপার্টিগুলো আর পরিবর্তন করা যায় না।
নিচের উদাহরণে প্রোপার্টি "country"-র মান "India" থেকে "England" পরিবর্তন করা হলেও, ইমিউটেবিলিটি-র কারণে "India" মানটি অক্ষুণ্ণ থাকে।
উদাহরণ
<html> <body> <script> const person = { "name" : "Suresh", "Country" : "India", "Designation" : "Mayor" } Object.freeze(person); person.Country = "England" document.write(person.Country); </script> </body> </html>আউটপুট
India