Menu

الفرق بين Node.js وJavaScript

JavaScript هي اللغة، وNode.js برنامج يشغّلها خارج المتصفح. الصياغة واحدة تمامًا، لكن الكائنات العامة والواجهات المدمجة المحيطة بشيفرتك مختلفة.

تحتوي هذه الصفحة على محررات قابلة للتشغيل. حرّر، شغّل، وشاهد النتيجة فوراً.

JavaScript لغة برمجة، وNode.js بيئة تشغيل، أي برنامج يشغّل JavaScript خارج المتصفح. الصياغة والأنواع والكائنات القياسية (Array وPromise وJSON) هي نفسها في الحالتين. ما يتغير هو البيئة المحيطة بشيفرتك: يعطيك المتصفح window وdocument للتعامل مع صفحة الويب، بينما يعطيك Node.js الكائنات global وprocess وrequire ووحدات مثل fs للتعامل مع الملفات والخوادم ونظام التشغيل.

طبعت الكائنات العامة الخاصة بالمتصفح undefined، وطبعت كائنات Node.js القيمة object أو function، وطبع السطر الأخير true، لأن globalThis وglobal في Node.js هما الكائن نفسه. الصق الأسطر الستة الأولى في وحدة تحكم المتصفح وستنقلب النتائج.

الفرق في جدول واحد

JavaScript في المتصفحJavaScript في Node.js
ما هياللغة، يشغّلها محرك المتصفحاللغة نفسها، تشغّلها بيئة Node.js (V8)
الكائن العامwindowglobal
تعمل علىالصفحة: document وDOM والأحداثالجهاز: fs وhttp وprocess وos
الوحدات<script type="module"> وimportrequire (CommonJS) وimport (ES modules)
الحزمتُدمج في الصفحةتُثبَّت في node_modules عبر npm
الإدخالالنقرات والنماذج وأحداث لوحة المفاتيحوسائط سطر الأوامر والإدخال القياسي وطلبات HTTP
Array وPromise وJSON وsetTimeout وconsoleنعمنعم

صف الوحدات هو أكثر ما يربك الناس. يدعم Node.js النظامين، require وimport، بينما لا تفهم المتصفحات إلا import. تشرح صفحة CommonJS مقابل ES modules أيهما تختار.

اللغة واحدة

الدالة التي لا تستخدم إلا اللغة تعمل في أي مكان. هذا المثال لا يحتوي على شيء خاص بـ Node، وكان سيطبع الأسطر نفسها في المتصفح:

طبع {"best":95,"average":85} وPassed: 2 of 3. صياغة النشر (spread) وreduce والقوالب النصية وJSON جزء من اللغة، يحددها معيار ECMAScript، لذلك تملكها كل بيئات التشغيل.

ما لا يملكه إلا Node.js

الجزء الخاص بـ Node هو مجموعة الوحدات المدمجة والكائنات العامة التي تتعامل مع نظام التشغيل:

كتب ملفًا، ثم قرأه، وطبع .txt 2 lines، ثم قائمة فارغة من الوسائط. لا الوصول إلى الملفات ولا process.argv موجودان في المتصفح، حيث لا تستطيع الصفحة لمس القرص.

ما الميزات المتاحة من اللغة

للغة نسخ (ES2015 وES2020 وES2024 وغيرها)، وكل محرك يضيف الميزات الجديدة بوتيرته الخاصة. يأتي كل إصدار من Node.js بمحرك V8 محدد، لذلك تحدد نسخة Node.js لديك الميزات التي تعمل: Object.groupBy وArray.prototype.findLast مثلًا تحتاجان نسخة حديثة. لهذا تُدرج جداول دعم الميزات Node.js عمودًا إضافيًا بجوار Chrome وFirefox وSafari. شغّل node --version حين تفشل صياغة أحدث بخطأ SyntaxError أو حين تكون دالة ما undefined، وحدّث النسخة قبل اللجوء إلى polyfill.

كتابة شيفرة تعمل في البيئتين

يتحقق مؤلفو المكتبات أحيانًا من مكان تشغيل شيفرتهم قبل استخدام واجهة خاصة ببيئة معينة:

const isNode = typeof process !== 'undefined' && process.versions?.node != null;
const isBrowser = typeof window !== 'undefined';

تحقق من الميزة التي تحتاجها لا من اسم البيئة حين تستطيع: typeof fetch === 'function' يقول أكثر من "هل هذا Node". كلتا البيئتين تملك اليوم fetch وURL وTextEncoder وsetTimeout وstructuredClone، فصارت الشيفرة التي تحتاج تحققًا أقل مما كانت عليه قبل سنوات.

أخطاء شائعة

استخدام document أو window في سكربت Node.js. ستحصل على ReferenceError: document is not defined. مكان هذه الشيفرة هو المتصفح.

استخدام require في المتصفح. المتصفحات لا تملكها. استخدم import، أو أداة تجميع (bundler) تحوّل استدعاءات require إلى ملف واحد.

الظن أن Node.js لغة مختلفة. ليس كذلك. إذا علّمك درس JavaScript شيئًا، فهو يعمل في Node.js، إلا إذا كان يستخدم DOM.

الأسئلة الشائعة

هل يمكنني تعلّم Node.js دون تعلّم JavaScript؟

ليس فعليًا. كل سطر تكتبه في Node.js هو JavaScript، فاللغة تأتي أولًا. وبعد أن تعرف الدوال والكائنات والوعود (promises)، يصبح Node.js مجموعة من الواجهات الإضافية التي تتعلمها.

لماذا أحصل على "document is not defined" في Node.js؟

document هو DOM الخاص بالمتصفح، وNode.js لا يملك صفحة تعطيك إياه. الشيفرة التي تستخدم document أو window يجب أن تعمل في متصفح، أو في بيئة اختبار تحاكي DOM مثل jsdom.

هل TypeScript هي نفسها Node.js؟

لا. TypeScript نسخة من JavaScript بأنواع، تُترجم إلى JavaScript. يمكنك تشغيل الناتج في Node.js أو في متصفح، والنسخ الحديثة من Node.js تستطيع أيضًا تشغيل كثير من ملفات .ts مباشرة بحذف الأنواع منها.

رسم توضيحي للغات البرمجة في Coddy

تعلّم البرمجة مع Coddy

ابدأ الآن