جافا سكريبت
جافا سكريبت ( JS ) [ أ ] هي لغة برمجة وتقنية أساسية للويب ، إلى جانب HTML و CSS . أنشأها بريندان إيتش عام 1995، [ 6 ] وتتولى اللجنة الفنية TC39 التابعة لمنظمة Ecma International صيانتها، [ 10 ] بينما تتولى W3C و WHATWG صيانة واجهات برمجة تطبيقات الويب ذات الصلة . [ 11 ] اعتبارًا من عام 2025، كانت جافا سكريبت لغة البرمجة الأكثر استخدامًا على منصة GitHub . [ ب ] [ 12 ] ومع ذلك، تفوقت عليها TypeScript ، وهي نسخة من جافا سكريبت صارمة فيما يتعلق بالأنواع وتعتمد على الكتابة الثابتة، على منصة GitHub بحلول أغسطس 2025. [ 13 ]
تحتوي متصفحات الويب على محرك جافا سكريبت مخصص لتنفيذ كود العميل . تُستخدم هذه المحركات أيضًا في بعض الخوادم ومجموعة متنوعة من التطبيقات . يُعد Node.js نظام التشغيل الأكثر شيوعًا للاستخدام خارج المتصفحات . [ 14 ]
جافا سكريبت هي لغة برمجة عالية المستوى ، تُترجم غالبًا في وقت التنفيذ، وتتوافق مع معيار ECMAScript . [ 15 ] تتميز جافا سكريبت بالكتابة الديناميكية ، والبرمجة الكائنية القائمة على النماذج الأولية ، ووظائفها من الدرجة الأولى . وهي متعددة الأنماط البرمجية ، إذ تدعم أنماط البرمجة الموجهة بالأحداث ، والبرمجة الوظيفية ، والبرمجة الإجرائية . كما تحتوي على واجهات برمجة تطبيقات (APIs) للتعامل مع النصوص، والتواريخ، والتعبيرات النمطية ، وهياكل البيانات القياسية ، ونموذج كائن المستند (DOM).
لا يتضمن معيار ECMAScript أي وظائف إدخال/إخراج ، مثل الشبكات أو التخزين أو الرسومات . عمليًا، يوفر متصفح الويب أو نظام التشغيل الآخر واجهات برمجة تطبيقات JavaScript للإدخال/الإخراج.
على الرغم من أن لغتي Java و JavaScript متشابهتان في الاسم والتركيب ، إلا أن اللغتين متميزتان وتختلفان اختلافًا كبيرًا في التصميم.
تاريخ
الإبداع في نتسكيب
أُصدر متصفح Mosaic ، وهو أول متصفح ويب شائع بواجهة مستخدم رسومية ، في عام 1993. ثم أسس المطورون الرئيسيون لمتصفح Mosaic شركة Netscape ، التي أصدرت متصفحًا أكثر تطورًا، وهو Netscape Navigator ، في عام 1994. وسرعان ما أصبح هذا المتصفح الأكثر استخدامًا. [ 16 ]
خلال السنوات التكوينية للويب، كانت صفحات الويب ثابتة فقط، تفتقر إلى القدرة على التفاعل الديناميكي بعد تحميل الصفحة في المتصفح. وبرزت رغبة في أوساط مطوري الويب المزدهرة لإزالة هذا القيد، لذا قررت نتسكيب في عام ١٩٩٥ إضافة لغة برمجة إلى متصفح نافيغيتور. واتبعت الشركة مسارين لتحقيق ذلك: التعاون مع صن مايكروسيستمز لتضمين لغة جافا ، بالإضافة إلى توظيف بريندان إيتش لتضمين لغة سكيم . [ ٦ ]
كان الهدف هو ابتكار "لغة للجماهير" [ 17 ] "لمساعدة غير المبرمجين على إنشاء مواقع ويب ديناميكية وتفاعلية ". [ 18 ] سرعان ما قررت إدارة نتسكيب أن الخيار الأمثل هو أن يبتكر إيتش لغة جديدة، ذات بنية نحوية مشابهة للغة جافا وأقل شبهاً بلغة سكيم أو لغات البرمجة النصية الأخرى الموجودة . [ 5 ] [ 6 ] على الرغم من أن اللغة الجديدة وتطبيقها المفسر سُمّيا لايف سكريبت عند إصدارهما لأول مرة كجزء من نسخة تجريبية من نافيجاتور في سبتمبر 1995، فقد تم تغيير الاسم إلى جافا سكريبت للإصدار الرسمي في ديسمبر. [ 1 ] [ 6 ] [ 19 ] [ 20 ]
أثار اختيار اسم JavaScript ارتباكًا، إذ يوحي بأنه مرتبط مباشرةً بلغة Java. في ذلك الوقت، كانت طفرة شركات الإنترنت قد بدأت، وكانت Java لغة جديدة شائعة، لذا اعتبر إيتش اسم JavaScript حيلة تسويقية من Netscape. [ 17 ]
تبني مايكروسوفت
أطلقت مايكروسوفت متصفح إنترنت إكسبلورر عام 1995، مما أدى إلى حرب بين المتصفحات مع نتسكيب. أما فيما يتعلق بلغة جافا سكريبت، فقد أنشأت مايكروسوفت مترجمها الخاص المسمى JScript . [ 21 ]
أصدرت مايكروسوفت لغة جافا سكريبت لأول مرة عام ١٩٩٦، بالتزامن مع دعم مبدئي للغة CSS وامتدادات HTML . وكانت كل من هذه التطبيقات مختلفة بشكل ملحوظ عن نظيراتها في متصفح نتسكيب نافيغيتور . [ ٢٢ ] [ ٢٣ ] وقد صعّبت هذه الاختلافات على المطورين جعل مواقعهم الإلكترونية تعمل بكفاءة على كلا المتصفحين، مما أدى إلى انتشار استخدام شعارات "يُفضل عرضها في نتسكيب" و"يُفضل عرضها في إنترنت إكسبلورر" لعدة سنوات. [ ٢٢ ] [ ٢٤ ]
صعود جافا سكريبت
قال بريندان إيتش لاحقاً عن هذه الفترة: "لا تزال لغة ثانوية نوعاً ما . يُنظر إليها على أنها بطيئة أو مزعجة. يستخدم الناس النوافذ المنبثقة أو تلك الرسائل المتحركة في شريط الحالة القديم أسفل متصفحك القديم . " [ 17 ]
في نوفمبر 1996، قدمت شركة نتسكيب لغة جافا سكريبت إلى منظمة إيكما الدولية ، كنقطة انطلاق لمواصفات قياسية يمكن لجميع موردي المتصفحات الالتزام بها. وقد أدى ذلك إلى الإصدار الرسمي لأول مواصفات لغة إيكما سكريبت في يونيو 1997.
استمرت عملية وضع المعايير لعدة سنوات، مع إصدار ECMAScript 2 في يونيو 1998 وECMAScript 3 في ديسمبر 1999. بدأ العمل على ECMAScript 4 في عام 2000. [ 21 ]
إلا أن الجهود المبذولة لتوحيد اللغة بشكل كامل تقوّضت بسبب هيمنة مايكروسوفت المتزايدة على سوق المتصفحات. وبحلول أوائل العقد الأول من القرن الحادي والعشرين، بلغت حصة إنترنت إكسبلورر في السوق 95%. [ 25 ] وهذا يعني أن لغة جافا سكريبت أصبحت المعيار الفعلي لبرمجة جانب العميل على الويب.
شاركت مايكروسوفت في البداية في عملية وضع المعايير وطبقت بعض المقترحات في لغة جافا سكريبت الخاصة بها، لكنها توقفت في النهاية عن التعاون في أعمال ECMA. وهكذا تم إيقاف العمل بـ ECMAScript 4.
النمو والتوحيد القياسي
خلال فترة هيمنة إنترنت إكسبلورر في أوائل العقد الأول من القرن الحادي والعشرين، كان تطوير البرمجة النصية من جانب العميل راكدًا. بدأ هذا الوضع بالتغير في عام 2004، عندما أطلقت موزيلا ، خليفة نتسكيب، متصفح فايرفوكس . لاقى فايرفوكس استحسانًا واسعًا، واستحوذ على حصة سوقية كبيرة من إنترنت إكسبلورر. [ 26 ]
في عام ٢٠٠٥، انضمت موزيلا إلى منظمة ECMA الدولية، وبدأ العمل على معيار ECMAScript لـ XML (E4X). أدى ذلك إلى تعاون موزيلا مع ماكروميديا (التي استحوذت عليها لاحقًا شركة أدوبي سيستمز )، والتي كانت تُطبّق معيار E4X في لغة ActionScript 3 الخاصة بها، والمبنية على مسودة ECMAScript 4. كان الهدف هو توحيد ActionScript 3 لتصبح ECMAScript 4 الجديدة. ولتحقيق هذه الغاية، أصدرت أدوبي سيستمز تطبيق Tamarin كمشروع مفتوح المصدر . إلا أن Tamarin وActionScript 3 كانتا مختلفتين تمامًا عن لغات البرمجة النصية من جانب العميل، وبدون تعاون من مايكروسوفت، لم يُكتب النجاح لـ ECMAScript 4.
في غضون ذلك، شهدت مجتمعات المصادر المفتوحة غير التابعة لـ ECMA تطورات بالغة الأهمية. ففي عام ٢٠٠٥، نشر جيسي جيمس غاريت ورقة بحثية صاغ فيها مصطلح "أجاكس" ووصف مجموعة من التقنيات، التي شكلت جافا سكريبت ركيزتها الأساسية، لإنشاء تطبيقات ويب تُحمّل البيانات في الخلفية، ما يُغني عن إعادة تحميل الصفحة بالكامل. وقد أدى ذلك إلى نهضة في جافا سكريبت، قادتها مكتبات المصادر المفتوحة والمجتمعات التي نشأت حولها. وتم إنشاء العديد من المكتبات الجديدة، منها jQuery و Prototype و Dojo Toolkit و MooTools .
أطلقت جوجل متصفحها كروم عام ٢٠٠٨، مزودًا بمحرك جافا سكريبت V8 الذي كان أسرع من منافسيه. [ ٢٧ ] [ ٢٨ ] وكان الابتكار الرئيسي هو الترجمة الفورية (JIT)، [ ٢٩ ] مما استدعى قيام مطوري المتصفحات الآخرين بتحديث محركاتهم لتتوافق مع هذه التقنية. [ ٣٠ ]
في يوليو 2008، اجتمعت هذه الأطراف المتفرقة في مؤتمر بأوسلو . وأسفر ذلك عن اتفاق نهائي في أوائل عام 2009 لتوحيد جميع الأعمال ذات الصلة ودفع اللغة قُدماً. وكانت النتيجة معيار ECMAScript 5، الذي صدر في ديسمبر 2009.
بلوغ النضج
استمر العمل الطموح على اللغة لعدة سنوات، وبلغ ذروته في مجموعة واسعة من الإضافات والتحسينات التي تم إضفاء الطابع الرسمي عليها مع نشر ECMAScript 6 في عام 2015. [ 31 ]
أدى ابتكار Node.js عام 2009 على يد رايان دال إلى زيادة ملحوظة في استخدام جافا سكريبت خارج متصفحات الويب. يجمع Node بين محرك V8 وحلقة الأحداث وواجهات برمجة تطبيقات الإدخال/الإخراج ، مما يوفر نظام تشغيل جافا سكريبت مستقل. [ 32 ] [ 33 ] وبحلول عام 2018، كان ملايين المطورين يستخدمون Node، [ 34 ] وكان npm يمتلك أكبر عدد من الوحدات النمطية مقارنةً بأي مدير حزم آخر في العالم. [ 35 ]
تُدار مسودة مواصفات ECMAScript حاليًا بشكل مفتوح على GitHub ، [ 36 ] وتُصدر الإصدارات عبر لقطات سنوية منتظمة. [ 36 ] تخضع التعديلات المحتملة على اللغة لعملية اقتراح شاملة. [ 37 ] [ 38 ] الآن، بدلًا من أرقام الإصدارات، يتحقق المطورون من حالة الميزات القادمة بشكل فردي. [ 36 ]
يضم النظام البيئي الحالي للغة جافا سكريبت العديد من المكتبات والأطر البرمجية ، وممارسات برمجة راسخة، واستخدامًا واسع النطاق للغة جافا سكريبت خارج متصفحات الويب. [ 20 ] بالإضافة إلى ذلك، ومع ازدياد تطبيقات الصفحة الواحدة ومواقع الويب الأخرى التي تعتمد بشكل كبير على جافا سكريبت، تم إنشاء العديد من المترجمات البرمجية للمساعدة في عملية التطوير. [ 39 ]
اعتبارًا من عام 2025، تستخدم الغالبية العظمى من مواقع الويب (98.9%) لغة جافا سكريبت لسلوك صفحات الويب من جانب العميل . [ 40 ]
علامة تجارية
"JavaScript" هي علامة تجارية مسجلة لشركة أوراكل في الولايات المتحدة. [ 41 ] [ 42 ] وقد مُنحت العلامة التجارية في الأصل لشركة صن مايكروسيستمز في 6 مايو 1997، ثم نُقلت إلى أوراكل عندما استحوذت عليها في عام 2009. [ 43 ] [ 44 ]
في سبتمبر 2024، تم تعميم رسالة بقيادة رايان دال ، تدعو شركة أوراكل إلى تحرير علامة جافا سكريبت التجارية. [ 45 ] وكان بريندان إيتش ، المبتكر الأصلي لجافا سكريبت، من بين أكثر من 14000 موقع دعموا هذه المبادرة.
استخدام الموقع الإلكتروني من جانب العميل
تُعدّ جافا سكريبت لغة البرمجة النصية السائدة من جانب العميل على الويب، حيث تستخدمها 99% من جميع مواقع الويب لهذا الغرض. [ 40 ] تُضمّن البرامج النصية في مستندات HTML أو تُستَخدَم منها ، وتتفاعل مع نموذج كائن المستند (DOM) .
تحتوي جميع متصفحات الويب الرئيسية على محرك جافا سكريبت مدمج يقوم بتنفيذ التعليمات البرمجية على جهاز المستخدم.
أمثلة على السلوك المبرمج
- تحميل محتوى جديد لصفحة الويب دون إعادة تحميل الصفحة، عبر تقنية Ajax أو WebSocket . على سبيل المثال، يمكن لمستخدمي وسائل التواصل الاجتماعي إرسال واستقبال الرسائل دون مغادرة الصفحة الحالية.
- الرسوم المتحركة لصفحات الويب، مثل إظهار وإخفاء العناصر، وتغيير حجمها، ونقلها.
- لعب ألعاب المتصفح .
- التحكم في تشغيل الوسائط المتدفقة .
- إنشاء إعلانات منبثقة أو مربعات تنبيه.
- التحقق من صحة قيم الإدخال في نموذج الويب قبل إرسال البيانات إلى خادم الويب .
- يتم تسجيل بيانات حول سلوك المستخدم ثم إرسالها إلى خادم. يمكن لمالك الموقع الإلكتروني استخدام هذه البيانات لأغراض التحليل وتتبع الإعلانات وتخصيص المحتوى .
- إعادة توجيه المستخدم إلى صفحة أخرى.
- تخزين واسترجاع البيانات على جهاز المستخدم، عبر معايير التخزين أو IndexedDB .
المكتبات والأطر
تستخدم أكثر من 80% من مواقع الويب مكتبة جافا سكريبت أو إطار عمل ويب تابع لجهة خارجية كجزء من برمجة جانب العميل. [ 46 ]
يُعدّ jQuery الأكثر استخدامًا بلا منازع. [ 46 ] ومن بين المكتبات البارزة الأخرى Angular و Bootstrap و Lodash و Modernizr و React و Underscore و Vue . [ 46 ] ويمكن استخدام خيارات متعددة معًا، مثل jQuery وBootstrap. [ 47 ]
ومع ذلك، فقد صِيغ مصطلح "Vanilla JS" للإشارة إلى المواقع الإلكترونية التي لا تستخدم أي مكتبات أو أطر عمل على الإطلاق، بل تعتمد كلياً على وظائف جافا سكريبت القياسية. [ 48 ]
استخدامات أخرى
تجاوز استخدام جافا سكريبت جذوره في متصفحات الويب . أصبحت محركات جافا سكريبت الآن مدمجة في مجموعة متنوعة من أنظمة البرمجيات الأخرى، سواء لنشر مواقع الويب من جانب الخادم أو التطبيقات غير المتصفحية .
كانت المحاولات الأولى لتعزيز استخدام جافا سكريبت من جانب الخادم هي خادم نتسكيب إنتربرايز وخدمات معلومات الإنترنت من مايكروسوفت ، [ 49 ] [ 50 ] لكنها كانت محدودة الانتشار. [ 51 ] بدأ استخدام جافا سكريبت من جانب الخادم بالنمو في أواخر العقد الأول من الألفية الثانية، مع ظهور Node.js وأساليب أخرى . [ 51 ]
استُخدمت أطر عمل التطبيقات Electron و Cordova و React Native وغيرها لإنشاء العديد من التطبيقات التي تُنفَّذ وظائفها باستخدام JavaScript. وتشمل التطبيقات الأخرى غير المتصفحية دعم Adobe Acrobat لكتابة نصوص برمجية لمستندات PDF [ 52 ] ، وامتدادات GNOME Shell المكتوبة بلغة JavaScript [ 53 ] .
كانت أوراكل تُوفر سابقًا مُفسِّر جافا سكريبت Nashorn كجزء من مكتبة واجهة برمجة تطبيقات Java Development Kit (JDK)، إلى جانب مُفسِّر سطر الأوامر jjs، وذلك بدءًا من الإصدار 8 من JDK. وقد أُزيل Nashorn في الإصدار 15 من JDK. وكبديل، قدمت أوراكل GraalJS، الذي يُمكن استخدامه أيضًا مع OpenJDK، مما يسمح بإنشاء كائنات جافا والإشارة إليها في كود جافا سكريبت، وإضافة برمجة نصية وقت التشغيل بلغة جافا سكريبت إلى التطبيقات المكتوبة بلغة جافا. [ 54 ] [ 55 ] [ 56 ] [ 57 ]
تم استخدام جافا سكريبت في بعض الأنظمة المدمجة ، عادةً من خلال الاستفادة من Node.js. [ 58 ] [ 59 ] [ 60 ]
تنفيذ
محرك جافا سكريبت
كانت محركات جافا سكريبت الأولى عبارة عن مترجمات لشفرة المصدر ، لكن المحركات الحديثة تستخدم الترجمة الفورية لتحسين الأداء. [ 61 ] عادةً ما تُطوَّر محركات جافا سكريبت من قِبل مُصنِّعي متصفحات الويب ، ويحتوي كل متصفح رئيسي على واحد منها. في المتصفح، يعمل محرك جافا سكريبت بالتزامن مع محرك العرض عبر نموذج كائن المستند (DOM) وروابط Web IDL . [ 62 ] مع ذلك، لا يقتصر استخدام محركات جافا سكريبت على المتصفحات؛ على سبيل المثال، يُعد محرك V8 مكونًا أساسيًا لنظام تشغيل Node.js. [ 63 ] تُسمى أيضًا محركات ECMAScript ، نسبةً إلى الاسم الرسمي للمواصفات. مع ظهور WebAssembly ، يُمكن لبعض المحركات أيضًا تنفيذ هذه الشفرة في نفس بيئة الحماية (Sandbox) الخاصة بشفرة جافا سكريبت العادية. [ 64 ] [ 63 ]
نظام التشغيل
يجب تضمين محرك جافا سكريبت ضمن نظام تشغيل (مثل متصفح ويب أو نظام مستقل) لتمكين البرامج النصية من التفاعل مع البيئة المحيطة. يتضمن نظام التشغيل واجهات برمجة التطبيقات اللازمة لعمليات الإدخال والإخراج ، مثل الشبكات والتخزين والرسومات ، ويوفر إمكانية استيراد البرامج النصية.
جافا سكريبت لغة أحادية الخيوط . تعالج بيئة التشغيل الرسائل من قائمة انتظار واحدة تلو الأخرى، وتستدعي دالةً مرتبطةً بكل رسالة جديدة، مما يُنشئ إطار مكدس استدعاءات يتضمن وسائط الدالة ومتغيراتها المحلية . يتقلص مكدس الاستدعاءات ويتوسع بناءً على احتياجات الدالة. عندما يصبح مكدس الاستدعاءات فارغًا عند اكتمال الدالة، تنتقل جافا سكريبت إلى الرسالة التالية في قائمة الانتظار. يُسمى هذا حلقة الأحداث ، ويُوصف بأنه "تشغيل حتى الاكتمال" لأن كل رسالة تُعالج بالكامل قبل النظر في الرسالة التالية. مع ذلك، يصف نموذج التزامن في اللغة حلقة الأحداث بأنها غير حظرية : تُنفذ عمليات الإدخال والإخراج للبرنامج باستخدام الأحداث ودوال الاستدعاء . هذا يعني، على سبيل المثال، أن جافا سكريبت يمكنها معالجة نقرة الماوس أثناء انتظار استعلام قاعدة البيانات لإرجاع المعلومات. [ 65 ]
سمات
تشترك جميع تطبيقات ECMAScript المتوافقة في الميزات التالية، ما لم يُنص صراحةً على خلاف ذلك. يتراوح عدد الكلمات المحجوزة المذكورة، بما في ذلك الكلمات المفتاحية، بين 50 و60 كلمة، ويختلف هذا العدد باختلاف التطبيق.
أمر حتمي ومنظم
تدعم لغة جافا سكريبت معظم قواعد البرمجة الهيكلية من لغة C (مثل ifالعبارات، whileوالحلقات، switchوالعبارات، do whileوالحلقات، إلخ). ويُستثنى من ذلك جزئيًا نطاق الدوال : ففي الأصل، كانت جافا سكريبت تدعم نطاق الدوال فقط ؛ بينماvar أُضيف نطاق الكتل في معيار ECMAScript 2015 باستخدام الكلمتين المفتاحيتين ` include`let و`include` const. وكما هو الحال في لغة C، تُميّز جافا سكريبت بين التعبيرات والعبارات . ومن الاختلافات النحوية بينها وبين لغة C هو الإدراج التلقائي للفاصلة المنقوطة ، مما يسمح بحذفها (التي تُنهي العبارات). [ 66 ]
كتابة ضعيفة
لغة جافا سكريبت ذات كتابة ضعيفة ، مما يعني أنه يتم تحويل أنواع معينة ضمنيًا اعتمادًا على العملية المستخدمة. [ 67 ]
- يقوم عامل التحويل الثنائي
+بتحويل كلا المعاملين إلى سلسلة نصية ما لم يكن كلا المعاملين رقمين. وذلك لأن عامل الجمع يعمل أيضاً كعامل ربط. - يقوم عامل التشغيل الثنائي
-دائمًا بتحويل كلا المعاملين إلى رقم. - كلا المعاملين الأحاديين (
+،-) يحولان المعامل دائمًا إلى عدد. ومع ذلك،+يحول دائمًا إلىNumber( binary64 ) بينما-يحافظ علىBigInt( integer ) [ 68 ]
يتم تحويل القيم إلى سلاسل نصية على النحو التالي: [ 67 ]
- تُترك الأوتار كما هي
- يتم تحويل الأرقام إلى تمثيلها النصي
- يتم تحويل عناصر المصفوفات إلى سلاسل نصية، ثم يتم ربطها بفواصل (
,). - يتم تحويل الكائنات الأخرى إلى سلسلة نصية
[object Object]حيثObjectيمثل اسم مُنشئ الكائن
يتم تحويل القيم إلى أرقام عن طريق تحويلها إلى سلاسل نصية، ثم تحويل السلاسل النصية إلى أرقام. ويمكن تعديل هذه العمليات بتعريف toStringدوال valueOfفي النموذج الأولي لتحويل السلاسل النصية والأرقام على التوالي.
تعرضت لغة جافا سكريبت لانتقادات بسبب طريقة تنفيذها لهذه التحويلات، إذ قد يُساء فهم تعقيد القواعد على أنه تناقض. [ 69 ] [ 67 ] على سبيل المثال، عند إضافة عدد إلى سلسلة نصية، يتم تحويل العدد إلى سلسلة نصية قبل إجراء عملية الدمج، ولكن عند طرح عدد من سلسلة نصية، يتم تحويل السلسلة النصية إلى عدد قبل إجراء عملية الطرح.
| المعامل الأيسر | مشغل | المعامل الأيمن | نتيجة |
|---|---|---|---|
[](مصفوفة فارغة) | + | [](مصفوفة فارغة) | ""(سلسلة فارغة) |
[](مصفوفة فارغة) | + | {}(كائن فارغ) | "[object Object]"(خيط) |
false(منطقي) | + | [](مصفوفة فارغة) | "false"(خيط) |
"123"(خيط) | + | 1(رقم) | "1231"(خيط) |
"123"(خيط) | - | 1(رقم) | 122(رقم) |
"123"(خيط) | - | "abc"(خيط) | NaN(رقم) |
يُشار غالبًا إلى أن {} + []النتيجة هي 0(عدد). وهذا مُضلل: إذ {}يُفسَّر التعبير على أنه كتلة برمجية فارغة بدلًا من كائن فارغ، ويتم تحويل المصفوفة الفارغة إلى عدد بواسطة +المعامل الأحادي المتبقي. إذا وُضِع التعبير بين قوسين - ({} + [])تُفسَّر الأقواس المعقوفة على أنها كائن فارغ، وتكون نتيجة التعبير "[object Object]"كما هو متوقع. [ 67 ]
متحرك
الكتابة
تُعتبر لغة جافا سكريبت لغة برمجة ديناميكية الكتابة، مثل معظم لغات البرمجة النصية الأخرى . يرتبط النوع بقيمة وليس بتعبير. على سبيل المثال، قد يُعاد تعيين متغير مرتبط في البداية برقم إلى سلسلة نصية . [ 70 ] تدعم جافا سكريبت طرقًا متنوعة لاختبار نوع الكائنات، بما في ذلك الكتابة الديناميكية . [ 71 ]
التقييم أثناء التشغيل
تتضمن لغة جافا سكريبت evalدالة يمكنها تنفيذ العبارات المقدمة كسلاسل نصية في وقت التشغيل.
البرمجة الكائنية (القائمة على النموذج الأولي)
يصف دوغلاس كروكفورد التوريث النموذجي في جافا سكريبت على النحو التالي:
تقوم بإنشاء نماذج أولية للكائنات، ثم... تُنشئ نسخًا جديدة منها. الكائنات قابلة للتغيير في جافا سكريبت، لذا يُمكننا إضافة خصائص جديدة إلى النسخ الجديدة، ومنحها حقولًا وأساليب جديدة. يُمكن لهذه النسخ الجديدة أن تعمل كنماذج أولية لكائنات أحدث. لسنا بحاجة إلى فئات لإنشاء العديد من الكائنات المتشابهة... الكائنات ترث من كائنات أخرى. أي شيء يُمكن أن يكون أكثر توجهاً نحو الكائنات من ذلك؟ [ 72 ]
في جافا سكريبت، الكائن عبارة عن مصفوفة ترابطية مُعززة بنموذج أولي (انظر أدناه)؛ يُمثل كل مفتاح اسم خاصية من خصائص الكائن ، وهناك طريقتان لتكوين هذا الاسم: طريقة النقطة ( obj.x = 10) وطريقة الأقواس ( obj["x"] = 10). يمكن إضافة خاصية أو إعادة ربطها أو حذفها أثناء التشغيل. يمكن تعداد معظم خصائص الكائن (وأي خاصية تنتمي إلى سلسلة وراثة النموذج الأولي للكائن) باستخدام for...inحلقة تكرارية.
النماذج الأولية
تستخدم جافا سكريبت النماذج الأولية (Prototypes) بينما تستخدم العديد من لغات البرمجة الكائنية الأخرى الأصناف (Classs) للتوريث ، [ 73 ] ومع ذلك، لا يزال من الممكن محاكاة معظم ميزات الأصناف باستخدام نظام النماذج الأولية. [ 74 ] بالإضافة إلى ذلك، قدمت ECMAScript الإصدار 6 (الذي صدر في يونيو 2015) الكلمات المفتاحية class و extends و super ، والتي تُعدّ اختصارًا برمجيًا لتجريد نظام التوريث القائم على النماذج الأولية بواجهة أكثر تقليدية. يتم تعريف الدوال البانية (Bindules) بتحديد دالة باسم constructor ، وتُعتبر جميع الأصناف تلقائيًا أصنافًا فرعية من الصنف الأساسي Object، على غرار جافا.
class Person { constructor ( name ) { this . name = name ; } }class Student extends Person { constructor ( name , id ) { super ( name ); this . id = id ; } }const bob = new Student ( "Robert " , 12345 ) ; console.log ( bob.name ) ; // روبرتعلى الرغم من أن آلية الكائنات الأساسية لا تزال تعتمد على النماذج الأولية، إلا أن الصيغة الجديدة مشابهة للغات البرمجة الكائنية الأخرى. تُعلن المتغيرات الخاصة بإضافة علامة (#) قبل اسم الحقل، ولا يُدعم تعدد الأشكال بشكل مباشر، مع أنه يمكن محاكاته باستدعاء دوال مختلفة يدويًا بناءً على عدد ونوع الوسائط المُقدمة. [ 75 ]
الدوال كمنشئات للكائنات
تُستخدم الدوال أيضًا كدوال إنشاء للكائنات، بالإضافة إلى وظيفتها المعتادة. يؤدي إضافة البادئة ` new` إلى استدعاء الدالة إلى إنشاء نسخة من النموذج الأولي، مع وراثة الخصائص والأساليب من الدالة البانية (بما في ذلك خصائص النموذج Objectالأولي). [ 76 ] يوفر ECMAScript 5 Object.createالأسلوب `new`، مما يسمح بإنشاء نسخة بشكل صريح دون وراثة النموذج Objectالأولي تلقائيًا (يمكن للبيئات القديمة تعيين النموذج الأولي إلى ` nullnew`). [ 77 ] تحدد خاصية الدالة البانية prototypeالكائن المستخدم للنموذج الأولي الداخلي للكائن الجديد. يمكن إضافة أساليب جديدة عن طريق تعديل النموذج الأولي للدالة المستخدمة كدالة بانية.
// هذا الكود مكافئ تمامًا للمقطع السابق function Person ( name ) { this . name = name ; }دالة الطالب ( الاسم ، المعرف ) { الشخص . استدعاء ( هذا ، الاسم )؛ هذا . المعرف = المعرف ؛ }var bob = new Student ( "Robert " , 12345 ) ; console.log ( bob.name ) ; // روبرتتحتوي الفئات المدمجة في جافا سكريبت، مثل `<script>` Arrayو` Object<script>`، على نماذج أولية قابلة للتعديل. ومع ذلك، يُعتبر تعديل الكائنات المدمجة ممارسة سيئة بشكل عام ، لأن التعليمات البرمجية الخارجية قد تستخدم أو ترث طرقًا وخصائص من هذه الكائنات، وقد لا تتوقع تعديل النموذج الأولي. [ 78 ]
الوظائف كطرق
على عكس العديد من لغات البرمجة كائنية التوجه، لا يوجد في جافا سكريبت تمييز بين تعريف الدالة وتعريف الأسلوب . بل يظهر هذا التمييز أثناء استدعاء الدالة. فعند استدعاء دالة كأسلوب لكائن، يتم ربط الكلمة المفتاحية المحلية this الخاصة بالدالة بذلك الكائن في تلك الاستدعاء.
وظيفي
تُعتبر دوال جافا سكريبت من الدرجة الأولى ؛ إذ تُعتبر الدالة كائنًا. [ 79 ] وبناءً على ذلك، قد تحتوي الدالة على خصائص وأساليب، .call()مثل [ 80 ].bind() .
الإغلاق المعجمي
الدالة المتداخلة هي دالة مُعرَّفة داخل دالة أخرى. ويتم إنشاؤها في كل مرة يتم فيها استدعاء الدالة الخارجية.
بالإضافة إلى ذلك، تشكل كل دالة متداخلة إغلاقًا معجميًا : يصبح النطاق المعجمي للدالة الخارجية (بما في ذلك أي ثابت أو متغير محلي أو قيمة وسيط) جزءًا من الحالة الداخلية لكل كائن دالة داخلية، حتى بعد انتهاء تنفيذ الدالة الخارجية. [ 81 ]
وظيفة مجهولة المصدر
يدعم جافا سكريبت أيضًا الدوال المجهولة .
المندوب
يدعم جافا سكريبت التفويض الضمني والصريح .
الوظائف كأدوار (سمات ومزيجات)
تدعم لغة جافا سكريبت بشكلٍ أصليّ العديد من تطبيقات أنماط الأدوار [ 82 ] القائمة على الدوال ، مثل السمات [ 83 ] [ 84 ] والمزيجات [ 85 ] . تُعرّف هذه الدالة سلوكًا إضافيًا من خلال طريقة واحدة على الأقل مرتبطة بالكلمة المفتاحية ضمن جسمها. بعد ذلك، يجب تفويض الدور صراحةً عبر أو إلى الكائنات التي تحتاج إلى تضمين سلوك إضافي غير مُشارك عبر سلسلة النموذج الأولي.thisfunctioncallapply
تكوين الكائنات وتوريثها
بينما يغطي التفويض الصريح القائم على الدوال عملية التركيب في جافا سكريبت، فإن التفويض الضمني يحدث تلقائيًا في كل مرة يتم فيها تتبع سلسلة النموذج الأولي، على سبيل المثال، للعثور على دالة قد تكون مرتبطة بكائن ما ولكنها ليست مملوكة له مباشرةً. بمجرد العثور على الدالة، يتم استدعاؤها ضمن سياق هذا الكائن. وبالتالي، فإن الوراثة في جافا سكريبت مغطاة بآلية تفويض تلقائية مرتبطة بخاصية النموذج الأولي لدوال البناء.
متنوع
الترقيم يبدأ من الصفر
لغة جافا سكريبت هي لغة ذات فهرس صفري .
الدوال المتغيرة
يمكن تمرير عدد غير محدود من المعاملات إلى الدالة. ويمكن للدالة الوصول إليها عبر المعاملات الرسمية ، وكذلك عبر argumentsالكائن المحلي. كما يمكن إنشاء دوال متعددة المعاملات باستخدام هذه bindالطريقة.
المصفوفات والكائنات الحرفية
كما هو الحال في العديد من لغات البرمجة النصية، يمكن إنشاء المصفوفات والكائنات ( المصفوفات الترابطية في لغات أخرى) باستخدام صيغة مختصرة وموجزة. في الواقع، تُشكل هذه القيم الحرفية أساس تنسيق بيانات JSON .
التعبيرات النمطية
تدعم لغة جافا سكريبت التعابير النمطية للبحث عن النصوص ومعالجتها. [ 76 ] : 139
وعود
يُوفّر كائن Promise المُدمج وظائف للتعامل مع الوعود وربط المعالجات بالنتيجة النهائية لإجراء غير متزامن. كما تُوفّر لغة JavaScript دوالًا مُدمجة، تُتيح للمطورين دمج وعود JavaScript مُتعددة وإجراء عمليات بناءً على سيناريوهات مُختلفة. هذه الدوال هي: Promise.race و Promise.all و Promise.allSettled و Promise.any.
Async/await
تتيح تقنية Async/await إمكانية هيكلة الدوال غير المتزامنة وغير الحظرية بطريقة مشابهة للدوال المتزامنة العادية. ويمكن كتابة التعليمات البرمجية غير المتزامنة وغير الحظرية، بأقل قدر من التكاليف الإضافية، بطريقة مشابهة للتعليمات البرمجية المتزامنة والحظرية التقليدية.
ملحقات خاصة بالبائع
تاريخياً، دعمت بعض محركات جافا سكريبت هذه الميزات غير القياسية:
- فهم المصفوفات وتعبيرات المولدات (مثل بايثون)
- تعبيرات وظيفية موجزة (
function(args) expr؛ هذا التركيب التجريبي كان موجودًا قبل دوال السهم) - ECMAScript for XML (E4X)، وهو امتداد يضيف دعم XML أصلي إلى ECMAScript (غير مدعوم في Firefox منذ الإصدار 21 [ 86 ] )
بناء الجملة
يمكن تعريف المتغيراتvar في جافا سكريبت باستخدام الكلمات المفتاحية ` <var> ` أو let` <var> ` أو const` <var> ` . أما المتغيرات التي تُعرَّف بدون كلمات مفتاحية، فسيتم تعريفها على مستوى النطاق العام.
تم تقديم دوال الأسهم لأول مرة في الإصدار السادس من معيار ECMAScript لعام 2015. وهي تُسهّل كتابة الدوال في جافا سكريبت. دوال الأسهم مجهولة المصدر ، لذا يلزم وجود متغير للإشارة إليها لاستدعائها بعد إنشائها، إلا إذا كانت محاطة بأقواس ويتم تنفيذها فورًا.
إليك مثال على بناء جملة جافا سكريبت.
// يُعلن عن متغير ضمن نطاق الدالة باسم `x`، ويُسند إليه ضمنيًا القيمة الخاصة `undefined`. // تُعيّن المتغيرات التي ليس لها قيمة تلقائيًا إلى undefined. // يُعتبر استخدام var ممارسة سيئة بشكل عام، ويُفضّل استخدام let و const عادةً. var x ;// يمكن تعيين المتغيرات يدويًا إلى `undefined` كما يلي: let x2 = undefined ;// يُعلن عن متغير ذي نطاق كتلة باسم `y`، ويُعيّن قيمته ضمنيًا إلى // `undefined`. تم تقديم الكلمة المفتاحية `let` في ECMAScript 2015. let y ;// يُعلن عن متغير ذي نطاق كتلة، غير قابل لإعادة التعيين، يُسمى `z`، ويُعيّن قيمته إلى // سلسلة نصية حرفية. تم تقديم الكلمة المفتاحية `const` أيضًا في ECMAScript 2015، // ويجب تعيينها صراحةً.// الكلمة المفتاحية `const` تعني ثابت، وبالتالي لا يمكن إعادة تعيين قيمة المتغير // لأن القيمة ثابتة. const z = "لا يمكن إعادة تعيين هذه القيمة!" ;// يُعلن عن متغير ذي نطاق عام ويُسند إليه القيمة 3. يُعتبر هذا عمومًا // ممارسة سيئة، ولن يعمل إذا كان الوضع الصارم مُفعّلاً. t = 3 ;// يُعلن عن متغير باسم `myNumber`، ويُسند إليه قيمة عددية ثابتة (القيمة // `2`). let myNumber = 2 ;// يُعيد تعيين قيمة `myNumber` إلى سلسلة نصية حرفية (القيمة "foo"). // جافا سكريبت لغة ذات كتابة ديناميكية، لذا فهذا مسموح. myNumber = "foo" ;لاحظ التعليقات في الأمثلة أعلاه، والتي سبقتها جميعها شرطتان مائلتان للأمام .
يمكن العثور على المزيد من الأمثلة في صفحة Wikibooks الخاصة بأمثلة بناء جملة JavaScript .
حماية
تُتيح لغة جافا سكريبت ونموذج كائن المستند (DOM) للمطورين إمكانية نشر برامج نصية لتشغيلها على أجهزة المستخدمين عبر الإنترنت. ويُقلل مطورو المتصفحات من هذا الخطر باستخدام قيدين: أولًا، تعمل البرامج النصية في بيئة معزولة (Sandbox) حيث تقتصر وظائفها على مهام الويب فقط، وليس مهام البرمجة العامة كإنشاء الملفات. ثانيًا، تخضع البرامج النصية لسياسة المصدر نفسه : فلا يمكن للبرامج النصية من موقع ويب معين الوصول إلى معلومات مثل أسماء المستخدمين أو كلمات المرور أو ملفات تعريف الارتباط المُرسلة إلى موقع آخر. وتُعدّ معظم الثغرات الأمنية المتعلقة بجافا سكريبت ناتجة عن خرق إما لسياسة المصدر نفسه أو لبيئة الحماية المعزولة.
توجد مجموعات فرعية من لغة جافا سكريبت العامة - مثل ADsafe و Secure ECMAScript (SES) - توفر مستويات أمان أعلى، خاصةً على التعليمات البرمجية التي أنشأتها جهات خارجية (مثل الإعلانات). [ 90 ] [ 91 ] وتُعدّ Closure Toolkit مشروعًا آخر للتضمين الآمن وعزل جافا سكريبت و HTML من جهات خارجية. [ 92 ]
تُعد سياسة أمان المحتوى الطريقة الرئيسية المقصودة لضمان تنفيذ التعليمات البرمجية الموثوقة فقط على صفحة الويب.
البرمجة النصية عبر المواقع
تُعدّ ثغرة البرمجة النصية عبر المواقع (XSS) من المشاكل الأمنية الشائعة المرتبطة بلغة جافا سكريبت ، وهي انتهاك لسياسة المصدر نفسه . تحدث ثغرات XSS عندما يتمكن المهاجم من التسبب في تضمين موقع ويب مستهدف، كموقع مصرفي إلكتروني مثلاً، لبرمجية خبيثة في الصفحة المعروضة للضحية. في هذا المثال، تستطيع البرمجية الوصول إلى تطبيق البنك بصلاحيات الضحية، مما قد يؤدي إلى كشف معلومات سرية أو تحويل أموال دون إذنها. يُعدّ تنظيف كود HTML أحد الحلول المهمة لثغرات XSS .
تتضمن بعض المتصفحات حماية جزئية ضد هجمات XSS الانعكاسية ، حيث يُقدّم المهاجم عنوان URL يحتوي على برمجيات خبيثة. مع ذلك، حتى مستخدمو هذه المتصفحات معرضون لهجمات XSS أخرى، مثل تلك التي تُخزّن فيها الشيفرة الخبيثة في قاعدة بيانات. ولا يُمكن منع هجمات XSS بشكل كامل إلا من خلال تصميم تطبيقات الويب بشكل صحيح على جانب الخادم.
يمكن أن تحدث ثغرات XSS أيضًا بسبب أخطاء في التنفيذ من قبل مطوري المتصفحات. [ 93 ]
تزوير الطلبات عبر المواقع
من الثغرات الأمنية الأخرى التي تُعرَّف بأنها هجمات تزوير الطلبات عبر المواقع (CSRF). في هذه الهجمات، يقوم كود برمجي على موقع المهاجم بخداع متصفح الضحية لحمله على تنفيذ إجراءات لم يقصدها المستخدم على الموقع المستهدف (مثل تحويل الأموال في أحد البنوك). عندما تعتمد المواقع المستهدفة كليًا على ملفات تعريف الارتباط للتحقق من صحة الطلبات، يمكن للطلبات الصادرة من كود برمجي على موقع المهاجم أن تحمل نفس بيانات تسجيل الدخول الصحيحة للمستخدم المُرسِل. عمومًا، يكمن حل CSRF في اشتراط وجود قيمة مصادقة في حقل نموذج مخفي، وليس فقط في ملفات تعريف الارتباط، للتحقق من صحة أي طلب قد يكون له آثار طويلة الأمد. كما يُمكن أن يُساعد فحص رأس HTTP Referrer في حل هذه المشكلة.
يُعدّ "اختطاف جافا سكريبت" نوعًا من هجمات تزوير الطلبات عبر المواقع (CSRF)، حيث <script>يستغلّ وسمٌ على موقع المهاجم صفحةً على موقع الضحية تُعيد معلوماتٍ خاصة، مثل بيانات JSON أو جافا سكريبت. وتشمل الحلول الممكنة ما يلي:
ثقة في غير محلها بالعميل
يجب على مطوري تطبيقات العميل والخادم إدراك أن العملاء غير الموثوق بهم قد يكونون تحت سيطرة المهاجمين. لا ينبغي لمطور التطبيق أن يفترض أن كود جافا سكريبت الخاص به سيعمل كما هو مُخطط له (أو حتى يعمل على الإطلاق)، لأن أي سر مُضمن في الكود قد يتم استخراجه من قِبل مُهاجم مُصمم. ومن بين التداعيات ما يلي:
- لا يستطيع مطورو المواقع الإلكترونية إخفاء طريقة عمل جافا سكريبت الخاصة بهم بشكل كامل، لأن شفرة المصدر الخام يجب إرسالها إلى المستخدم. يمكن تشفير الشفرة ، ولكن يمكن عكس هندسة التشفير.
- لا يوفر التحقق من صحة نماذج جافا سكريبت سوى سهولة الاستخدام للمستخدمين، وليس الأمان. إذا كان الموقع يتحقق من موافقة المستخدم على شروط الخدمة، أو يقوم بتصفية الأحرف غير الصالحة من الحقول التي يجب أن تحتوي على أرقام فقط، فيجب أن يتم ذلك على الخادم، وليس فقط على جهاز المستخدم.
- يمكن تعطيل البرامج النصية بشكل انتقائي، لذا لا يمكن الاعتماد على جافا سكريبت لمنع عمليات مثل النقر بزر الماوس الأيمن على صورة لحفظها. [ 94 ]
- يُعتبر تضمين المعلومات الحساسة مثل كلمات المرور في جافا سكريبت ممارسة سيئة للغاية لأنه يمكن استخراجها من قبل المهاجم. [ 95 ]
- يُعد تلوث النموذج الأولي ثغرة أمنية في وقت التشغيل حيث يمكن للمهاجمين الكتابة فوق خصائص عشوائية في النموذج الأولي للكائن.
ثقة في غير محلها في المطورين
تحظى أنظمة إدارة الحزم مثل npm وBower بشعبية واسعة بين مطوري جافا سكريبت. تُمكّن هذه الأنظمة المطورين من إدارة تبعيات برامجهم بسهولة، والتي تعتمد على مكتبات برامج مطورين آخرين. يثق المطورون بأن القائمين على صيانة هذه المكتبات سيحافظون على أمانها وتحديثها، ولكن هذا ليس هو الحال دائمًا. وقد ظهرت ثغرة أمنية نتيجةً لهذه الثقة العمياء. إذ قد تُصدر المكتبات التي يُعتمد عليها إصدارات جديدة تُسبب ظهور أخطاء أو ثغرات أمنية في جميع البرامج التي تعتمد عليها. في المقابل، قد تبقى مكتبة ما دون تحديث، مع وجود ثغرات أمنية معروفة منتشرة. في دراسة أُجريت على عينة من 133,000 موقع ويب، وجد الباحثون أن 37% من المواقع تتضمن مكتبة بها ثغرة أمنية واحدة على الأقل معروفة. [ 96 ] "يبلغ متوسط التأخير بين أقدم إصدار من المكتبة المستخدمة في كل موقع وأحدث إصدار متاح منها 1,177 يومًا في ALEXA، وقد توقف تطوير بعض المكتبات التي لا تزال قيد الاستخدام النشط منذ سنوات." [ ٩٦ ] ثمة احتمال آخر يتمثل في قيام القائم على صيانة مكتبة ما بإزالتها بالكامل. وقد حدث هذا في مارس ٢٠١٦ عندما أزال أزر كوتشولو مستودعه من npm. وتسبب ذلك في تعطل عشرات الآلاف من البرامج والمواقع الإلكترونية التي تعتمد على مكتباته. [ ٩٧ ] [ ٩٨ ]
أخطاء في برمجة المتصفح والمكونات الإضافية
توفر لغة جافا سكريبت واجهة لمجموعة واسعة من إمكانيات المتصفح، والتي قد تحتوي بعضها على ثغرات مثل تجاوز سعة المخزن المؤقت . تسمح هذه الثغرات للمهاجمين بكتابة برامج نصية تُشغّل أي كود يرغبون فيه على نظام المستخدم. ولا يقتصر هذا الكود بأي حال من الأحوال على تطبيقات جافا سكريبت الأخرى. على سبيل المثال، يمكن لاستغلال ثغرة تجاوز سعة المخزن المؤقت أن يسمح للمهاجم بالوصول إلى واجهة برمجة تطبيقات نظام التشغيل بصلاحيات المستخدم المتميز.
وقد أثرت هذه العيوب على متصفحات رئيسية بما في ذلك فايرفوكس، [ 99 ] وإنترنت إكسبلورر، [ 100 ] وسفاري. [ 101 ]
قد تحتوي الإضافات، مثل مشغلات الفيديو، وبرنامج أدوبي فلاش ، ومجموعة واسعة من عناصر تحكم ActiveX المُفعّلة افتراضيًا في متصفح مايكروسوفت إنترنت إكسبلورر، على ثغرات يمكن استغلالها عبر جافا سكريبت (وقد تم استغلال هذه الثغرات في الماضي). [ 102 ] [ 103 ]
في نظام التشغيل ويندوز فيستا، حاولت مايكروسوفت الحد من مخاطر الأخطاء البرمجية مثل تجاوز سعة المخزن المؤقت عن طريق تشغيل عملية إنترنت إكسبلورر بصلاحيات محدودة. [ 104 ] وبالمثل، يحصر جوجل كروم عارضات صفحاته في " بيئة معزولة " خاصة به.
أخطاء في تنفيذ بيئة الاختبار المعزولة
تستطيع متصفحات الويب تشغيل جافا سكريبت خارج بيئة الحماية، مع منحها الصلاحيات اللازمة، على سبيل المثال، لإنشاء الملفات أو حذفها. ولا يُقصد منح هذه الصلاحيات للبرامج الموجودة على الويب.
ساهم منح صلاحيات غير صحيحة لجافا سكريبت من الإنترنت في ظهور ثغرات أمنية في كل من متصفح إنترنت إكسبلورر [ 105 ] ومتصفح فايرفوكس [ 106 ] . وفي نظام التشغيل ويندوز إكس بي، حزمة الخدمة الثانية، خفضت مايكروسوفت صلاحيات جافا سكريبت في متصفح إنترنت إكسبلورر [ 107 ] .
يسمح نظام التشغيل مايكروسوفت ويندوز بتشغيل ملفات جافا سكريبت الموجودة على القرص الصلب للحاسوب كبرامج عامة الأغراض وغير معزولة (انظر: Windows Script Host ). وهذا يجعل جافا سكريبت (مثل VBScript ) وسيلةً محتملةً نظريًا لبرامج التجسس الخبيثة ، على الرغم من أن برامج التجسس الخبيثة المكتوبة بلغة جافا سكريبت نادرة في الواقع العملي. [ 108 ]
ثغرات أمنية في الأجهزة
في عام 2015، وصف باحثون أمنيون في ورقة بحثية تطبيقًا تجريبيًا لهجوم "رو هامر " باستخدام لغة جافا سكريبت. [ 109 ] [ 110 ] [ 111 ] [ 112 ]
في عام 2017، تم إثبات وجود هجوم قائم على جافا سكريبت عبر المتصفح قادر على تجاوز ASLR . يُطلق عليه اسم "ASLR⊕Cache" أو AnC. [ 113 ] [ 114 ]
في عام 2018، تضمنت الورقة البحثية التي أعلنت عن هجمات Spectre ضد التنفيذ التخميني في معالجات Intel وغيرها تطبيقًا بلغة JavaScript. [ 115 ]
أدوات التطوير
تطورت أدوات مهمة مع تطور اللغة.
- تحتوي جميع متصفحات الويب الرئيسية على أدوات تطوير ويب مدمجة ، بما في ذلك مصحح أخطاء جافا سكريبت .
- تقوم أدوات تحليل البرامج الثابتة ، مثل ESLint و JSLint ، بفحص كود JavaScript للتأكد من مطابقته لمجموعة من المعايير والإرشادات.
- تحتوي بعض المتصفحات على أدوات تحليل أداء مدمجة . كما تم إنشاء مكتبات تحليل أداء مستقلة، مثل benchmark.js و jsbench. [ 116 ] [ 117 ]
- تدعم العديد من محررات النصوص تمييز بناء الجملة في كود جافا سكريبت.
التقنيات ذات الصلة
جافا
من المفاهيم الخاطئة الشائعة أن جافا سكريبت مرتبطة مباشرةً بجافا . صحيح أن كلتيهما تشتركان في بنية نحوية شبيهة بلغة C (حيث تُعد لغة C اللغة الأم المشتركة لهما). كما أنهما عادةً ما تكونان معزولتين ، وقد صُممت جافا سكريبت مع مراعاة بنية جافا ومكتبتها القياسية. على وجه الخصوص، كانت جميع كلمات جافا الرئيسية محجوزة في جافا سكريبت الأصلية، وتتبع مكتبة جافا سكريبت القياسية اصطلاحات تسمية جافا، وتستند كائنات جافا سكريبت Mathإلى Dateفئات من جافا 1.0. [ 118 ]
ظهرت اللغتان لأول مرة في عام 1995، ولكن تم تطوير لغة جافا بواسطة جيمس جوسلينج من شركة صن مايكروسيستمز، بينما تم تطوير لغة جافا سكريبت بواسطة بريندان إيتش من شركة نتسكيب كوميونيكيشنز.
تتفوق الاختلافات بين اللغتين على أوجه التشابه بينهما. فجافا تعتمد على الكتابة الثابتة ، بينما جافا سكريبت تعتمد على الكتابة الديناميكية . تُحمّل جافا من بايت كود مُترجم ، بينما تُحمّل جافا سكريبت كشفرة مصدرية قابلة للقراءة. كائنات جافا مبنية على أساس الأصناف ، بينما كائنات جافا سكريبت مبنية على أساس النماذج الأولية . وأخيرًا، لم تدعم جافا البرمجة الوظيفية إلا في الإصدار الثامن، بينما دعمتها جافا سكريبت منذ البداية، متأثرةً بلغة سكيم .
JSON
JSON هو تنسيق بيانات مشتق من لغة جافا سكريبت؛ ومن هنا جاء اسم "تدوين كائنات جافا سكريبت". وهو تنسيق شائع الاستخدام تدعمه العديد من لغات البرمجة الأخرى.
المترجمات
تعتمد العديد من المواقع الإلكترونية بشكل كبير على لغة جافا سكريبت، لذلك تم إنشاء برامج تحويل الشفرة البرمجية لتحويل الشفرة المكتوبة بلغات أخرى، مما قد يساعد في عملية التطوير. [ 39 ]
تُعتبر لغتا TypeScript و CoffeeScript لغتين بارزتين يتم تحويلهما إلى JavaScript.
WebAssembly
WebAssembly هي لغة حديثة ذات تنسيق بايت كود ، مصممة لتكملة JavaScript، وخاصة الأجزاء الحساسة للأداء في نصوص صفحات الويب . تدعم جميع محركات JavaScript الرئيسية WebAssembly، [ 119 ] والتي تعمل في نفس بيئة التشغيل المعزولة لرمز JavaScript العادي.
asm.js هي مجموعة فرعية من جافا سكريبت كانت بمثابة السلف لـ WebAssembly. [ 120 ]
ملحوظات
- ↑ / ˈ دʒ ɑː v ə s k r ɪ pt /ⓘ
- ↑ يتضمن الشكل لغة TypeScript ، وهي مجموعة فرعية صارمة من JavaScript من حيث البنية النحوية، وتُترجم إلى JavaScript. ويجمع تقرير Octoverse لعام 2025 الصادر عن GitHub اللغتين معًا عند قياس الاستخدام المشترك.
مراجع
- ١ ٢ «نتسكيب وسن تعلنان عن جافا سكريبت، لغة البرمجة النصية المفتوحة والمتعددة المنصات لشبكات المؤسسات والإنترنت» (بيان صحفي). ٤ ديسمبر ١٩٩٥. مؤرشف من الأصل في ١٦ سبتمبر ٢٠٠٧.
- ↑ "مواصفات لغة ECMAScript® 2024" . يونيو 2024. تم الاطلاع عليه في 30 أغسطس 2024 .
- ↑ "مواصفات لغة ECMAScript® 2025" . 27 مارس 2024. تم الاطلاع عليه في 17 أبريل 2024 .
- ↑ "nodejs/node-eps" . GitHub . مؤرشف من الأصل بتاريخ 29 أغسطس 2020. تم الاطلاع عليه بتاريخ 5 يوليو 2018 .
- 1 2 سيبل، بيتر (16 سبتمبر 2009). المبرمجون في العمل: تأملات في فن البرمجة . أبريس. ISBN 978-1-4302-1948-4أُرشف من الأصل في 24 ديسمبر 2020. تم الاطلاع عليه في 25 ديسمبر 2018. إيتش :
كان الشاغل المباشر في نتسكيب هو أن يبدو البرنامج مثل جافا.
- 1 2 3 4 5 6 "الفصل 4. كيف تم إنشاء جافا سكريبت" . speakingjs.com . مؤرشف من الأصل في 27 فبراير 2020. تم الاطلاع عليه في 21 نوفمبر 2017 .
- ^ “الشعبية – بريندان إيتش” .
- ↑ "بريندان إيتش: مقدمة إلى جافا سكريبت، مؤتمر جافا سكريبت 2010" . يوتيوب . 20 يناير 2013. ص 22. مؤرشف من الأصل في 29 أغسطس 2020. تم الاطلاع عليه في 25 نوفمبر 2019.
إيتش: "دالة"، ثمانية أحرف، تأثرتُ بـ AWK
. - ↑ إيتش، بريندان (1998). "مقدمة". في غودمان، داني (محرر). دليل جافا سكريبت ( الطبعة الثالثة). جون وايلي وأولاده . ISBN 0-7645-3188-3. LCCN 97078208 . OCLC 38888873 . OL 712205M .
- ↑ "TC39 - تحديد مواصفات جافا سكريبت" . tc39.es. تم الاطلاع عليه بتاريخ 25 أبريل 2026 .
- ↑ "نظرة عامة على تقنيات جافا سكريبت - جافا سكريبت | MDN" . وثائق MDN على الويب . 27 أكتوبر 2025. تم الاطلاع عليه في 25 أبريل 2026 .
- ↑ جيت هاب (28 أكتوبر 2025). "أكتوبر 2025: ينضم مطور جديد إلى جيت هاب كل ثانية، بينما يقود الذكاء الاصطناعي لغة تايب سكريبت إلى المرتبة الأولى" . مدونة جيت هاب . رسم بياني: "لغتا جافا سكريبت وتايب سكريبت هما الأكثر استخدامًا مجتمعين" . تم الاطلاع عليه في 25 أبريل 2026 .
- ↑ "تتصدر لغة TypeScript منصة GitHub" . InfoWorld . تم الاطلاع عليه بتاريخ 10 يوليو 2026 .
- ↑ "استطلاع رأي مطوري ستاك أوفرفلو 2025" . ستاك أوفرفلو . تم الاطلاع عليه بتاريخ 10 أكتوبر 2025 .
- ↑ "مواصفات لغة ECMAScript 2020" . مؤرشفة من الأصل بتاريخ 8 مايو 2020. تم الاطلاع عليها بتاريخ 8 مايو 2020 .
- ↑ إنزر، لاري (31 أغسطس 2018). "تطور متصفحات الويب" . مطورو الويب في مونماوث . مؤرشف من الأصل في 31 أغسطس 2018. تم الاطلاع عليه في 31 أغسطس 2018 .
- 1 2 3 Fin JS (17 يونيو 2016)، "بريندان إيتش - الرئيس التنفيذي لشركة Brave" ، يوتيوب ، تم الاطلاع عليه في 7 فبراير 2018
- ↑ "شركة نتسكيب للاتصالات"، تحسينات المتصفح. موسوعة بريتانيكا 2006، مجموعة المراجع النهائية على قرص DVD
- ↑ "TechVision: Innovators of the Net: Brendan Eich and JavaScript" . مؤرشف من الأصل في 8 فبراير 2008.
- 1 2 هان، شيون (4 مارس 2024). "جافا سكريبت تُسيّر العالم - ربما حرفيًا" . وايرد . تم الاطلاع عليه في 21 أغسطس 2024 .
- 1 2 "الفصل 5. التوحيد القياسي: ECMAScript" . speakingjs.com . مؤرشف من الأصل في 1 نوفمبر 2021. تم الاطلاع عليه في 1 نوفمبر 2021 .
- 1 2 تشامبيون، ستيف (6 أبريل 2001). "جافا سكريبت، كيف وصلنا إلى هنا؟" . oreilly.com . مؤرشف من الأصل في 19 يوليو 2016. تم الاطلاع عليه في 16 يوليو 2016 .
- ↑ "متصفح مايكروسوفت إنترنت إكسبلورر 3.0 بيتا متوفر الآن" . microsoft.com . مايكروسوفت. 29 مايو 1996. مؤرشف من الأصل في 24 نوفمبر 2020. تم الاطلاع عليه في 16 يوليو 2016 .
- ↑ ماكراكين، هاري (16 سبتمبر 2010). "العودة غير المرحب بها لعبارة "يُفضل عرضها باستخدام متصفح إنترنت إكسبلورر"" . technologizer.com . مؤرشف من الأصل في 23 يونيو 2018. تم الاطلاع عليه في 16 يوليو 2016 .
- ↑ بيكر، لورين (24 نوفمبر 2004). "متصفح موزيلا فايرفوكس يرتفع حصته السوقية إلى 7.4%" . مجلة محركات البحث . مؤرشف من الأصل في 7 مايو 2021. تم الاطلاع عليه في 8 مايو 2021 .
- ↑ ويبر، تيم (9 مايو 2005). "الهجوم على عملاق البرمجيات مايكروسوفت" . بي بي سي نيوز . مؤرشف من الأصل في 25 سبتمبر 2017.
- ↑ "اختبار مقارنة شامل للمتصفحات: إنترنت إكسبلورر مقابل فايرفوكس، أوبرا، سفاري، وكروم" . مجلة ألعاب الكمبيوتر والأجهزة . شركة كومبيوتك ميديا إيه جي. 3 يوليو 2009. مؤرشف من الأصل في 2 مايو 2012. تم الاطلاع عليه في 28 يونيو 2010 .
- ↑ بوردي، كيفن (11 يونيو 2009). "اختبارات سرعة لايف هاكر: سفاري 4، كروم 2" . لايف هاكر . مؤرشف من الأصل في 14 أبريل 2021. تم الاطلاع عليه في 8 مايو 2021 .
- ↑ "TraceMonkey: JavaScript Lightspeed، مدونة بريندان إيتش" . مؤرشف من الأصل في 4 ديسمبر 2015. تم الاطلاع عليه في 22 يوليو 2020 .
- ↑ "تسأل موزيلا: 'هل أصبحنا سريعين بعد؟'"" . Wired . مؤرشف من الأصل في 22 يونيو 2018. تم الاسترجاع في 18 يناير 2019 .
- ↑ "ECMAScript 6: الميزات الجديدة: نظرة عامة ومقارنة" . es6-features.org . مؤرشف من الأصل بتاريخ 18 مارس 2018. تم الاطلاع عليه بتاريخ 19 مارس 2018 .
- ↑ Node.js الاحترافي: بناء برامج قابلة للتوسع تعتمد على JavaScript، مؤرشف في 24 مارس 2017 على Wayback Machine ، جون وايلي وأولاده، 1 أكتوبر 2012
- ↑ كتاب Sams Teach Yourself Node.js in 24 Hours ، مؤرشف بتاريخ 23 مارس 2017 في Wayback Machine ، Sams Publishing، 5 سبتمبر 2012
- ↑ لوتون، جورج (19 يوليو 2018). "التاريخ السري وراء نجاح npm وNode" . TheServerSide . مؤرشف من الأصل في 2 أغسطس 2021. تم الاطلاع عليه في 2 أغسطس 2021 .
- ↑ براون، بول (13 يناير 2017). "حالة الاتحاد: npm" . Linux.com . مؤرشف من الأصل في 2 أغسطس 2021. تم الاسترجاع في 2 أغسطس 2021 .
- 1 2 3 برانسكومب، ماري (4 مايو 2016). "معيار جافا سكريبت ينتقل إلى جدول إصدارات سنوي؛ إليكم الجديد في ES16" . ذا نيو ستاك . مؤرشف من الأصل في 16 يناير 2021. تم الاسترجاع في 15 يناير 2021 .
- ↑ "عملية اللجنة الفنية 39" . tc39.es. إيكما الدولية. مؤرشف من الأصل في 7 فبراير 2021. تم الاطلاع عليه في 15 يناير 2021 .
- ↑ "مقترحات ECMAScript" . TC39. مؤرشف من الأصل في 4 ديسمبر 2020. تم الاطلاع عليه في 15 يناير 2021 .
- 1 2 أشكيناس، جيريمي . "قائمة اللغات التي تُترجم إلى جافا سكريبت" . جيت هاب . مؤرشف من الأصل في 31 يناير 2020. تم الاطلاع عليه في 6 فبراير 2020 .
- 1 2 "إحصائيات استخدام جافا سكريبت كلغة برمجة من جانب العميل على مواقع الويب" . W3Techs . تم الاطلاع عليه بتاريخ 27 فبراير 2024 .
- ↑ "رقم التسجيل التسلسلي للعلامة التجارية الأمريكية 75026640" . uspto.gov . مكتب براءات الاختراع والعلامات التجارية بالولايات المتحدة . 6 مايو 1997. مؤرشف من الأصل في 13 يوليو 2021. تم الاطلاع عليه في 8 مايو 2021 .
- ↑ "الإشعارات القانونية" . oracle.com . شركة أوراكل . مؤرشف من الأصل في 5 يونيو 2021. تم الاطلاع عليه في 8 مايو 2021 .
- ↑ "أوراكل تستحوذ على صن في صفقة بقيمة 7.4 مليار دولار" . صحيفة إيكونوميك تايمز . 21 أبريل 2009.
- ↑ كلابورن، توماس (17 سبتمبر 2024). "دعوة جديدة لشركة أوراكل للتخلي عن علامتها التجارية جافا سكريبت" . ذا ريجستر . تم الاطلاع عليه في 2 فبراير 2025 .
- ↑ كريل، بول (20 سبتمبر 2024). "مجتمع جافا سكريبت يتحدى علامة أوراكل التجارية لجافا سكريبت" . إنفوورلد .
- 1 2 3 "إحصائيات استخدام مكتبات جافا سكريبت للمواقع الإلكترونية" . W3Techs . تم الاطلاع عليه بتاريخ 9 أبريل 2021 .
- ↑ "استخدام jQuery مع Bootstrap" . clouddevs.com . 10 يونيو 2019. تم الاطلاع عليه بتاريخ 17 مارس 2024 .
- ↑ "Vanilla JS" . vanilla-js.com . ١٦ يونيو ٢٠٢٠. مؤرشف من الأصل في ١٦ يونيو ٢٠٢٠. تم الاطلاع عليه في ١٧ يونيو ٢٠٢٠ .
- ↑ "دليل جافا سكريبت من جانب الخادم" . oracle.com . شركة أوراكل . 11 ديسمبر 1998. مؤرشف من الأصل في 11 مارس 2021. تم الاطلاع عليه في 8 مايو 2021 .
- ↑ كلينيك، أندرو (14 يوليو 2000). "مقدمة إلى JScript .NET" . شبكة مطوري مايكروسوفت . مايكروسوفت. مؤرشف من الأصل في 10 نوفمبر 2017. تم الاسترجاع في 10 أبريل 2018.
منذ إطلاق JScript الإصدار 1.0 عام 1996، شهدنا زيادة مطردة في استخدام JScript على الخادم، وخاصة في صفحات الخادم النشطة (ASP).
- 1 2 ماهيموف، مايكل (17 ديسمبر 2009). "جافا سكريبت من جانب الخادم، تعود بقوة" . readwrite.com . مؤرشف من الأصل في 17 يونيو 2016. تم الاطلاع عليه في 16 يوليو 2016 .
- ↑ "جافا سكريبت لبرنامج أكروبات" . adobe.com . 7 أغسطس 2009. مؤرشف من الأصل في 7 أغسطس 2009. تم الاطلاع عليه في 18 أغسطس 2009 .
- ↑ treitter (2 فبراير 2013). "الإجابة على السؤال: "كيف أقوم بتطوير تطبيق لـ GNOME؟"" . livejournal.com . مؤرشف من الأصل بتاريخ 11 فبراير 2013. تم الاطلاع عليه بتاريخ 7 فبراير 2013 .
- ↑ بونج، جوليان (19 أبريل 2018). "أوراكل ناشورن: محرك جافا سكريبت من الجيل التالي لآلة جافا الافتراضية" . oracle.com . شركة أوراكل . تم الاطلاع عليه بتاريخ 17 فبراير 2025 .
- ↑ "دليل الترحيل من ناشورن إلى غراال جي إس" . graalvm.org . تم الاطلاع عليه بتاريخ 17 فبراير 2025 .
- ↑ "GraalJS" . GraalVM . تم الاطلاع عليه بتاريخ 17 فبراير 2025 .
- ↑ "التوافقية في جافا" . oracle.com . أوراكل . تم الاطلاع عليه بتاريخ 17 فبراير 2025 .
- ↑ "Tessel 2... استغل جميع مكتبات Node.JS لإنشاء أجهزة مفيدة في دقائق معدودة باستخدام Tessel" . tessel.io . مؤرشف من الأصل بتاريخ 26 مايو 2021. تم الاطلاع عليه بتاريخ 8 مايو 2021 .
- ↑ "مقدمة حول Node.js و Raspberry Pi GPIO" . w3schools.com . مؤرشف من الأصل بتاريخ 13 أغسطس 2021. تم الاطلاع عليه بتاريخ 3 مايو 2020 .
- ↑ "إسبروينو - جافا سكريبت للمتحكمات الدقيقة" . espruino.com . مؤرشف من الأصل في 1 مايو 2020. تم الاطلاع عليه في 3 مايو 2020 .
- ↑ لوبر، جين (21 سبتمبر 2015). "دليل لمحركات جافا سكريبت للمبتدئين" . شبكة مطوري تيليريك . مؤرشف من الأصل في 8 ديسمبر 2018. تم الاطلاع عليه في 8 ديسمبر 2018 .
- ↑ "كيف تعمل تقنية Blink" . تم الاطلاع عليه بتاريخ 12 مارس 2024 .
- 1 2 "الوثائق · V8" . جوجل . تم الاسترجاع في 3 مارس 2024 .
- ↑ نيلاتورو، كيرثي (سبتمبر 2020). "WebAssembly: ما أهميته؟" . medium.com . تم الاطلاع عليه في 3 مارس 2024 .
- ↑ "نموذج التزامن وحلقة الأحداث" . شبكة مطوري موزيلا . مؤرشف من الأصل في 5 سبتمبر 2015. تم الاطلاع عليه في 28 أغسطس 2015 .
- ↑ فلاناغان، ديفيد (17 أغسطس 2006). جافا سكريبت: الدليل الشامل . دار نشر أورايلي ميديا، ص 16. ISBN 978-0-596-55447-7أُرشف من المصدر الأصلي في 1 أغسطس 2020. تم الاطلاع عليه في 29 مارس 2019 .
- 1 2 3 4 كوروليف، ميخائيل (1 مارس 2019). "غرائب جافا سكريبت في صورة واحدة من الإنترنت" . مجتمع المطورين . مؤرشف من الأصل في 28 أكتوبر 2019. تم الاسترجاع في 28 أكتوبر 2019 .
- ↑ "Proposal-bigint/ADVANCED.md at master · tc39/Proposal-bigint" . GitHub .
- ↑ برنهاردت، غاري (2012). "وات" . تدمير جميع البرامج . مؤرشف من الأصل في 28 أكتوبر 2019. تم الاسترجاع في 28 أكتوبر 2019 .
- ↑ "أنواع البيانات وهياكل البيانات في جافا سكريبت" . MDN . ١٦ فبراير ٢٠١٧. مؤرشف من الأصل في ١٤ مارس ٢٠١٧. تم الاطلاع عليه في ٢٤ فبراير ٢٠١٧ .
- ↑ فلاناغان 2006 ، ص 176-178.
- ↑ كروكفورد، دوغلاس. "الوراثة النموذجية في جافا سكريبت" . مؤرشف من الأصل في 13 أغسطس 2013. تم الاطلاع عليه في 20 أغسطس 2013 .
- ↑ "الوراثة وسلسلة النماذج الأولية" . شبكة مطوري موزيلا . مؤرشف من الأصل في 25 أبريل 2013. تم الاطلاع عليه في 6 أبريل 2013 .
- ↑ هيرمان، ديفيد (2013). جافا سكريبت الفعّالة . أديسون-ويسلي. ص 83. ISBN 978-0-321-81218-6.
- ^ غاندي، راجو (2019). جافا سكريبت التالي . مدينة نيويورك: ابريس ميديا. ص 159 – 171. ISBN 978-1-4842-5394-6.
- 1 2 هافربيك، مارين (سبتمبر 2024). جافا سكريبت البليغة (PDF) (الطبعة الرابعة ). سان فرانسيسكو: لا توجد صحافة النشا . ص 97-98 . رقم ISBN 978-1-71850-411-0تمت أرشفة الملف (PDF) من النسخة الأصلية في 12 مارس 2025.
- ↑ كاتز، يهودا (12 أغسطس 2011). "فهم "النماذج الأولية" في جافا سكريبت" . مؤرشف من الأصل في 5 أبريل 2013. تم الاطلاع عليه في 6 أبريل 2013 .
- ↑ هيرمان، ديفيد (2013). جافا سكريبت الفعّالة . أديسون-ويسلي. الصفحات 125-127 . ISBN 978-0-321-81218-6.
- ↑ "الدالة - جافا سكريبت" . وثائق MDN على الويب . تم الاطلاع عليه بتاريخ 30 أكتوبر 2021 .
- ↑ "خصائص كائن الدالة" . Es5.github.com. مؤرشف من الأصل بتاريخ 28 يناير 2013. تم الاطلاع عليه بتاريخ 26 مايو 2013 .
- ↑ فلاناغان 2006 ، ص 141.
- ↑ المواهب العديدة للغة جافا سكريبت لتعميم أساليب البرمجة الموجهة نحو الأدوار مثل السمات والمزيجات. مؤرشف في 2017-10-05 على Wayback Machine ، Peterseliger.blogspot.de، 11 أبريل 2014.
- ↑ سمات جافا سكريبت مؤرشفة في 24-07-2014 في Wayback Machine ، 2010.
- ↑ "الصفحة الرئيسية | كوكتيل جي إس" . Cocktailjs.github.io . مؤرشف من الأصل بتاريخ 4 فبراير 2017. تم الاطلاع عليه بتاريخ 24 فبراير 2017 .
- ↑ كرول، أنجوس (31 مايو 2011). "نظرة جديدة على مزيج جافا سكريبت" . جافا سكريبت، جافا سكريبت... . مؤرشف من الأصل في 15 أبريل 2020.
- ↑ "E4X - أرشيف المحتوى القديم" . شبكة مطوري موزيلا . مؤسسة موزيلا. 14 فبراير 2014. مؤرشف من الأصل في 24 يوليو 2014. تم الاطلاع عليه في 13 يوليو 2014 .
- ↑ "var – JavaScript" . شبكة مطوري موزيلا . مؤرشف من الأصل في 23 ديسمبر 2012. تم الاطلاع عليه في 22 ديسمبر 2012 .
- ↑ "let" . وثائق MDN على الويب . موزيلا. مؤرشف من الأصل في 28 مايو 2019. تم الاطلاع عليه في 27 يونيو 2018 .
- ↑ "const" . وثائق MDN على الويب . موزيلا. مؤرشف من الأصل في 28 يونيو 2018. تم الاسترجاع في 27 يونيو 2018 .
- ↑ "جعل جافا سكريبت آمنة للإعلانات" . ADsafe. مؤرشف من الأصل في 6 يوليو 2021. تم الاطلاع عليه في 8 مايو 2021 .
- ↑ "برنامج ECMA النصي الآمن (SES)" . مؤرشف من الأصل بتاريخ 15 مايو 2013. تم الاطلاع عليه بتاريخ 26 مايو 2013 .
- ↑ "مشروع جوجل كاخا" . جوجل . مؤرشف من الأصل في 22 يناير 2021. تم الاطلاع عليه في 9 يوليو 2021 .
- ↑ "تم الإبلاغ عن ثغرة أمنية في موقع موزيلا تسمح بتنفيذ نصوص برمجية عبر المواقع، وتم إصلاحها - MozillaZine Talkback" . Mozillazine.org . مؤرشف من الأصل بتاريخ 21 يوليو 2011. تم الاطلاع عليه بتاريخ 24 فبراير 2017 .
- ↑ كوتيلين، ثور (17 يونيو 2008). "حماية النقر بزر الماوس الأيمن؟ انسَ الأمر" . blog.anta.net . مؤرشف من الأصل في 9 أغسطس 2011. تم الاطلاع عليه في 28 يوليو 2022 .
- ↑ ريهوريك، جان (29 نوفمبر 2016). "لماذا يجب عليك عدم وضع بيانات حساسة في جافا سكريبت" . مدونة ServiceObjects . ServiceObjects. مؤرشف من الأصل في 3 يونيو 2019. تم الاطلاع عليه في 3 يونيو 2019 .
- 1 2 لاوينجر، توبياس؛ شعبان، عبد البري؛ أرشد، سجاد؛ روبرتسون، وليام. ويلسون، كريستو. كيردا، إنجين (21 ديسمبر 2016)، “لا تعتمد علي: تحليل استخدام مكتبات جافا سكريبت القديمة على الويب” (PDF) ، جامعة نورث إيسترن ، أرخايف : 1811.00918 ، دوى : 10.14722/ndss.2017.23414 ، ISBN 978-1-891562-46-4، S2CID 17885720 ، مؤرشف من الأصل (PDF) في 29 مارس 2017 ، تم استرجاعه في 28 يوليو 2022
- ↑ كولينز، كيث (27 مارس 2016). "كيف تسبب مبرمج واحد في تعطيل الإنترنت بحذف جزء صغير من التعليمات البرمجية" . كوارتز . مؤرشف من الأصل في 22 فبراير 2017. تم الاطلاع عليه في 22 فبراير 2017 .
- ↑ مجلة SC البريطانية، حذف 11 سطرًا من التعليمات البرمجية من قِبل مطور برامج "يُعطّل الإنترنت" (مؤرشف بتاريخ 23 فبراير 2017، في أرشيف الإنترنت) .
- ↑ شركة موزيلا، ثغرة تجاوز سعة المخزن المؤقت في دالة crypto.signText()، مؤرشفة بتاريخ 4 يونيو 2014 على موقع Wayback Machine
- ↑ فيستا، بول (19 أغسطس 1998). "خلل تجاوز سعة المخزن المؤقت في متصفح إنترنت إكسبلورر" . سي نت . مؤرشف من الأصل في 25 ديسمبر 2002.
- ↑ SecurityTracker.com، ثغرة تجاوز سعة المخزن المؤقت في جافا سكريبت في متصفح أبل سفاري تسمح للمستخدمين عن بُعد بتنفيذ تعليمات برمجية عشوائية، وثغرة إعادة توجيه HTTP تسمح للمستخدمين عن بُعد بالوصول إلى الملفات. مؤرشفة بتاريخ 18 فبراير 2010 على موقع Wayback Machine.
- ↑ SecurityFocus، ثغرة تجاوز سعة المخزن المؤقت في عنصر تحكم ActiveX الخاص بـ WebViewFolderIcon من مايكروسوفت، مؤرشفة بتاريخ 11 أكتوبر 2011 على موقع Wayback Machine
- ↑ هيئة فيوجن، تجاوز سعة المخزن المؤقت لـ Macromedia Flash ActiveX ، مؤرشف في 13 أغسطس 2011، على موقع Wayback Machine
- ↑ "الوضع المحمي في متصفح إنترنت إكسبلورر 7 في نظام التشغيل فيستا - مدونة إنترنت إكسبلورر" . Blogs.msdn.com . 9 فبراير 2006. مؤرشف من الأصل في 23 يناير 2010. تم الاطلاع عليه في 24 فبراير 2017 .
- ↑ مركز الاستجابة للطوارئ الحاسوبية الأمريكي (US CERT)، ملاحظة الثغرة الأمنية رقم 713878: لا يتحقق متصفح مايكروسوفت إنترنت إكسبلورر بشكل صحيح من مصدر الإطار المُعاد توجيهه. مؤرشف بتاريخ 30 أكتوبر 2009 في أرشيف الإنترنت (Wayback Machine).
- ↑ مؤسسة موزيلا، بيان أمني صادر عن مؤسسة موزيلا رقم 2005-41: تصعيد الامتيازات عبر تجاوز خصائص DOM. مؤرشف بتاريخ 4 يونيو 2014 في أرشيف الإنترنت (Wayback Machine).
- ↑ أندرسن، ستار (9 أغسطس 2004). "الجزء 5: أمان مُحسّن للتصفح" . TechNet . وثائق مايكروسوفت . تغييرات في وظائف نظام التشغيل ويندوز إكس بي حزمة الخدمة 2. تم الاطلاع عليه بتاريخ 20 أكتوبر 2021 .
- ↑ للاطلاع على مثال نادر لحصان طروادة جافا سكريبت، انظر: Symantec Corporation, JS.Seeker.K (مؤرشف بتاريخ 13 سبتمبر 2011 في Wayback Machine)
- ↑ غروس، دانيال؛ موريس، كليمنتين؛ مانغارد، ستيفان (24 يوليو 2015). "Rowhammer.js: هجوم خطأ برمجي عن بُعد في جافا سكريبت". arXiv : 1507.06955 [ cs.CR ].
- ↑ جان فارونز، أليكس (30 يوليو 2015). "Rowhammer.js هو أذكى اختراق رأيته على الإطلاق" . Motherboard . Vice . مؤرشف من الأصل في 27 يناير 2018. تم الاطلاع عليه في 26 يناير 2018 .
- ↑ غودين، دان (4 أغسطس 2015). "استغلال ثغرة 'قلب البتات' في ذاكرة الوصول العشوائي الديناميكية (DRAM) لمهاجمة أجهزة الكمبيوتر: ما عليك سوى إضافة جافا سكريبت" . آرس تكنيكا . مؤرشف من الأصل في 27 يناير 2018. تم الاطلاع عليه في 26 يناير 2018 .
- ↑ أورباخ، ديفيد (28 يوليو 2015). "ثغرة أمنية في برنامج روهامر: لماذا يُعدّ هجوم أمني جديد مرعبًا حقًا" . slate.com . مؤرشف من الأصل في 30 يوليو 2015. تم الاطلاع عليه في 29 يوليو 2015 .
- ↑ تمت أرشفة AnC في 16 مارس 2017 على موقع Wayback Machine ، VUSec، 2017
- ↑ برمجية جافا سكريبت جديدة لكشف ثغرات ASLR على وشك أن تجعل عمليات الاستغلال عبر الهجمات الإلكترونية أكثر خطورة . مؤرشفة بتاريخ 16 مارس 2017 في أرشيف الإنترنت (Wayback Machine). آرس تكنيكا، 2017
- ↑ هجوم سبيكتر مؤرشف بتاريخ 3 يناير 2018 في موقع Wayback Machine
- ↑ "Benchmark.js" . benchmarkjs.com . مؤرشف من الأصل بتاريخ 19 ديسمبر 2016. تم الاطلاع عليه بتاريخ 6 نوفمبر 2016 .
- ↑ JSBEN.CH. "JSBEN.CH منصة قياس أداء جافا سكريبت" . jsben.ch . مؤرشف من الأصل بتاريخ 27 فبراير 2021. تم الاطلاع عليه بتاريخ 13 أغسطس 2021 .
- ↑ إيتش، بريندان (3 أبريل 2008). "الشعبية" . مؤرشف من الأصل في 3 يوليو 2011. تم الاطلاع عليه في 19 يناير 2012 .
- ↑ "متصفح إيدج يُفعّل WebAssembly -- مجلة فيجوال ستوديو" . مجلة فيجوال ستوديو . مؤرشف من الأصل بتاريخ 10 فبراير 2018. تم الاطلاع عليه بتاريخ 9 فبراير 2018 .
- ↑ "الأسئلة الشائعة" . asm.js. مؤرشف من الأصل في 4 يونيو 2014. تم الاطلاع عليه في 13 أبريل 2014 .
للمزيد من القراءة
- فلاناغان، ديفيد (2020). جافا سكريبت: الدليل الشامل ( الطبعة السابعة). سيباستوبول، كاليفورنيا: أورايلي. ISBN 978-1-491-95202-3.
- هافيربيكي، مارين (2024). جافا سكريبت البليغة (PDF) (الطبعة الرابعة ). سان فرانسيسكو: لا توجد صحافة النشا . رقم ISBN 978-1-71850-411-0تمت أرشفة الملف (PDF) من النسخة الأصلية في 12 مارس 2025.
- زاكاس، نيكولاس (2014). مبادئ جافا سكريبت الكائنية التوجه ( الطبعة الأولى). دار نشر نو ستارش. رقم ISBN 978-1-59327-540-2.
روابط خارجية
- دليل جافا سكريبت الحديث . مجموعة من الدروس التعليمية التي يتم تحديثها باستمرار من قبل المجتمع حول اللغة بأكملها.
- "جافا سكريبت: أول 20 عامًا" . تم الاطلاع عليه بتاريخ 6 فبراير 2022 .
- جافا سكريبت
- الاختراعات الأمريكية
- برامج متعددة المنصات
- لغات البرمجة ذات الكتابة الديناميكية
- اللغات الوظيفية
- لغات البرمجة القائمة على الكائنات
- لغات البرمجة عالية المستوى
- لغات البرمجة التي تم إنشاؤها عام 1995
- لغات البرمجة ذات معيار ISO
- لغات البرمجة القائمة على النماذج الأولية
- لغات البرمجة النصية
- برمجة الويب
- لغات البرمجة
