تعریف متغیر با کلمه کلیدی const در نسخه جدید جاوااسکریپت یعنی es6 سال ۲۰۱۵ معرفی شده است.
چه زمانی از const استفاده میشود؟
به طور کل از const زمانی استفاده میشود که شما مطمئن باشید مقدار شما همیشه ثابت است و قرار نیست تغییر پیدا کند.
از const میتوان علاوه بر رشته ها در هنگام تعریف آرایه ها، توابع، عبارات باقاعده و آبجکتها استفاده کرد.
استفاده از ثابت ها در آرایه ها و آبجکت ها
استفاده از کلمه کلیدی const کمی گمراه کننده است و باید دقت کنید.
زمانی که یک متغیر که نوع داده اش آرایه یا آبجکت است با کلمه کلیدی const تعریف میکنید شما میتوانید مقدار المنت ها و خصوصیت های آن را در طول اسکریپت تغییر بدهید اما نمیتوانید به طور کل نوع داده متغیر را تغییر دهید یا یک آرایه یا آبجکت دیگر را به آن اختصاص دهید.
برای مثال تا دیروز نوع داده متغیر شما با هر تعداد آیتمی، آرایه بود اما شما تبدیل به رشته کرده اید یا آرایه یا آبجکت دیگری را به اختصاص داده اید. خوب این ایجاد خطا می کند.
مثال درست از آرایه:
1 2 3 4 5 |
const cars = ["Saab", "Volvo", "BMW"]; cars[0] = "Toyota" cars.push("Audi"); console.log(cars[0]); //Toyota |
مثال اشتباه از آرایه:
1 2 3 |
const cars = ["Saab", "Volvo", "BMW"]; cars = "pride" //error |
یا
1 2 3 |
const cars = ["Saab", "Volvo", "BMW"]; cars = ["Toyota", "Volvo", "Audi"]; //error |
مثال درست از آبجکت:
1 2 3 4 5 |
const car = {type:"Fiat", model:"500", color:"white"}; car.color = "red" car.owner = "Johnson" console.log(cars.color); //red |
مثال اشتباه از آبجکت:
1 2 3 |
const car = {type:"Fiat", model:"500", color:"white"}; car = {type:"Volvo", model:"EX60", color:"red"}; //error |
متغیری که با const تعریف شود قابلیت تغییر مقدار آن در طول اسکریپت وجود ندارد و مقدارش ثابت است.
مثال:
1 2 3 |
const PI = 3.141592653589793; PI = 3.14; //error |
یا
1 2 |
PI = PI + 10; //error |
متغیر تعریف شده با const را نمی توان یکبار تعریف و یکبار دیگر در جایی دیگر مقداردهی کرد.
مثال درست:
1 |
const PI = 3.14159265359; |
مثال اشتباه:
1 2 |
const PI; PI = 3.14159265359; |
نمیتوان در یک بلاک مشخص متغیری که با const تعریف شده را باز تعریفش کرد.اما در بلاک های مختلف قابل انجام است.
مثال درست:
1 2 3 4 5 6 7 8 9 10 11 |
const x = 2; //correct { const x = 3; //correct } { const x = 4; //correct } |
مثال اشتباه:
1 2 3 4 5 6 7 8 9 10 11 12 |
const x = 2; x = 2; var x = 2; let x = 2; const x = 2; { const x = 2; x = 2; var x = 2; let x = 2; const x = 2; } |
متغیر تعریف شده با const همانند let دارای محدوده و بلاک تعریف هستند.
مثال:
1 2 3 4 5 6 7 |
const x = 10; //x is 10 { const x = 2; //x is 2 } //x is 10 |
در یک محدوده نمیتوان بطور همزمان با یک نام از کلمات کلیدی تعریف متغیر استفاده کرد.همواره دومین متغیر با خطا مواجه خواهد شد.
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
var x = 2; //correct const x = 2; //error { let x = 2; //correct const x = 2; //error } { const x = 2; //correct const x = 2; //error } |
حالت Hoisting در const
در واقع Hoisting به این معنی است که شما میتوانید متغیری را مقداردهی و استفاده کنید که قرار است بعدا تعریف شود.
این حالت در کلمه کلیدی var وجود دارد و برنامه ایرادی نمی گیرد.
مثال:
1 2 3 4 |
carName = "Volvo" console.log(carName); var carName; // Volvo |
توجه: در صورت تعریف متغیر با var و مقداردهی آن در انتهای اسکریپت مقدارش به سمت بالای اسکریپت حرکت نمی کند و مقدارش undefined است.
مثال:
1 2 3 |
console.log(carName); var carName = "Volvo" ; //undefined |
اما متغیری که با کلمه کلیدی const در انتهای اسکریپت تعریف میشود خود متغیر به سمت بالا حرکت می کند اما نه مقدارش بالا میرود نه می توان بالاتر مقداردهی و استفاده کرد. خطای بازگشتی ReferenceError خواهد بود.
مثال:
1 2 3 |
alert (carName); const carName = "Volvo" //ReferenceError |
پشتیبانی از مرورگرها
مرورگر Chrome | مرورگر Firefox | مرورگر IE | مرورگر Edge | مرورگر Safari | مرورگر Opera |
---|---|---|---|---|---|
از ۴۹ به بعد | از ۳۶ به بعد | این ویژگی در ie 11 و قبلتر از آن پشتیبانی نمیشود. | از ۱۲ به بعد | از ۱۰ به بعد | از ۳۶ به بعد |
شباهت های کلمه کلیدی var,let,const
هر سه برای تعریف متغیر استفاده می شوند.
هر سه دارای نام مشخص براساس قانون کلی تعریف متغیر هستند
تفاوت های کلمه کلیدی var,let,const
کلمه کلیدی var خیلی عمومی است و در هر بلاکی که تعریف شود در هرجایی قابل استفاده است. میتوان آن را مقداردهی و استفاده کرد و بعداً تعریف کرد. در صورت مقداردهی در انتهای اسکریپت و استفاده آن قبل از تعریف شدن مقدار undefined را دارد. آن را میتوان در یک بلاک باز تعریف و مقدار دهی کرد.
اما کلمه کلیدی let در یک بلاک یکبار تعریف و میتوان مقدار آن را تعریف کرد. وابسته به بلاک تعریف خود است. امکان مقداردهی و استفاده از متغیری که بعداً قرار است تعریف شود را ندارد.
کلمه کلیدی const در یک بلاک یکبار تعریف و نمیتوان مقدار آن را تعریف کرد. وابسته به بلاک تعریف خود است. امکان مقداردهی و استفاده از متغیری که بعداً قرار است تعریف شود را ندارد.