جافا سكريبت: لغة الويب الأولى
جافا سكريبت هي لغة البرمجة التي تعمل داخل متصفحات الويب. حين تستجيب الصفحة لنقرة زر، أو تتحقق من صحة نموذج، أو تعرض قائمة متحركة، أو تُحمّل محتوى جديداً دون إعادة تحميل الصفحة كاملةً — فكل هذا من صنع JavaScript. كل متصفح على كل جهاز يأتي ومعه محرك جافا سكريبت جاهز، وهذا ما يجعلها اللغة الوحيدة التي تعمل أصلاً على الويب دون أي إضافات.
ولم تعد جافا سكريبت حبيسة المتصفح؛ فبيئات مثل Node.js وDeno وBun فتحت لها الباب لتشغيل الخوادم، وكتابة أدوات سطر الأوامر، وبناء سكربتات التجميع، وتطوير واجهات الـ APIs. أي أن اللغة نفسها تُشغّل الواجهة الأمامية والخلفية معاً، وهذا سبب رئيسي لانتشارها الواسع.
وإليك لمحة سريعة عن شكل كود جافا سكريبت:
ثلاثة أسطر، ثلاث أفكار: تعريف متغيّر، استدعاء دالة جاهزة، وطباعة نص باستخدام القوالب النصية. هذه العناصر الثلاثة ستراها في كل صفحة كود JavaScript حقيقي.
أين تعمل لغة JavaScript؟
لغة JavaScript في حدّ ذاتها مجرّد مواصفة (تُعرف باسم ECMAScript). ولتشغيلها فعليًا تحتاج إلى محرّك (Engine)، وهو برنامج يقرأ الكود ويُنفّذه. أبرز محرّكين ستتعامل معهما:
- المتصفّحات. متصفّحا Chrome وEdge يستخدمان V8، أما Firefox فيعتمد على SpiderMonkey، بينما يستخدم Safari محرّك JavaScriptCore. افتح أي صفحة، اضغط F12، والصق كود JavaScript في تبويب Console لتراه يُنفَّذ فورًا.
- Node.js. يُخرج محرّك V8 من المتصفّح ويمنحه صلاحية الوصول إلى نظام الملفات والشبكة ونظام التشغيل، وهذا ما يجعل تشغيل JavaScript على الخادم ممكنًا.
// قم بالتشغيل في وحدة تحكم المتصفح:
document.title = "عنوان التبويب الجديد";
// قم بالتشغيل باستخدام Node.js:
// $ node script.js
جافا سكريبت في المتصفح تستطيع التعامل مع الصفحة (أي الـ DOM)، لكنها لا تلمس نظام الملفات. أما جافا سكريبت في Node.js فتقرأ الملفات وتفتح الـ sockets، لكنها لا تملك صفحة أصلًا لتتلاعب بها. نفس اللغة، ولكلّ بيئة قدراتها الخاصة.
استخدامات جافا سكريبت
باختصار: أي شيء له علاقة بالويب تقريبًا. وبتفصيل أكثر، وترتيبها تقريبًا حسب ما ستقابله أثناء رحلتك:
- صفحات ويب تفاعلية. التحقق من النماذج، القوائم المنسدلة، النوافذ المنبثقة (modals)، البحث الفوري، والسحب والإفلات.
- تطبيقات الصفحة الواحدة (SPA). مثل Gmail وFigma وNotion وLinear — تطبيقات كاملة تُعرض وتُحدَّث عبر جافا سكريبت، غالبًا بالاعتماد على إطار عمل مثل React أو Vue أو Svelte.
- خوادم الواجهة الخلفية. واجهات REST وGraphQL والخدمات اللحظية، وتُبنى باستخدام Node.js أو Express أو Fastify أو NestJS.
- أدوات البناء والتطوير. محزّمات الكود مثل Vite وesbuild وwebpack، وأدوات الفحص مثل ESLint، ومشغّلات الاختبارات مثل Vitest وJest.
- تطبيقات متعددة المنصات. تطبيقات سطح المكتب عبر Electron (مثل VS Code وSlack وDiscord)، وتطبيقات الهاتف عبر React Native.
لا يلزمك أن تعرف هذا كلّه من أول يوم. لكن المهم أن تعرف أنها موجودة، حتى لا تبدو لك جملة "مجرد جافا سكريبت" محدودة.
كيف تعمل JavaScript فعليًا
تصوّر ذهني مبسّط جدًا: أنت تكتب الكود المصدري، ثم يقوم المحرّك بتحليله إلى تمثيل داخلي، وبعدها ينفّذه. المحرّكات الحديثة تستخدم ما يُعرف بـ JIT (التصريف الفوري أثناء التشغيل) — فتبدأ بتفسير الكود بسرعة، ثم تحوّل المسارات الساخنة (hot paths) إلى كود آلة مُحسَّن أثناء تشغيل البرنامج نفسه.
أي أنك لا تقوم بترجمة جافا سكريبت إلى ملف ثنائي قبل نشرها. فقط تسلّم الكود المصدري للمتصفح (أو Node)، والمحرّك يتكفّل بالباقي:
الصقه في كونسول المتصفح، أو احفظه في ملف greet.js ونفّذ node greet.js — النتيجة واحدة في الحالتين. لا مرحلة تصريف (compile)، ولا ملفات إعدادات بناء، ولا حتى حزم تحتاج تثبيتها لتشغيل كود بهذه البساطة.
الفرق بين Java و JavaScript
الاسمان متشابهان، لكن اللغتين مختلفتان تمامًا. أُطلق اسم JavaScript عام 1995 لركوب موجة شهرة Java في ذلك الوقت — قرار تسويقي بحت تسبّب في حيرة المبتدئين منذ ذلك الحين حتى اليوم.
| JavaScript | Java | |
|---|---|---|
| نظام الأنواع | ديناميكي | ساكن (Static) |
| بيئة التشغيل | المتصفحات و Node.js | آلة جافا الافتراضية JVM |
| النمط البرمجي | متعدد الأنماط، قائم على النماذج الأولية (prototype) | كائنيّ قائم على الأصناف (classes) |
| التصريف | JIT بدون خطوة بناء | تصريف مسبق إلى bytecode |
إذا سمعت أحدهم يقول: "أنا أتقن Java، إذًا أعرف JavaScript" — فاعلم أنه مخطئ. تعامل معهما كلغتين منفصلتين تتشاركان في أربعة أحرف فقط لا غير.
الفرق بين JavaScript و TypeScript
TypeScript هي ببساطة JavaScript مضافًا إليها نظام أنواع. تكتب الكود مع تعليقات الأنواع (type annotations)، ثم يتحقق منها مصرّف TypeScript، والناتج النهائي هو JavaScript عادية تعمل في أي بيئة تدعم JavaScript.
// جافا سكريبت — الأنواع ضمنية:
function add(a, b) {
return a + b;
}
// تايب سكريبت — الأنواع صريحة:
function add(a: number, b: number): number {
return a + b;
}
كل ملف JavaScript صالح هو في الوقت نفسه ملف TypeScript صالح، وهذا يعني أن TypeScript ليست منافسًا لـ JavaScript بل هي امتداد (superset) لها. معظم المشاريع الكبيرة اليوم مكتوبة بـ TypeScript، لكن البداية الصحيحة أن تتعلم جافا سكريبت أولًا. فلن تستوعب دور TypeScript ما لم تفهم أولًا ما الذي تُضيف الأنواع (types) إليه.
لمحة تاريخية سريعة حتى تفهم غرائب اللغة
كُتبت لغة JavaScript في عشرة أيام فقط عام 1995 على يد Brendan Eich في شركة Netscape. هذه القصة ليست مجرد طرفة، فكثير من العيوب التي تلاحظها في اللغة اليوم — كالمساواة المرنة (loose equality)، وإدراج الفاصلة المنقوطة تلقائيًا، وكون typeof null === "object" — جاءت من قرارات اتُّخذت تحت ضغط زمني شديد، ثم تجمّدت كما هي حفاظًا على توافق الويب مع الإصدارات القديمة.
اللغة موثّقة رسميًا تحت اسم ECMAScript، ويصدر منها إصدار جديد كل عام (وكان ES2015 هو الإصدار الفارق الذي جلب لنا let وconst والدوال السهمية والكلاسات ونظام الوحدات modules). فحين تسمع أحدهم يقول "ES6" أو "جافا سكريبت الحديثة"، فهو يقصد تقريبًا مجموعة الميزات التي ظهرت منذ 2015 وصارت مدعومة في كل مكان.
الكتابة بـ JavaScript الحديثة تجربة ممتعة فعلًا. الأجزاء القديمة لا تزال موجودة، لكن يمكنك تفاديها في الغالب بعادات برمجية سنتعرّض لها خلال هذا المساق.
أبرز ما ينبغي أن تخرج به
- لغة JavaScript تعمل داخل كل المتصفحات، كما تعمل على الخوادم عبر Node.js.
- تُستخدم في كل ما يلامس الويب تقريبًا: واجهات المستخدم، الواجهة الخلفية، أدوات التطوير، بل وحتى تطبيقات سطح المكتب والهواتف.
- هي ليست Java. أما TypeScript فهي امتداد لها يُضيف نظام أنواع ثابتًا (static types).
- للّغة بعض الغرائب التاريخية، لكن ما ستكتبه فعليًا هو جافا سكريبت الحديثة (ES2015 وما بعدها).
الخطوة التالية: تشغيل جافا سكريبت
اكتفينا من المقدمات، وحان وقت تشغيل شيفرة فعلية. سنتناول في الدرس التالي الأماكن الثلاثة التي ستُشغّل فيها شيفرة JavaScript كمبتدئ: كونسول المتصفح، ملف HTML، وسطر الأوامر عبر Node.js.
الأسئلة الشائعة
ما هي JavaScript باختصار؟
JavaScript هي لغة برمجة تعمل داخل متصفحات الويب وعلى الخوادم أيضاً (عبر Node.js). هي المسؤولة عن جعل صفحات الويب تفاعلية: الاستجابة للنقرات، تحديث محتوى الصفحة دون إعادة تحميل، وجلب البيانات من الـ APIs. وهي اللغة الوحيدة التي تعمل بشكل أصلي في كل المتصفحات.
فيم تُستخدم JavaScript؟
في كل شيء تقريباً: من تفاعلات بسيطة في الواجهة (قوائم منسدلة، التحقق من النماذج)، إلى تطبيقات ويب كاملة مثل Gmail و Figma و Notion، وخوادم خلفية (Node.js و Deno)، وتطبيقات موبايل (React Native)، وتطبيقات سطح مكتب (VS Code المبني على Electron)، وأدوات البناء. باختصار، إذا كان الأمر يتعلق بالمتصفح أو بالويب، فغالباً JavaScript موجودة في الصورة.
هل JavaScript هي نفسها Java؟
لا، لغتان مختلفتان تماماً، والتشابه في الاسم يعود لأسباب تسويقية قديمة. Java لغة ذات أنواع ثابتة (statically typed) ومبنية على الكلاسات وتعمل على الـ JVM. أما JavaScript فهي ديناميكية الأنواع وتعمل في المتصفحات و Node.js وتصميمها مختلف جذرياً. القاسم المشترك الوحيد بينهما هو أول أربعة أحرف من الاسم.
ما الفرق بين JavaScript و TypeScript؟
TypeScript هي JavaScript مضافاً إليها نظام أنواع (type system). تكتب الكود مع تحديد الأنواع (type annotations)، ويقوم مُصرِّف (compiler) بفحصها، ثم يُخرج في النهاية كوداً عادياً بلغة JavaScript. كل ملف JavaScript صالح هو أيضاً ملف TypeScript صالح. لست بحاجة لـ TypeScript كي تتعلم JavaScript، لكن معظم المشاريع الكبيرة اليوم تعتمد عليها.