در جاوااسکریپت، به مقادیری که به صورت مستقیم و ثابت (نه در قالب متغیر) توی کد مینویسی، لیترال (Literal) میگن. مثلاً عدد 5 یا متن "سلام" لیترال هستند.
توی این بخش با انواع لیترالها آشنا میشیم:
لیترالهای آرایه (Array)
لیترالهای بولین (Boolean)
لیترالهای عددی (Numeric)
لیترالهای شیء (Object)
لیترالهای عبارات باقاعده (RegExp)
لیترالهای رشتهای/متنی (String)
هر وقت یکسری مقدار رو داخل دو تا قلاب یا کروشه ([ ]) بگذاری و با کاما از هم جدا کنی، یک لیترال آرایه ساختی. طول (length) این آرایه هم دقیقاً به تعداد موادی هست که داخلش گذاشتی.
به این مثال نگاه کن:
const coffees = ["French Roast", "Colombian", "Kona"];
اینجا یک آرایه به اسم coffies با ۳ تا آیتم ساختیم.
یک نکته فنی: هر بار که جاوااسکریپت به این خط کد برسه، یک شیء آرایه جدید توی حافظه میسازه. پس اگه این آرایه رو در محیط سراسری بنویسی، فقط یکبار موقع لود شدن صفحه ساخته میشه. اما اگه اون رو داخل یک تابع بگذاری، هر بار که اون تابع صدا زده بشه، یک آرایه کاملاً جدید در حافظه جا خوش میکنه.
اگر دو تا کاما رو پشت سر هم بگذاری، جاوااسکریپت یک جای خالی (Empty Slot) وسط آرایه برات جا میذاره:
const fish = ["Lion", , "Angel"];
اگر این رو توی کنسول چاپ کنی، اینطوری نشونت میده:
console.log(fish); // [ 'Lion', <1 empty item>, 'Angel' ]
این جای خالی با مقدار undefined یک تفاوت ریز داره. متدهای پیشرفته مثل .map() این جاهای خالی رو نادیده میگیرن و از روش میپرن؛ اما اگه مستقیماً با ایندکس صدایش کنی (مثلاً fish[1]) بهت undefined میده.
حالا به این مثالها نگاه کن تا کاماهای اضافه رو کاملاً درک کنی:
const myList1 = ["home", , "school"]; // طول آرایه ۳ است. آیتم شماره ۱ خالیه.
const myList2 = [, "home", , "school"]; // طول آرایه ۴ است. آیتمهای ۰ و ۲ خالی هستند.
const myList3 = ["home", , "school", ,]; // طول آرایه ۴ است. کامای آخرِ آخر نادیده گرفته میشه.
چرا کامای آخر نادیده گرفته میشه؟ این قابلیت برای سیستمهای کنترل نسخه مثل Git خیلی خوبه. وقتی میخوای یک آیتم به خط بعد اضافه کنی، دیگه نیازی نیست خط قبلی رو ویرایش کنی و فقط یک خط جدید اضافه میکنی. اینطوری تاریخچه کدت تمیز میمونه.
توصیه دوستانه: برای اینکه کدت خوانا باشه و بقیه گیج نشن، به جای گذاشتن کامای خالی، خودت عمداً کلمه undefined رو بنویس یا حداقل یک کامنت بگذار:
const myList = ["home", /* خالی */, "school"];
این بخش خیلی راحته؛ کلاً دو تا مقدار ثابت داریم: true (درست) و false (غلط).
اشتباه نگیری: این مقادیر اصلی و پایهای رو با "شیء بولین" یا همون
Boolean Objectاشتباه نگیر. اون شیء یک پوسته سختگیرانه دور این مقادیر ساده است.
اعداد در جاوااسکریپت شامل اعداد صحیح در مبناهای مختلف و اعداد اعشاری میشوند. (از نظر قانون زبان، همه اعداد بدون علامت منفی هستند و وقتی مینویسی 123.4- در واقع علامت منفی یک عملگر ریاضی هست که روی عدد اعمال شده).
تو میتونی اعداد رو در ۴ مبنای مختلف بنویسی:
مبنای ۱۰ (دهدهی): اعداد معمولی که با صفر شروع نمیشن (مثل 117).
مبنای ۸ (Octal): اولشون با 0o یا 0O شروع میشه و فقط شامل اعداد ۰ تا ۷ هستند (مثل 0o77).
مبنای ۱۶ (Hexadecimal): اولشون با 0x یا 0X شروع میشه و شامل اعداد ۰ تا ۹ و حروف a تا f هستند (مثل 0x1123).
مبنای ۲ (باینری/صفر و یک): اولشون با 0b یا 0B شروع میشه (مثل 0b11).
اعداد غولپیکر (BigInt): آخرشون حرف n میگیره (مثل 1234n).
یک عدد اعشاری میتونه شامل عدد صحیح، نقطه اعشار (.)، بخش اعشار و توان (نماد علمی با e یا E) باشه:
3.14159
.1234
3.1E+12 // یعنی ۳.۱ ضربدر ۱۰ به توان ۱۲
1e-23 // یعنی ۱ ضربدر ۱۰ به توان منفی ۲۳
هر وقت یکسری جفتِ «کلید و مقدار» رو داخل دو تا آکلواد ({ }) بگذاری، یک لیترال شیء ساختی.
هشدار مهم: هیچوقت یک خط کد رو با
{شروع نکن! چون جاوااسکریپت فکر میکنه داری یک بلاک شرطی یا حلقه مینویسی و کدت خراب میشه.
به این مثال نگاه کن:
const sales = "Toyota";
function carTypes(name) {
return name === "Honda" ? name : `شرمنده، ما ${name} نمیفروشیم.`;
}
const car = {
myCar: "Saturn",
getCar: carTypes("Honda"),
special: sales
};
console.log(car.myCar); // خروجی: Saturn
console.log(car.getCar); // خروجی: Honda
console.log(car.special); // خروجی: Toyota
حتی میتونی از عدد برای نام کلیدها استفاده کنی یا شیءها رو تو در تو بنویسی:
const car = { manyCars: { a: "Saab", b: "Jeep" }, 7: "Mazda" };
console.log(car.manyCars.b); // خروجی: Jeep
console.log(car[7]); // خروجی: Mazda (برای نامهای عددی باید از [ ] استفاده کنی)
اگر اسم کلیدت طوری باشه که علامتهای عجیب غریب (مثل فاصله یا علامت تعجب) توش باشه، حتماً باید بگذاریش داخل کوتیشن، و موقع صدا زدن هم باید از کروشه [ ] استفاده کنی نه از نقطه (.):
const unusualNames = {
"": "یک متن خالی",
"!": "علامت تعجب!"
};
// اینطوری ارور میده: unusualNames.!
// درستش اینطوریه:
console.log(unusualNames[""]); // یک متن خالی
console.log(unusualNames["!"]); // علامت تعجب!
در نسخههای جدید جاوااسکریپت، ساختن شیءها خیلی راحتتر و شبیه به کلاسها شده. میتونی متدها رو سریعتر بنویسی، نام متغیرهای همنام رو خلاصه کنی، یا کلیدهای داینامیک بسازی:
const handler = {};
const obj = {
// اگر اسم کلید و متغیر یکی باشه، فقط اسمش رو مینویسی:
handler,
// نوشتن تابع یا متد بدون نیاز به کلمه function:
toString() {
return "سلام";
},
// ساخت اسم کلید به صورت داینامیک و محاسباتی:
["prop_" + 42]: 42 // یک کلید به اسم prop_42 درست میکنه
};
خیلی ساده بگیم؛ هر الگوی متنی که برای جستجو بین دو تا علامت اسلش (/ /) قرار بگیره، یک لیترال ریجکس هست:
const re = /ab+c/;
رشتهها همان متنهای معمولی هستند که باید داخل تککوتیشن (' ') یا دبلکوتیشن (" ") قرار بگیرند. هر کدوم رو باز کردی، با همون هم باید ببندیش:
'متن نمونه'
"یک متن دیگه"
"Joyo's cat" // وقتی بیرون دبلکوتیشن باشه، داخلش میتونی راحت تککوتیشن بگذاری
شما میتونی تمام کارهای پیشرفته (مثل گرفتن طول متن با .length یا متدهای تغییر متن) رو مستقیم روی همین متنهای ساده انجام بدی؛ جاوااسکریپت پشت صحنه خودش این متن رو موقتاً تبدیل به یک شیء میکنه، کار رو انجام میده و بعد پاکش میکنه:
console.log("Joyo's cat".length); // خروجی تعداد حروف یعنی 10 رو میده
یک روش فوقالعاده عالی و مدرن برای نوشتن متنها، استفاده از علامت بکتیک (`) به جای کوتیشن هست. این مدل سه تا معجزه میکنه:
متنهای چندخطی: راحت میتونی دکمه اینتر رو بزنی و بری خط بعد، بدون اینکه کدت خراب بشه.
تزریق متغیرها (Interpolation): با فرمت ${variable} میتونی متغیرها رو وسط متن بچسبونی.
const name = "علی";
// تزریق راحت متغیر وسط متن چندخطی:
const message = `سلام ${name}!
به سایت ما خوش اومدی.`;
این یک حالت پیشرفته برای صدا زدن یک تابع با استفاده از متنهای بکتیک هست. یعنی اسم تابع رو مینویسی و بدون پرانتز، متن بکتیک رو میچسبونی بهش. این تابع متن و متغیرها رو میگیره و پردازش میکنه تا خروجیهای قشنگتری بسازه (مثلاً تبدیل آرایهها به لیست یا تبدیل اشیاء به متن خوانای JSON):
// فرض کن یک تابع به اسم print داریم، اینطوری صداش میزنیم:
print`لیست کارهای من: ${todos}`;
گاهی اوقات میخوای کارهای خاصی توی متن انجام بدی (مثلاً بری خط بعد یا علامت دبلکوتیشن رو داخل دبلکوتیشن چاپ کنی). برای این کار از علامت بکاسلش (\) استفاده میکنیم:
const quote = "او گفت: \"جاوااسکریپت عالی است!\" ";
// خروجی دبلکوتیشنها رو به عنوان متن چاپ میکنه و ارور نمیده.
const path = "c:\\temp";
// برای اینکه خود علامت بکاسلش چاپ بشه، باید دو تا بگذاری.
همچنین میتونی برای شکستن یک خط طولانی در محیط کدنویسی (بدون اینکه توی خروجی بره خط بعد) از بکاسلش آخر خط استفاده کنی:
const str = "این یک متن \
طولانی است که توی کد شکسته شده \
اما توی خروجی یک خطه!";
| کاراکتر | معنی و کاربرد |
\0 | بایت پوچ (Null Byte) |
\b | پاک کردن کاراکتر قبلی (Backspace) |
\n | رفتن به خط جدید (New Line) |
\r | بازگشت به ابتدای خط (Carriage Return) |
\t | ایجاد فاصله تب (Tab) |
\' | خنثیسازی تککوتیشن |
\" | خنثیسازی دبلکوتیشن |
\\ | چاپ خودِ علامت بکاسلش |
\uXXXX | نوشتن کاراکترهای خاص با کد یونیکد ۴ رقمی (مثلاً کپیرایت) |
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: https://developer.mozilla.org/en-US/docs/Web/JavaScript