كيفية جعل الحرف الأول كبيرًا في JavaScript: 5 طرق + أسرار

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

"لماذا لا توجد طريقة مدمجة في JavaScript للكتابة بالأحرف الكبيرة؟" - قد تسأل

\n\n

هذا السؤال يؤرق المبتدئين منذ سنوات عديدة. على Stack Overflow، حصل على آلاف الأصوات وملايين المشاهدات. قد يبدو الأمر بسيطًا، وهو جعل الحرف الأول كبيرًا؟ لكن في JavaScript، تتحول هذه العملية البسيطة إلى مهمة صغيرة.

\n\n

في هذه المقالة، لن نقدم إجابة جاهزة فقط. بل سنستعرض خمس طرق مختلفة، ونقارنها من حيث الأداء، وسهولة القراءة، والموثوقية. ستتعرف على سبب عدم كون str[0].toUpperCase() + str.slice(1) هو الخيار الأفضل دائمًا، وكيفية التعامل مع الحالات الاستثنائية مثل السلاسل الفارغة أو رموز Unicode.

\n\n

1. الطريقة الكلاسيكية: charAt + slice

\n\n

الإجابة الأكثر شيوعًا على Stack Overflow - وليس من دون سبب. تُستخدم هذه الطريقة في 90% من المشاريع.

\n\n
function capitalizeFirst(str) {\n    return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nconsole.log(capitalizeFirst('hello')); // 'Hello'\nconsole.log(capitalizeFirst('javaScript')); // 'JavaScript'
\n\n

لماذا charAt وليس str[0]؟

\n\n

في المتصفحات القديمة (IE 8 والإصدارات الأقدم)، كان الوصول عبر الفهرس str[0] يُرجع undefined للسلسلة الفارغة. بينما charAt(0) تُرجع دائمًا سلسلة فارغة، مما يجعلها أكثر أمانًا. في الكود الحديث، لا يوجد فرق تقريبًا، لكن عادة استخدام charAt بقيت كـ أفضل ممارسة للتوافق مع الأنظمة القديمة.

\n\n

الإيجابيات: البساطة، سهولة القراءة، تعمل في كل مكان.
\nالسلبيات: لا تتعامل مع السلاسل الفارغة (ستؤدي إلى خطأ TypeError).

\n\n

2. الطريقة الحديثة: القوالب النصية + slice

\n\n

مع ظهور ES6، يمكن جعل الكود أكثر أناقة:

\n\n
const capitalize = (str) => {\n    return `${str.charAt(0).toUpperCase()}${str.slice(1)}`;\n};
\n\n

أو بشكل أقصر مع العامل الاختياري (ES2020):

\n\n
const capitalize = (str) => str?.charAt(0).toUpperCase() + str.slice(1);
\n\n

العامل ?. يحمي من null أو undefined، لكنه لا يحمي من السلسلة الفارغة. بالنسبة للسلسلة الفارغة، str?.charAt(0) سيعيد ""، و toUpperCase() على سلسلة فارغة سيعيد أيضًا "". النتيجة: "" + "".slice(1) → "". يعمل بشكل صحيح!

\n\n

3. التعبيرات المنتظمة: لعشاق البرمجة وعشاق الجمال

\n\n

طريقة regex تبدو وكأنها سحر، لكنها قوية جدًا:

\n\n
function capitalizeRegex(str) {\n    return str.replace(/^./, char => char.toUpperCase());\n}\n\nconsole.log(capitalizeRegex('world')); // 'World'
\n\n

ماذا يحدث هنا؟ ^. تعني "الحرف الأول من السلسلة". نستبدله بنتيجة استدعاء toUpperCase().

\n\n

الإيجابيات:

\n
    \n
  • لا يتطلب التحقق من السلسلة الفارغة (regex ببساطة لن يفعل شيئًا)
  • \n
  • سهل التوسيع: /^\\w/ - للأحرف فقط، /^[a-z]/ - للأحرف اللاتينية فقط
  • \n
\n\n

السلبيات:

\n
    \n
  • أبطأ بنسبة 20-30% (الاختبارات على jsPerf تؤكد ذلك)
  • \n
  • أقل قابلية للقراءة للمبتدئين
  • \n
\n\n

4. طريقة CSS: عندما لا تكون JavaScript ضرورية

\n\n

أحيانًا، أفضل كود هو الكود الذي لم تكتبه. إذا كنت تعمل على عرض النص في الصفحة، فإن الكتابة بالأحرف الكبيرة عبر CSS قد تكون الحل الأمثل:

\n\n
/* CSS */\n.capitalize {\n    text-transform: capitalize;\n}
\n\n
// HTML\n<p class="capitalize">هذا النص سيكون بحرف أول كبير</p>
\n\n

لكن هناك فارق بسيط: text-transform: capitalize يجعل كل كلمة تبدأ بحرف كبير، وليس فقط الكلمة الأولى. إذا كنت تحتاج فقط إلى الكلمة الأولى - فلا مفر من استخدام JavaScript.

\n\n

5. الطريقة الاحترافية: معالجة الأخطاء و Unicode

\n\n

يجب أن يأخذ كود الإنتاج الحقيقي في الاعتبار الحالات الحدودية. إليك دالة

المدونات

توصيات الكتب