JavaScript Const
تعریف یک متغیر با استفاده از const
کلید واژه const در ES6 (2015) معرفی شد. در هنگام استفاده از این کلید واژه برای تعریف متغیرها باید به یک سری نکات دقت کرد که در زیر در مورد آنها توضیح خواهیم داد.
نمیتوان مقدار متغیر را تغییر داد
متغیری که با استفاده از const
تعریف و مقداری به آن تخصیص داده شود، در ادامه مقدار آن را نمیتوان تغییر داد.
const PI = 3.141592653589793;
PI = 3.14; // This will give an error
PI = PI + 10; // This will also give an error
توجه داشته باشید که حتما هنگام تعریف متغیر با const
باید مقداری به آن تخصیص یابد.
const PI = 3.14159265359;
و اگر آن را به شکل زیر بنویسیم اشتباه است و با خطا مواجه خواهید شد.
const PI;
PI = 3.14159265359;
چه زمانی از const استفاده کنیم؟
به عنوان یک قانون عمومی، همیشه برای تعریف متغیر از const
استفاده کنید مگر آنکه بدانید که مقدار آن تغییر خواهد کرد.
همواره برای ایجاد آرایه، شیء و تابع از const
استفاده کنید.
دقت داشته باشید که const
یک متغیر با مقدار ثابت را تعریف نمیکند بلکه یک ارجاع ثابت به یک مقدار را ایجاد میکند. یعنی میتوان مقدار آن متغیر را تغییر داد ولی نمیتوان دوباره مقادیری به آن تخصیص داد. برای درک بهتر دو کد زیر را با هم مقایسه کنید:
// You can create a constant array:
const cars = ["Saab", "Volvo", "BMW"];
// You can change an element:
cars[0] = "Toyota";
// You can add an element:
cars.push("Audi");
در کد بالا یک آرایه تعریف و در ادامه عناصر آن دستخوش تغییراتی شده است. حال به کد زیر دقت کنید:
const cars = ["Saab", "Volvo", "BMW"];
cars = ["Toyota", "Volvo", "Audi"]; // ERROR
کد فوق اشتباه است. زیرا دوباره مقادیری را به متغیر car
تخصیص میدهد. همین داستان برای شیء که توسط const
تعریف شده است برقرار است. یعنی میتوان مقدار خصوصیتهای یک شیء تعریف شده توسط const
را تغییر داد ولی نمیتوان دوباره مقادیر را به آن تخصیص داد.
Block Scope
دقیقاً مانند let
تعریف متغیر با استفاده از const
دارای Block Scope است؛ یعنی تعریف متغیر داخل یک بلوک فقط مربوط به آن بلوک است و خارج از آن متغیر متفاوت است.
const x = 10;
// Here x is 10
{
const x = 2;
// Here x is 2
}
// Here x is 10
بازتعریف متغیر
در این مورد هم کاملاً مشابه با let
عمل میکند:
var x = 2; // Allowed
const x = 2; // Not allowed
{
let x = 2; // Allowed
const x = 2; // Not allowed
}
{
const x = 2; // Allowed
const x = 2; // Not allowed
}
و نکته آخر آنکه نمیتوان قبل از تعریف متغیر توسط const
از آن استفاده کرد (مانند let
و برخلاف var
).
alert (carName);
const carName = "Volvo";
کد بالا خطای ReferenceError را ایجاد میکند.