رشتهها و متن
ساخت رشته، متدهای پرکاربرد رشته، جستوجو، استخراج و جایگزینی متن، Template Literal و کار با Unicode
رشته چیست؟
رشته (String) دنبالهای از کاراکترهاست که متن را نمایش میدهد. رشتهها در جاوا اسکریپت غیرقابل تغییر (Immutable) هستند — یعنی متدها همیشه رشته جدید میسازند:
// سه روش ساخت رشته:
const s1 = "دابل کوتیشن"; // رایجترین
const s2 = "تک کوتیشن"; // معادل
const s3 = new String("شیء رشته"); // ❌ نکنید — object میسازد
// غیرقابل تغییر بودن:
let name = "javascript";
name[0] = "J"; // بیاثر — خطا نمیدهد ولی تغییر هم نمیدهد
console.log(name); // javascript
// رشته جدید بسازید:
name = "J" + name.slice(1);
console.log(name); // Javascript
ویژگیهای رشته
رشته ویژگی length دارد و با index به کاراکترها دسترسی دارید:
const str = "Hello";
console.log(str.length); // 5 — تعداد کاراکتر
console.log(str[0]); // H
console.log(str[4]); // o
console.log(str[10]); // undefined — خارج از محدوده
console.log(str.at(-1)); // o — شمارش از انتها (ES2022)
console.log(str.charAt(0)); // H — روش قدیمی
console.log(str.charCodeAt(0)); // 72 — کد UTF-16
تغییر حروف بزرگ و کوچک
const text = "JavaScript";
console.log(text.toUpperCase()); // JAVASCRIPT
console.log(text.toLowerCase()); // javascript
// استفاده عملی — مقایسه بدون حساسیت به حروف:
const input = "YES";
if (input.toLowerCase() === "yes") {
console.log("تایید شد");
}
جستوجو در رشته
const sentence = "جاوا اسکریپت زبان وب است";
// شامل بودن:
console.log(sentence.includes("وب")); // true
console.log(sentence.includes("پایتون")); // false
// شروع و پایان:
console.log(sentence.startsWith("جاوا")); // true
console.log(sentence.endsWith("است")); // true
// پیدا کردن index:
console.log(sentence.indexOf("زبان")); // 13 — اولین جایگاه
console.log(sentence.indexOf("وب", 10)); // جستوجو از index 10
console.log(sentence.lastIndexOf("ا")); // آخرین جایگاه
// پیدا نشد؟
console.log(sentence.indexOf("xxx")); // -1
// جستوجوی مدرن (ES2023) — از انتها:
console.log(sentence.lastIndexOf("ا")); // از آخر میگردد
استخراج متن
const str = "JavaScript";
// slice(start, end) — رایجترین، منفی قبول میکند:
console.log(str.slice(0, 4)); // Java
console.log(str.slice(4)); // Script
console.log(str.slice(-6)); // Script — 6 کاراکتر آخر
console.log(str.slice(-10, -6)); // Java
// substring(start, end) — منفی را 0 در نظر میگیرد:
console.log(str.substring(0, 4)); // Java
console.log(str.substring(4, 0)); // Java — آرگومانها را جابهجا میکند!
// substr(start, length) — قدیمی، دومی طول است:
console.log(str.substr(0, 4)); // Java
جایگزینی متن
let msg = "من PHP دوست دارم. PHP عالی است.";
// فقط اولین مورد:
console.log(msg.replace("PHP", "جاوا اسکریپت"));
// من جاوا اسکریپت دوست دارم. PHP عالی است.
// همه موارد (ES2021):
console.log(msg.replaceAll("PHP", "جاوا اسکریپت"));
// من جاوا اسکریپت دوست دارم. جاوا اسکریپت عالی است.
// با Regex — جایگزینی همه (روش قدیمی):
console.log(msg.replace(/PHP/g, "جاوا اسکریپت"));
تقسیم و اتصال رشته
// split — تبدیل رشته به آرایه:
const csv = "علی,مریم,رضا,سارا";
const names = csv.split(",");
console.log(names); // ["علی", "مریم", "رضا", "سارا"]
console.log(names[2]); // رضا
// join — اتصال آرایه به رشته:
console.log(names.join(" و ")); // علی و مریم و رضا و سارا
// تقسیم به حروف:
console.log("abc".split("")); // ["a", "b", "c"]
// repeat — تکرار رشته:
console.log("=-".repeat(5)); // =-=-=-=-=
console.log("0".repeat(3)); // 000
// concat — اتصال:
console.log("سلام".concat(" ", "دنیا")); // سلام دنیا
حذف فاصلهها
const dirty = " سلام دنیا ";
console.log(dirty.trim()); // "سلام دنیا" — هر دو طرف
console.log(dirty.trimStart()); // "سلام دنیا " — فقط اول
console.log(dirty.trimEnd()); // " سلام دنیا" — فقط آخر
// استفاده عملی — اعتبارسنجی ورودی:
const userInput = " ali@email.com ";
const email = userInput.trim();
if (email.includes("@")) {
console.log("ایمیل معتبر است:", email);
}
تکمیل رشته (Padding)
// padStart و padEnd — پر کردن با کاراکتر مشخص:
console.log("5".padStart(3, "0")); // 005
console.log("5".padEnd(3, "*")); // 5**
// ساخت جدول مرتب در کنسول:
const products = [
["سیب", 25000],
["شیر", 18000],
["نان", 10000],
];
for (const [name, price] of products) {
console.log(name.padEnd(10, ".") + String(price).padStart(8, " ") + " تومان");
}
// سیب......... 25000 تومان
// شير........ 18000 تومان
Template Literal
با backtick (`) میسازند و امکان درج متغیر و چندخطی بودن دارند:
const user = "علی";
const score = 18.5;
// درج متغیر با ${}:
const msg = `کاربر ${user} نمره ${score} گرفت`;
console.log(msg); // کاربر علی نمره 18.5 گرفت
// چندخطی بدون n\:
const html = `<div>
<h1>سلام ${user}</h1>
</div>`;
// عبارت داخل ${}:
console.log(`جمع: ${2 + 3}`); // جمع: 5
console.log(`وضعیت: ${score >= 10 ? "قبول" : "مردود"}`);
// مقایسه با روش قدیمی:
const old = "کاربر " + user + " نمره " + score + " گرفت"; // شلوغ!
Unicode و UTF-16
جاوا اسکریپت متن را با کدگذاری UTF-16 ذخیره میکند. هر کاراکتر یک کدپوینت (Code Point) دارد:
// کد کاراکتر:
console.log("A".codePointAt(0)); // 65
console.log("a".codePointAt(0)); // 97
console.log("س".codePointAt(0)); // 1587
// ساخت کاراکتر از کد:
console.log(String.fromCodePoint(65)); // A
console.log(String.fromCodePoint(128512)); // 😀
// مشکل کاراکترهای بزرگ (بیش از 16 بیت):
const emoji = "😀";
console.log(emoji.length); // 2 — دو code unit دارد!
console.log([...emoji].length); // 1 — با spread درست میشود
// پیمایش درست رشته:
for (const ch of "a😀b") {
console.log(ch); // a، 😀، b — for...of کدپوینت میدهد
}
رمزگذاری و رمزگشایی متن
// برای URL — کاراکترهای خاص:
const q = "جستوجوی فارسی";
console.log(encodeURIComponent(q));
// "%D8%AC%D8%B3%D8%AA..."
const url = `https://example.com/search?q=${encodeURIComponent(q)}`;
// رمزگشایی:
console.log(decodeURIComponent("%D8%AC%D8%B3%D8%AA")); // جست
// Base64 — با atob و btoa:
const encoded = btoa("Hello"); // "SGVsbG8="
console.log(atob(encoded)); // "Hello"
// نکته: btoa فقط ASCII — برای فارسی:
const faEncoded = btoa(unescape(encodeURIComponent("سلام")));
const faDecoded = decodeURIComponent(escape(atob(faEncoded)));
console.log(faDecoded); // سلام
جدول متدهای مهم
| متد | کار |
|---|---|
| includes / startsWith / endsWith | جستوجوی بولی |
| indexOf / lastIndexOf | یافتن جایگاه |
| slice / substring | استخراج بخشی از متن |
| toUpperCase / toLowerCase | تغییر حروف |
| trim / trimStart / trimEnd | حذف فاصله |
| replace / replaceAll | جایگزینی |
| split | تبدیل به آرایه |
| padStart / padEnd | تکمیل رشته |
| repeat | تکرار |
| at / charAt | دسترسی به کاراکتر |
جمعبندی
- رشتهها غیرقابل تغییر است — متدها رشته جدید برمیگردانند
sliceبرای برش (منفی قبول میکند)،substringآرگومانها را مرتب میکندincludesبولی میدهد،indexOfجایگاه (یا 1-)replaceAllهمه موارد را جایگزین میکند- Template Literal با backtick — درج متغیر با
${} - کاراکترهای Emoji دو code unit دارند — از
for...ofیا spread استفاده کنید encodeURIComponentبرای ساخت URL امن
این مبحث بخشی از دوره آموزش کامل جاوا اسکریپت است.