
بخش ۴: کار با رشتهها: متدها و دستکاری (Working with Strings: Methods and Manipulation)
رشتهها از پرکاربردترین انواع داده در جاوااسکریپت هستند. درک متدهای مختلف برای کار با رشتهها برای یک توسعهدهنده ارشد ضروری است.
مفاهیم کلیدی:
۱. ویژگیهای اصلی رشتهها:
- رشتهها در جاوااسکریپت غیرقابل تغییر (Immutable) هستند
- هر عملیاتی که روی رشته انجام میشود، یک رشته جدید برمیگرداند
- رشتهها میتوانند با
' '،" "یا` `تعریف شوند
۲. متدهای مهم رشتهها:
let text = "Hello, JavaScript!";
// طول رشته
console.log(text.length); // 18
// تبدیل به حروف بزرگ و کوچک
console.log(text.toUpperCase()); // "HELLO, JAVASCRIPT!"
console.log(text.toLowerCase()); // "hello, javascript!"
// پیدا کردن موقعیت
console.log(text.indexOf("Java")); // 7
console.log(text.lastIndexOf("a")); // 9
// استخراج بخشی از رشته
console.log(text.slice(0, 5)); // "Hello"
console.log(text.substring(7, 17)); // "JavaScript"
// جستجو و بررسی
console.log(text.includes("Script")); // true
console.log(text.startsWith("Hello")); // true
console.log(text.endsWith("!")); // true
// جایگزینی
console.log(text.replace("JavaScript", "World")); // "Hello, World!"۳. Template Literals (معرفی شده در ES6):
let name = "آرش";
let age = 30;
// رشتههای چندخطی و interpolation
let message = `سلام، من ${name} هستم.
${age} سال دارم.`;
console.log(message);۴. متدهای تقسیم و الحاق:
// تقسیم رشته به آرایه
let fruits = "apple,banana,orange";
let fruitArray = fruits.split(",");
console.log(fruitArray); // ["apple", "banana", "orange"]
// الحاق رشتهها
let str1 = "Hello";
let str2 = "World";
console.log(str1.concat(" ", str2)); // "Hello World"ارزیابی بخش ۴:
سؤال ۱: پیشبینی خروجی خروجی هر خط از کد زیر چیست؟
let sentence = "I love programming in JavaScript";
console.log(sentence.length);
console.log(sentence.toUpperCase());
console.log(sentence.indexOf("programming"));
console.log(sentence.slice(7, 18));
console.log(sentence.includes("Python"));
console.log(sentence.replace("JavaScript", "Python"));سؤال ۲: نوشتن تابع کاربردی تابعی بنویسید که یک رشته دریافت کند و بررسی کند آیا این رشته یک پالیندروم (متن متقارن) است یا نه؟
مثال پالیندروم: “madam”، “level”، “آبا”
سؤال ۳: استفاده از Template Literals با استفاده از Template Literals، متغیرهای زیر را به صورت یک پیام خوشامدگویی ترکیب کنید:
let firstName = "مریم";
let lastName = "رضایی";
let city = "تهران";بازخورد و تحلیل پاسخهای شما:
سؤال ۱: پیشبینی خروجی (نیاز به بازبینی 🔍)
بیایید با دقت بیشتری کد را بررسی کنیم:
let sentence = "I love programming in JavaScript";
console.log(sentence.length); // ❌ 32 (نادرست) - پاسخ صحیح: 31
console.log(sentence.toUpperCase()); // ✅ "I LOVE PROGRAMMING IN JAVASCRIPT" (صحیح)
console.log(sentence.indexOf("programming")); // ✅ 7 (صحیح)
console.log(sentence.slice(7, 18)); // ❌ "programming" (نادرست) - پاسخ صحیح: "programmin"
console.log(sentence.includes("Python")); // ✅ false (صحیح)
console.log(sentence.replace("JavaScript", "Python")); // ✅ "I love programming in Python" (صحیح)توضیح خطوط نیازمند بازبینی:
-
خط ۱:
sentence.length→ رشته “I love programming in JavaScript” دارای 31 کاراکتر است (با فاصلهها) -
خط ۴:
sentence.slice(7, 18)→slice(start, end)از ایندکس start تا end-1 را برمیگرداند- ایندکس 7: حرف “p” در “programming”
- ایندکس 18: حرف “g” در “programming”
- بنابراین خروجی: “programmin” (بدون حرف آخر)
سؤال ۲: تابع پالیندروم (نیاز به بهبود 🔍)
ایده کلی درست است اما کد شما مشکلاتی دارد:
// کد بهبود یافته:
function isPalindrome(str) {
// حذف فاصلهها و تبدیل به حروف کوچک برای بررسی بهتر
let cleanedStr = str.replace(/\s/g, '').toLowerCase();
let reversedStr = cleanedStr.split('').reverse().join('');
return cleanedStr === reversedStr;
}
// تست تابع
console.log(isPalindrome("madam")); // true
console.log(isPalindrome("level")); // true
console.log(isPalindrome("آبا")); // true
console.log(isPalindrome("hello")); // falseمشکلات کد شما:
- برای رشتههای با طول فرد (مثل “نان”) محاسبه نیمهها مشکل دارد
- بهتر است از متد
reverse()استفاده کنید - در نظر گرفتن فاصلهها و حروف بزرگ/کوچک
سؤال ۳: Template Literals (کاملاً صحیح ✅)
let firstName = "مریم";
let lastName = "رضایی";
let city = "تهران";
console.log(`خانم/آقای ${firstName} ${lastName} از ${city} خوش آمدید!`);
// ✅ خروجی: "خانم/آقای مریم رضایی از تهران خوش آمدید!"پاسخ شما کاملاً درست و تمیز است! استفاده از Template Literals خوانایی کد را بسیار بهبود میبخشد.
جمعبندی نهایی بخش ۴:
شما مفاهیم اصلی کار با رشتهها را خوب یاد گرفتهاید، فقط نیاز به دقت بیشتر در موارد زیر دارید:
- ایندکسگذاری در متدهای
slice()وsubstring() - الگوریتمهای پیچیدهتر مانند بررسی پالیندروم
نکات مهم برای توسعهدهنده ارشد:
- همیشه مستندات متدهای رشته را برای درست کردن پارامترها بررسی کنید
- برای الگوریتمهای پیچیده، ابتدا روی کاغذ منطق آن را بنویسید
- از Template Literals برای خوانایی بیشتر کد استفاده کنید
آیا این توضیحات شفاف بود و آماده حرکت به بخش بعدی هستید؟
بخش بعدی: “اعداد: عملیات پایه و شیء Math” - جایی با عملیات ریاضی پیشرفته در جاوااسکریپت آشنا میشویم!