النصوص في JavaScript وأهم دوالها
النصوص في كل مكان: أسماء المستخدمين، والرسائل، وعناوين البريد، والتعليقات. في هذا الدرس ستتعلم كيف تتعامل مع النصوص (Strings): كيف تعرف طولها، وتصل إلى أي حرف فيها، وتغيّر شكلها وتبحث داخلها، ثم تتعرف على قوالب النصوص، وهي أسهل طريقة لدمج المتغيرات داخل الجمل.
طول النص والوصول إلى حروفه
Section titled “طول النص والوصول إلى حروفه”تخيّل النص مثل قطار: كل حرف عربة، وكل عربة لها رقم. لكن انتبه: الترقيم في البرمجة يبدأ من صفر وليس من واحد.
let word = "JavaScript";console.log(word.length);console.log(word[0]);console.log(word[4]);console.log(word.at(-1));console.log(word[20]);10JStundefined.lengthتعطيك عدد الحروف، والمسافات تُحسب أيضاً.word[0]أول حرف، وword[4]الحرف الخامس..at(-1)تعطيك آخر حرف. الأرقام السالبة تعدّ من النهاية.- إذا طلبت رقماً غير موجود مثل
word[20]تحصل علىundefined.
تغيير حالة الأحرف
Section titled “تغيير حالة الأحرف”الدالة (Method) هي أمر جاهز تستدعيه بوضع نقطة بعد النص ثم اسم الدالة وقوسين. هذه دالتان لتغيير حالة الأحرف الإنجليزية:
let text = "Hello World";console.log(text.toUpperCase());console.log(text.toLowerCase());HELLO WORLDhello worldهذا مفيد مثلاً عند مقارنة بريد إلكتروني كتبه المستخدم بحروف مختلطة: حوّل الطرفين إلى حروف صغيرة أولاً ثم قارن.
تنظيف النص بـ trim
Section titled “تنظيف النص بـ trim”أحياناً يكتب المستخدم مسافات زائدة في أول ما يكتبه أو آخره دون أن يقصد. الدالة trim تزيلها، مثل مقص يقص الأطراف الزائدة:
console.log(input.trim());البحث داخل النص
Section titled “البحث داخل النص”let text = "Hello World";console.log(text.includes("World"));console.log(text.indexOf("World"));console.log("Hello".indexOf("z"));console.log("photo.png".endsWith(".png"));console.log("https://site.com".startsWith("https"));true6-1truetrueincludesتجيب: هل الكلمة موجودة؟ (trueأوfalse).indexOfتعطيك مكان أول ظهور للكلمة، أو-1إن لم تجدها.startsWithوendsWithتفحصان بداية النص ونهايته. مثلاً: هل الملف صورة بامتداد.png؟
قص النص واستبدال أجزائه
Section titled “قص النص واستبدال أجزائه”let text = "Hello World";console.log(text.slice(0, 5));console.log(text.replace("World", "JS"));console.log("a-b-a".replaceAll("a", "x"));console.log(text);HelloHello JSx-b-xHello Worldslice(0, 5)تقص من الموضع0حتى قبل الموضع5، أي أن الرقم الثاني لا يدخل في القص.replaceتستبدل أول ظهور فقط، وreplaceAllتستبدل كل الظهورات.
لاحظ السطر الأخير: النص الأصلي text لم يتغير! وهذا يقودنا لقاعدة مهمة.
النصوص لا تتغير
Section titled “النصوص لا تتغير”كل دوال النصوص تُرجع نصاً جديداً ولا تعدّل النص الأصلي. إذا أردت حفظ النتيجة، فضعها في متغير:
let animal = "cat";animal.toUpperCase();console.log(animal);animal = animal.toUpperCase();console.log(animal);catCATالأمر يشبه آلة التصوير: تعطيك نسخة معدّلة، والورقة الأصلية تبقى كما هي.
قوالب النصوص (Template Literals)
Section titled “قوالب النصوص (Template Literals)”لنفترض أنك تريد أن تبني جملة فيها متغيرات. الطريقة القديمة هي اللصق بعلامة +:
let name = "سارة";let age = 14;console.log("اسمي " + name + " وعمري " + age + " سنة");الطريقة تعمل، لكنها مزعجة: علامات تنصيص كثيرة، ومسافات يسهل نسيانها. الحل الحديث هو قوالب النصوص: اكتب النص بين علامتي backtick (المفتاح الموجود عادة تحت زر Esc)، وضع أي متغير داخل ${ }:
let name = "سارة";let age = 14;console.log(`اسمي ${name} وعمري ${age} سنة`);console.log(`بعد 5 سنوات سيكون عمري ${age + 5} سنة`);اسمي سارة وعمري 14 سنةبعد 5 سنوات سيكون عمري 19 سنةالقالب يشبه استمارة فيها فراغات: الجملة ثابتة، والفراغات تُملأ بقيم المتغيرات. ولاحظ في السطر الثاني أنك تستطيع كتابة عملية حسابية كاملة داخل ${ }.
ومن مزاياها أيضاً أنها تسمح بكتابة نص من عدة أسطر مباشرة:
let poem = `السطر الأولالسطر الثاني`;console.log(poem);السطر الأولالسطر الثانيالرموز الخاصة داخل النص
Section titled “الرموز الخاصة داخل النص”ماذا لو أردت كتابة علامة تنصيص داخل النص نفسه؟ استخدم الشرطة المائلة العكسية \ قبلها، فتفهم JavaScript أنها جزء من النص. وكذلك \n تعني «سطراً جديداً»:
console.log("قال المعلم: \"ركّزوا\"");console.log('It\'s easy');console.log("سطر\nسطر جديد");قال المعلم: "ركّزوا"It's easyسطرسطر جديدجرّب بنفسك
Section titled “جرّب بنفسك”هذا الكود ينظّف اسماً كتبه مستخدم بمسافات زائدة، ثم يرحّب به. غيّر الاسم في السطر الأول وجرّب دوالاً أخرى تعلمتها:
الناتج
أخطاء شائعة
Section titled “أخطاء شائعة”- نسيان أن الترقيم يبدأ من صفر: أول حرف هو
text[0]وليسtext[1]. - توقع أن الدالة تغيّر النص الأصلي: كتابة
name.trim();وحدها لا تفعل شيئاً. اكتبname = name.trim();. - استخدام علامة تنصيص عادية مع
${ }: في"مرحباً ${name}"لن تُستبدل القيمة، وستظهر الكلمة كما هي. القوالب تعمل فقط مع علامة الـ backtick.
اختبر نفسك
Section titled “اختبر نفسك”سؤال
ما ناتج 'Hello'.slice(1, 3)؟
القص يبدأ من الموضع 1 (الحرف e) ويتوقف قبل الموضع 3، فيعطي el.
سؤال
لكي تُستبدل ${age} داخل النص بقيمة المتغير، بين أي علامتين تكتب النص؟
قوالب النصوص تعمل فقط بين علامتي backtick. أما مع علامات التنصيص العادية فتظهر ${age} كما هي.
الخلاصة
Section titled “الخلاصة”.lengthتعطي طول النص، والحروف مرقّمة من صفر:text[0]أولها و.at(-1)آخرها.- دوال مفيدة:
toUpperCaseوtoLowerCaseوtrimوincludesوindexOfوsliceوreplace. - دوال النصوص تُرجع نصاً جديداً ولا تغيّر الأصلي.
- قوالب النصوص بعلامة backtick و
${ }هي أسهل طريقة لدمج المتغيرات في الجمل. - الشرطة العكسية
\تكتب الرموز الخاصة مثل\"و\n.