رشته ها در جاوا اسکریپت
همانطور که پیشتر اشاره شد، یکی از انواع دادهی اولیه در جاوا اسکریپت، نوع دادهی رشتهای یا String است. یک رشته از کنار هم قرار گرفتن تعدادی کاراکتر تشکیل میشود. رشتهای که تعداد کاراکترهای آن صفر باشد را رشتهی تهی مینامیم.
برای تعریف یک رشته، باید کاراکترهای مورد نظر را داخل علامت Single Quotes یا Double Quotes قرار دهیم. نمونههایی از تعریف رشتهها را در قطعه کد زیر میبینید.
let message = 'Hello'; // Single Quotes تعریف یک متغیر رشتهای با
let name = "Sohrab"; // Double Quotes تعریف یک متغیر رشتهای با
const companyName = "Microsoft"; // Double Quotes تعریف یک ثابت رشتهای با
در شرایط عادی هیچ تفاوتی بین Single Quotes و Double Quotes وجود ندارد و هیچ کدام نسبت به دیگری ارجحیت ندارد. اما اگر در کاراکترهای یک رشته بخواهیم از کاراکتر Single Quote یا Double Quote استفاده کنیم، وضعیت متفاوت خواهد بود. مثلاً تعریف دو متغیر رشتهای که اولی شامل کاراکتر Single Quote و دومی شامل کاراکتر Double Quote است به شکل زیر صحیح نیست و هر دو دستور موجب تولید خطا و توقف برنامه خواهند شد.
let firstString = 'It's a car';
let secondString = "My name is "Hamid"";
دلیل بروز خطا در دستورات فوق کاملاً واضح است. چرا که مثلاً در دستور اول، کاراکتر Single Quote که بعد از کلمهی It آمده است به عنوان پایان رشته تلقی خواهد شد و مابقی کاراکترها نیز با دستور زبان جاوا اسکریپت مطابقت ندارند و یک عبارت غلط ارزیابی میشوند. اما اگر در دستور اول، برای تعریف رشته از Double Quotes استفاده میکردیم مشکل حل میشد. چرا که ابتدا و انتهای رشته کاملاً قابل تشخیص خواهد بود. در نتیجه زمانی که یک رشته شامل کاراکتر Single Quote باشد، باید آن را داخل Double Quotes قرار دهیم. و زمانی که شامل کاراکتر Double Quote باشد، باید آن را داخل Single Quotes قرار دهیم. پس شکل صحیح دو دستور فوق به صورت زیر خواهد بود.
let firstString = "It's a car";
let secondString = 'My name is "Hamid"';
حال فرض کنید که رشتهای شامل هر دو کاراکتر Single Quote و Double Quote باشد. در این صورت رشته را باید به چه شکل تعریف کرد تا با خطا مواجه نشویم؟ پاسخ این سوال در روشی است که اصطلاحاً به آن escape کردن کاراکترهای خاص گفته میشود. در این روش، بدون توجه به این که رشته را با Single Quotes تعریف کردهایم یا با Double Quotes، میتوانیم با قرار دادن کاراکتر "\" قبل از کاراکتر مورد نظر (Single Quote یا Double Quote)، اصطلاحاً آن کاراکتر را escape کنیم. توجه کنید که اگر رشته را با Double Quotes تعریف کرده باشید، نیازی به escape کردن کاراکترهای Single Quote نخواهید داشت و برعکس. مثلاً قطعه کد زیر دو روش برای تعریف یک رشته که هم شامل Single Quote و هم شامل Double Quote است را نشان میدهد.
let string1 = "My name is \"Hamid\" and It's my car";
let string2 = 'My name is "Hamid" and it\'s my car';
پس برای قرار دادن کاراکترهای خاص در یک رشته، میتوان با قرار دادن "\" قبل از کاراکتر مورد نظر، آن کاراکتر را escape کرد. اما کاراکترهای خاص محدود به Single Quote و Double Quote نیستند. از مهمترین کاراکترهای خاصی که معمولاً نیاز به escape کردن آنها پیدا میکنیم؛ میتوان به موارد زیر اشاره کرد :
- کاراکتر "\" : برای escape کردن کاراکتر "\" باید دو بار از همین کاراکتر به صورت "\\" استفاده کنیم.
- کاراکتر خط جدید (معادل Enter) : برای escape کردن این کاراکتر باید از "\n" استفاده کرد.
- کاراکتر جدولبندی افقی (معادل کلید Tab) : برای escape کردن این کاراکتر باید از "\t" استفاده کرد.
به عنوان مثال رشتهی زیر را در نظر بگیرید که علاوه بر Single Quote و Double Quote، شامل خط جدید و "\" نیز میباشد.
Hello World!
My name is "Hamid" and It's my car
My profile folder is : C:\Users\Hamid
برای قرار دادن چنین مقداری در یک متغیر رشتهای میتوان به صورت زیر عمل کرد.
let str = "Hello World!\nMy name is \"Hamid\" and It's my car\nMy profile folder is : C:\\Users\\Hamid";
همین حالا کنسول مرورگر خود را باز کنید و دستور فوق را در آن اجرا کنید. سپس برای مشاهدهی مقداری که در متغیر فوق ذخیره شده است، نام متغیر، یعنی str را در کنسول وارد کنید. نتیجهای که مشاهده خواهید کرد به شکل زیر است که کاملاً رفتار کاراکتر "\" را برای escape کردن کاراکترهای خاص نشان میدهد.
پس در این بخش با نحوهی تعریف متغیرهای رشتهای آشنا شدیم. اما جزئیات بیشتری در مورد رشتهها وجود دارد که به مرور با آنها آشنا خواهیم شد.