ثابت‌ها

از ویکی‌کد، دانشنامهٔ برنامه‌نویسی
پرش به ناوبری پرش به جستجو

نسخه ES2015 جاوا اسکریپت، شامل دو کلمهٔ کلیدی جدید بود: let و const. [۱]

متغیرهایی که با کلمه کلیدی const تعریف می‌شوند همانند متغیرهایی که با کلمه کلیدی let تعریف می‌شوند، رفتار می‌کند به جز اینکه آنها را نمی‌توان از نو مقداردهی کرد:

مثال

1const PI = 3.141592653589793;
2PI = 3.14;      // This will give an error
3PI = PI + 10;   // This will also give an error


مشاهدهٔ نتیجه

ناحیه کد بلاک (Block Scope)

تعریف یک متغیر با کلمه کلیدی const زمانی که درون ناحیه کد بلاک یا Block Scope قرار می‌گیرد بسیار شبیه به تعریف متغیر با کلمه کلیدی let است.

متغیر x ای که در این مثال، در این بلاک تعریف شده‌است با متغیری که خارج از بلاک تعریف شده‌است، یکی نیست:

مثال

1var x = 10;
2// Here x is 10
3{
4  const x = 2;
5  // Here x is 2
6}
7// Here x is 10


مشاهدهٔ نتیجه


شما می‌توانید مطالب بیشتری را در مورد ناحیه کد بلاک یا Block Scope را در فصل قبلی یعنی فصل کلمه کلیدی Let در جاوا اسکریپت بیابید.

مقدار دهی در زمان تعریف

متغیرهایی که با کلمه کلیدی let تعریف می‌شوند می‌بایست در همان هنگام تعریفشان مقدار دهی شوند:

روش نادرست

const PI;
PI = 3.14159265359;

روش صحیح

const PI = 3.14159265359;

کلمه کلیدی const کمی گمراه‌کننده است.

این کلمه یک مقدار ثابت را تعریف نمی‌کند. این کلمه موجب تعریف یک مرجع ثابت به یک مقدار می‌شود.

به خاطر این امر، ما نمی‌توانیم مقادیر primitive ثابت را تغییر دهیم، اما می‌توانیم ویژگی‌های شی ثابت را تغییر دهیم.

داده ها یا مقادیر اولیه (primitive)

اگر ما یک ثابت را مقدار دهی اولیه کنیم، ما نمی‌توانیم مقدار آن را تغییر دهیم:

مثال

1const PI = 3.141592653589793;
2PI = 3.14;      // This will give an error
3PI = PI + 10;   // This will also give an error


مشاهدهٔ نتیجه


اشیاء ثابت می توانند تغییر کنند

شما می‌توانید ویژگی‌های یک شی ثابت را تغییر دهید:

مثال

1// You can create a const object:
2const car = {type:"Fiat", model:"500", color:"white"};
3
4// You can change a property:
5car.color = "red";
6
7// You can add a property:
8car.owner = "Johnson";


مشاهدهٔ نتیجه


اما شما نمی‌توانید یک شی ثابت را از دوباره مقداردهی کنید:

1const car = {type:"Fiat", model:"500", color:"white"};
2car = {type:"Volvo", model:"EX60", color:"red"};    // ERROR


مشاهدهٔ نتیجه


ثابت های آرایه ای می توانند تغییر کنند

شما می‌توانید عناصر یک ثابت آرایه ای را تغییر دهید:

مثال

1// You can create a constant array:
2const cars = ["Saab", "Volvo", "BMW"];
3
4// You can change an element:
5cars[0] = "Toyota";
6
7// You can add an element:
8cars.push("Audi");


مشاهدهٔ نتیجه


اما شما نمی‌توانید یک ثابت آرایه ای را از نو مقدار دهی کنید:

مثال

1const cars = ["Saab", "Volvo", "BMW"];
2cars = ["Toyota", "Volvo", "Audi"];    // ERROR


مشاهدهٔ نتیجه


سازگاری با مرورگرها

کلمه کلیدی const در مرورگر اینترنت اکسپلورر نسخه ۱۰ یا قدیمی‌تر پشتیبانی نمی‌شود.

جدول زیر اولین نسخه از مرورگرها را به طور کامل از کلمه کلیدی const پشتیبانی می‌کند را نمایش می‌دهد:

Chrome.gif Edge.gif Firefox.gif Safari.gif Opera.gif
Chrome 49 IE / Edge 11 Firefox 36 Safari 10 Opera 36
مارس ۲۰۱۶ اکتبر ۲۰۱۳ فوریه ۲۰۱۵ سپتامبر ۲۰۱۶ مارس ۲۰۱۶


از دوباره تعریف کردن

از دوباره تعریف کردن یک متغیر که با کلمه کلیدی var تعریف شده‌است در هر جایی از برنامه مجاز است:

مثال

1var x = 2;    //  Allowed
2var x = 3;    //  Allowed
3x = 4;        //  Allowed

از دوباره تعریف کردن یا از دوباره مقدار دهی کردن یک متغیر موجود که با کلمه کلیدی var یا let تعریف شده‌است با یک ثابت یا const ، در ناحیه کد یا Scope مشترک یا درون بلاک مشترک، مجازنیست:

مثال

1var x = 2;         // Allowed
2const x = 2;       // Not allowed
3{
4  let x = 2;     // Allowed
5  const x = 2;   // Not allowed
6}

از دوباره تعریف کردن یا از دوباره مقداردهی کردن یک متغیر ثابت موجود، در ناحیه کد یا const مشترک یا بلاک مشترک نیز مجاز نیست:

مثال

 1const x = 2;       // Allowed
 2const x = 3;       // Not allowed
 3x = 3;             // Not allowed
 4var x = 3;         // Not allowed
 5let x = 3;         // Not allowed
 6
 7{
 8  const x = 2;   // Allowed
 9  const x = 3;   // Not allowed
10  x = 3;         // Not allowed
11  var x = 3;     // Not allowed
12  let x = 3;     // Not allowed
13}

از دوباره تعریف کردن یک متغیر با کلمه کلیدی const در یک ناحیه یا Scope دیگر یا درون بلاک دیگر نیز مجاز است:

مثال

1const x = 2;       // Allowed
2
3{
4  const x = 3;   // Allowed
5}
6
7{
8  const x = 4;   // Allowed
9}

بالا بردن

متغیرهایی که با کلمه var تعریف می‌شوند به بالای اسکریپت hoisted (به فارسی: منتقل)می‌شوند. (نکته نکته: اگر شما نمی‌دانید که Hoisting چیست، فصل Hoisting یا جا به جایی را بخوانید)

شما می‌توانید از یک متغیر قبل از تعریف شدنش، استفاده کنید:

شما می‌توانید از متغیری که با کلمه کلیدی var تعریف شده‌است، قبل از تعریف، استفاده کنید.

مثال

1carName = "Volvo";    // You CAN use carName here
2var carName;


مشاهدهٔ نتیجه


متغیرهایی که با کلمه const تعریف می‌شوند، به بالای اسکریپت منتقل نمی‌شوند.

یک const (به فارسی: متغیرثابت) را نمی‌توان قبل از تعریف آن استفاده کرد:

مثال

1carName = "Volvo";    // You can NOT use carName here
2const carName = "Volvo";

منابع آموزشی