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 را ایجاد می‌کند.