الفرق بين المراجعتين لصفحة: «JavaScript»
طلا ملخص تعديل |
لا ملخص تعديل |
||
سطر 2: | سطر 2: | ||
تُستخدَم لغة JavaScript لإنشاء صفحات ويب تفاعلية، ولتوفير تطبيقات ويب بما في ذلك الألعاب؛ وهي مُستعمَلة من أغلبية المواقع، وتدعمها جميع المتصفحات تقريبًا دن الحاجة إلى إضافات خارجية. | تُستخدَم لغة JavaScript لإنشاء صفحات ويب تفاعلية، ولتوفير تطبيقات ويب بما في ذلك الألعاب؛ وهي مُستعمَلة من أغلبية المواقع، وتدعمها جميع المتصفحات تقريبًا دن الحاجة إلى إضافات خارجية. | ||
{{Course|course=javascript}} | |||
__TOC__ | |||
== بنية اللغة == | == بنية اللغة == | ||
كانت لغة JavaScript محدودةً إلى متصفحات الويب فيما قد سلف، لكن توسّع مجال JavaScript في الفترة الأخيرة لتضم إنشاء تطبيقات ويب من جهة الخادم (server-side) مع التعامل مع قواعد البيانات، إضافةً إلى إمكانية استخدامها في بيئات ليست متعلقة بالويب مثل معالجات النصوص وبرمجيات PDF، ومن الممكن استعمالها أيضًا لكتابة تطبيقات سطح المكتب أو تطبيقات الهواتف، وحتى تطوير الألعاب! | كانت لغة JavaScript محدودةً إلى متصفحات الويب فيما قد سلف، لكن توسّع مجال JavaScript في الفترة الأخيرة لتضم إنشاء تطبيقات ويب من جهة الخادم (server-side) مع التعامل مع قواعد البيانات، إضافةً إلى إمكانية استخدامها في بيئات ليست متعلقة بالويب مثل معالجات النصوص وبرمجيات PDF، ومن الممكن استعمالها أيضًا لكتابة تطبيقات سطح المكتب أو تطبيقات الهواتف، وحتى تطوير الألعاب! |
مراجعة 08:40، 23 يونيو 2022
JavaScript (يُشار إليها عادةً بالاختصار JS) هي لغة برمجة مُفسَّرة (interpreted، وليست مبنية compiled) وديناميكية وعالية المستوى؛ تُشكِّل أحد الأُسس التي ترتكز عليها صفحات الويب (إضافةً إلى HTML و CSS).
تُستخدَم لغة JavaScript لإنشاء صفحات ويب تفاعلية، ولتوفير تطبيقات ويب بما في ذلك الألعاب؛ وهي مُستعمَلة من أغلبية المواقع، وتدعمها جميع المتصفحات تقريبًا دن الحاجة إلى إضافات خارجية.
- 71 ساعة فيديو تدريبية
- من الصفر دون الحاجة لخبرة مسبقة
- شهادة معتمدة من أكاديمية حسوب
- متابعة أثناء الدورة من فريق مختص
بنية اللغة
كانت لغة JavaScript محدودةً إلى متصفحات الويب فيما قد سلف، لكن توسّع مجال JavaScript في الفترة الأخيرة لتضم إنشاء تطبيقات ويب من جهة الخادم (server-side) مع التعامل مع قواعد البيانات، إضافةً إلى إمكانية استخدامها في بيئات ليست متعلقة بالويب مثل معالجات النصوص وبرمجيات PDF، ومن الممكن استعمالها أيضًا لكتابة تطبيقات سطح المكتب أو تطبيقات الهواتف، وحتى تطوير الألعاب!
هنالك الكثير من محركات JavaScript، وكل واحدٍ منها يخضع لمواصفة ECMAScript (مع أنَّها تختلف فيما بينها بالإصدارات التي تدعمها). يوجد في نهاية كل صفحة من صفحات هذا التوثيق قسمٌ بعنوان «دعم المتصفحات» الذي نذكر فيه ما هي المتصفحات التي تدعم الميزة المذكورة.
يتألف أساس لغة JavaScript من الميزات الشائعة للغات البرمجة، التي تسمح لنا:
- بتخزين القيم داخل متغيرات،
- إجراء عمليات معالجة على السلاسل النصية،
- تنفيذ إجراءات معيّنة اعتمادًا على وقوع الأحداث.
ما يجب أن يثير اهتمامنا هو الواجهات البرمجية التي تُضيف وظائف على لغة JavaScript، وتسمى هذه الواجهات البرمجية بالمصطلح APIs (أي Application Programming Interfaces)، والتي تسمح للمطورين باستخدام لغة JavaScript للتعامل مع كثيرٍ من الأشياء، في مجال متصفحات الويب يمكننا استخدام JavaScript للتعامل مع شجرة DOM، ولاستخدام الواجهة البرمجية للمواقع الجغرافية (Geolocation API)، ولإنشاء رسوميات ثنائية وثلاثية الأبعاد عبر Canvas و WebGL، وللتحكم بالوسائط مثل الفيديو والصوت، وغير ذلك.
ويمكن استخدام JavaScript أيضًا من طرف الخادم، ولمزيدٍ من المعلومات انظر إلى صفحة Node.js.
يمكن تضمين شيفرات JavaScript في الصفحات بطريقتين:
- تضمين الشيفرات داخل مستند HTML
- استخدام ملف خارجي
يمكن تضمين شيفرة JavaScript في أي مكان داخل المستند، لكن يُنصَح بوضعها قبل وسم الإغلاق للعنصر <body>
. تُضاف الشيفرة داخل العنصر <script>
كما يلي:
<script>
// شيفرات JavaScript
</script>
أما إذا كانت شيفرة JavaScript في ملفٍ خارجي (وليكن اسمه script.js
) فيمكن تضمينه باستخدام العنصر <script>
أيضًا، لكن مع استخدام الخاصية src
كما يلي:
<script src="script.js"></script>
نُظِّم هذا الدليل بتخصيص صفحة لكل تعبير برمجي أو دالة أو كائن. أما التعابير البرمجية والكلمات المحجوزة فيمكن الوصول إليها مباشرةً بكتابة اسمها (كما هو) كما في الخاصية العامة NaN
الموجودة في JavaScript/NaN، أو الكلمة المحجوزة break
(في JavaScript/break) أو الدالة parseInt()
(في JavaScript/parseInt). أما الخاصيات والدوال التابعة لكائنات، فيمكن الوصول إليها من الصفحة الفرعية الخاصة بها بعد ذكر اسم الكائن، أي كما في الصيغة JavaScript/Object/property. أمثلة على ذلك: صفحة الدالة replace()
التابعة للكائن String
، إذا يمكن الوصول إليها عبر الصفحة JavaScript/String/replace؛ أو صفحة الخاصية PI
التابعة للكائن Math
التي يمكن الوصول إليها عبر الرابط JavaScript/Math/PI.
الكائنات العامة
في هذا القسم جميع الكائنات العامة المُضمَّنة في لغة JavaScript، إضافةً إلى جميع الخاصيات والدوال التابعة لها.
الخاصيات العامة
هذه الخاصيات العامة تُعيد قيمةً بسيطةً، فهي لا تُمثِّل دوالًا أو خاصياتٍ تابعة لأحد الكائنات.
الدوال العامة
هذه الدوال العامة -أي التي تستدعى في النطاق العام بدل استدعائها على كائن بعينه- تُعيد نتائجها إلى التعبير البرمجي الذي استدعاها.
eval()
isFinite()
isNaN()
parseFloat()
parseInt()
decodeURI()
decodeURIComponent()
encodeURI()
encodeURIComponent()
escape()
unescape()
الكائنات الأساسية
هذه هي الكائنات الأساسية التي بنيت الكائنات الأخرى عليها، وهي تتضمن الكائنات التي تستطيع تمثيل الكائنات العامة والدوال والأخطاء.
Object
Function
Boolean
Symbol
Error
EvalError
RangeError
ReferenceError
SyntaxError
TypeError
URIError
الأرقام والتواريخ
وهي الكائنات الأساسية التي تُمثِّل الأرقام والتواريخ والعمليات الرياضية.
معالجة النصوص
هذه الكائنات تُمثِّل السلاسل النصية وطرائق معالجتها وتعديلها.
البيانات المهيكلة
هذه الكائنات تُمثِّل مجموعةً من الكائنات التي لها فهرس وقيمة.
كائنات تجريد التحكم
غير ذلك
التعابير البرمجية
في هذا القسم جميع التعابير البرمجية الموجودة في لغة JavaScript.
التحكم في التنفيذ
block
تُستخدَم الأقسام الكتلية لتجميع عدِّة تعابير برمجية معًا، ويُعرَّف القسم بزوجين من الأقواس المعقوفة {}
.
break
يإنهاء حلقة التكرار الحالية أو التعبير switch
أو label
، وستنقل تنفيذ البرنامج إلى التعبير البرمجي الذي يلي التعبير الذي انتهى.
continue
تجاوز تنفيذ التعابير البرمجية في التكرار الحالي (iteration) في حلقة التكرار الحالية أو حلقة التكرار المسماة (عبر لافتة)، وسيستمر تنفيذ الحلقة بدءًا من التكرار التالي.
Empty
يُستخدَم لتجنب توفير تعبير برمجي في المواضع التي تتطلب فيها JavaScript تعبيرًا برمجيًا واحدًا على الأقل.
if...else
التعبير البرمجي الشرطي يُستخدَم لتنفيذ تعبير برمجي معيّن عندما يكون الشرط محققًا، وإذا كان الشرط غير محققٍ فسيُنفِّذ تعبيرًا برمجيًا آخر.
switch
يُستخدَم لمطابقة قيمة تعبير برمجي باستخدام عبارةcase
، ثم يُنفِّذ التعابير البرمجية المرتبطة معها.
throw
يؤدي إلى رمي استثناء (exception) يُعرِّفه المستخدم.
try...catch
يُستخدَم لتجربة قسم من التعابير البرمجية، ويُحدِّد طريقةً لمعالجة الاستثناءات إن رُمِيَت.
تعابير التصريح عن متغيرات
var
تعبير variable
يُصرِّح عن متغير، ويمكن تهيئة قيمته الابتدائية اختياريًا.
let
يُصرِّح عن متغير محلي للقسم الكتلي، ويمكن تهيئة قيمته الابتدائية اختياريًا.
const
التصريح عن ثابت للقراءة فقط.
الدوال والأصناف
function
(التصريح عن دالة)
التصريح عن الدالة (function declaration) يُعرِّف دالةً لها معاملات (parameters) معيّنة. انظر إلى صفحة «الدوال في JavaScript» للمقارنة بين صيغ تعريف الدوال.
function*
(التصريح عن دالة مولدة)
التصريح عن الدالة المولدة. انظر إلى صفحة «الدوال في JavaScript» للمقارنة بين صيغ تعريف الدوال.
async function
(التصريح عن دالة غير متزامنة)
التصريح عن دالة غير متزامنة. انظر إلى صفحة «الدوال في JavaScript» للمقارنة بين صيغ تعريف الدوال.
return
يؤدي إلى إنهاء تنفيذ الدالة ويُحدِّد قيمةً لتُعيدها الدالة إلى التعبير الذي استدعاها.
class
(التصريح عن صنف)
التصريح عن الصنف (class declaration) يؤدي إلى إنشاء صنف جديد له اسمٌ معيّن يستخدم الوراثة عبر سلسلة prototype.
حلقات التكرار
do...while
يُنشِئ حلقة تكرار تُنفِّذ تعبيرًا برمجيًا معيّنًا إلى أن يصبح الشرط غير محقق (false)، وسيتم التحقق من الشرط بعد تنفيذ التعبير البرمجي، مما يؤدي إلى تنفيذ التعبير البرمجي المُعيّن مرةً واحدةً على الأقل.
for
يُنشِئ حلقة تكرار تتألف من ثلاثة تعبيرات برمجية اختيارية تحيط بها أقواس وتفصل بينها فواصل منقوطة، ويليها تعبيرٌ برمجيٌ (وعادةً يكون قسمًا كتليًا [block statement]) سيُنفَّذ في كل تكرار للحلقة.
for...in
يُنشِئ حلقة تكرار تمر على الخاصيات القابلة للإحصاء (enumerable properties
) التابعة لأحد الكائنات.
for...of
يمر على الكائنات التي يمكن الدوران على عناصرها (iterable objects) بما في ذلك الكائن Array
و Map
و Set
وString
و TypedArray
و Arguments
، وتنفيذ تعابير برمجية معيّنة على قيمة كل خاصية من خاصيات تلك الكائنات.
while
يُنشِئ حلقة تكرار تُنفِّذ تعبيرًا برمجيًا معيّنًا طالما كان الشرط محققًا (true)، وسيتم التحقق من الشرط قبل تنفيذ التعبير البرمجي.
غير ذلك
debugger
يؤدي إلى تفعيل وظيفة التنقيح (debugging functionality) المتاحة، مثل بداية نقطة المقاطعة (breakpoint)؛ لكن إن لم يكن هنالك منقِّح أو وظيفة تنقيح متاحة فلن يكون لهذا التعبير أي أثر.
export
يمكن أن يُستخدَم عند إنشاء وحدات JavaScript (أي JavaScript modules) لتصدير الدوال أو الكائنات أو القيم الأوليّة (primitive values) من وحدة (module) لكي يمكن استخدامها من برنامج آخر باستخدام التعبير البرمجي import
.
import
يُستخدَم لاستيراد ما صُدِّر من وحدة (module) أخرى.
label
يمكن أن يُستخدَم مع التعبير البرمجي break
أوcontinue
، وهو يوضع قبل التعابير البرمجية لإضافة لافتة (مُعرِّف) لها يمكن الإشارة إليها.
التعابير والمعاملات
هذا القسم فيه ما يتعلق بالتعابير والمعاملات في JavaScript.
التعابير الأساسية
وهي تتضمن التعابير والكلمات المحجوزة العامة في JavaScript.
this
تُحدَّد قيمة الكلمة المحجوزة this
وفق طريقة استدعاء الدالة.
function
(تعبير تعريف الدوال)
الكلمة المحجوزة function
تُستخدَم لتعريف دالة داخل تعبير (expression). انظر إلى صفحة «الدوال في JavaScript» للمقارنة بين صيغ تعريف الدوال.
class
(تعبير تعريف الأصناف)
الكلمة المحجوزة class
تشير إلى تعبير تعريف للأصناف.
function*
(تعبير تعريف الدوال المولدة)
الكلمة المحجوزة function*
تُستخدَم لتعريف دالة مولِّدة داخل تعبير. انظر إلى صفحة «الدوال في JavaScript» للمقارنة بين صيغ تعريف الدوال.
yield
الكلمة المحجوزة yield
تُستخدَم لإيقاف تنفيذ دالة مولِّدة (function*
) مؤقتًا واستئناف تنفيذها.
yield*
التعبير yield*
يُستخدَم لتفويض التنفيذ إلى دالة مولِّدة أخرى أو كائن iterable
.
async function*
(تعبير تعريف الدوال غير المتزامنة)
الكلمة المحجوزة async function
تُستخدَم لتعريف دوال غير متزامنة ضمن تعبير (expression). انظر إلى صفحة «الدوال في JavaScript» للمقارنة بين صيغ تعريف الدوال.
await
يُستخدَم لانتظار وعد (الكائن Promise
)، ويمكن أن يُستخدَم داخل دالة غير متزامنة فقط (async function).
[]
الشكل المختصر لتعريف المصفوفات.
{}
الشكل المختصر لتهيئة الكائنات.
/ab+c/i
الشكل المختصر لتعريف التعابير النمطية (regular expressions).
( )
معامل التجميع.
تعابير الإسناد
الوصول إلى الخاصيات
طرائق الوصول إلى الخاصيات توفِّر وصولًا إلى خاصيات أحد الكائنات باستخدام طريقة النقط أو طريقة الأقواس.
new
يُنشِئ نسخةً من كائن مُعرَّف من المستخدم أو نسخةً من أحد أنواع الكائنات المُضمّنة في لغة JavaScript والتي تملك دالةً بانيةً.
new.target
تسمح لك بمعرفة إن استدعيت دالةٌ عاديةٌ أم دالةٌ بانيةٌ باستخدام المعامل new
.
super
تُستخدَم للوصول إلى الكائنات في الكائن الأب واستدعائها.
معامل النشر (obj...
)
معامل النشر (spread operator) يسمح للكائنات التي يمكن المرور على عناصرها (أي أنها iterable) مثل تعابير المصفوفات أو السلاسل النصية أن توسَّع في الأماكن التي تتوقع JavaScript وجود صفر وسيط أو أكثر (عند استدعاء الدوال) أو صفر عنصر أو اكثر (في المصفوفات)، أو نشر كائن في الأمكان التي تتوقع JavaScript وجود صفر زوج أو أكثر من المفتاحي والقيم المرتبطة بها (عند تعريف الكائنات).
معاملات الزيادة والنقصان
وهي تتضمن الزيادة (أو النقصان) قبل الإسناد، والزيادة (أو النقصان) بعد الإسناد.
A++
A--
++A
--A
المعاملات الأحادية
وهي المعاملات التي تجري عمليتها على قيمة واحدة فقط.
delete
: يحذف خاصيةً من كائن.
typeof
: يُعيد سلسلةً نصية تُشير إلى نوع القيمة التي تليه.
~
: معامل NOT الثنائي.
!
: معامل NOT المنطقي.
المعاملات الرياضية
المعاملات الرياضية تأخذ القيم العددية وتجري عليها عمليةً ثم تعيد قيمةً واحدةً.
+
: معامل الجمع.-
: معامل الطرح./
: معامل القسمة.*
: معامل الضرب.%
: معامل باقي القسمة**
: معامل رفع العدد إلى قوة.
المعاملات النسبية
تجري هذه المعاملات عملياتها على قيمةٍ ما وتُعيد قيمةً منطقية (Boolean
) بناءً على قيمة ناتج المقارنة.
in
يُعيد القيمة true
إذا كانت الخاصية المُحدَّدة موجودةً في الكائن أو في سلسلة prototype الخاصة به.
instanceof
يختبر إذا كانت الخاصية prototype
لدالة بانية تظهر في أيّ مكان في سلسلة prototype لأحد الكائنات.
معاملات المقارنة
>
: أقل من.<
: أكبر من.=>
: أقل من أو يساوي.=<
: أكبر من أو يساوي.
معاملات المساواة
هذه المعاملات تعيد قيمةً منطقيةً (Boolean
) بناءً على ناتج اختبار مساواة قيمتين مع بعضهما بعضًا.
==
: معامل المساواة.=!
: معامل عدم المساواة.===
: معامل المطابقة.==!
: معامل عدم المطابقة.
المعاملات الثنائية
تُعامِل المعاملات الثنائية القيم على أنها مجموعة من 32 بت (أصفار وواحدات) وتُعيد قيمًا رقميةً عادية.
-
<<
: معامل الإزاحة إلى اليسار. <<
: معامل الإزاحة إلى اليمين.<<<
: معامل الإزاحة إلى اليمين دون إشارة.&
: معامل AND الثنائي.|
: معامل OR الثنائي.^
: معامل XOR الثنائي.
المعاملات المنطقية
تُستخدَم المعاملات المنطقية عادةً مع القيم المنطقية (Boolean)، وتُعيد قيمةً منطقيةً أيضًا.
&&
: معامل AND المنطقي.||
: معامل OR المنطقي.
المعامل الشرطي الثلاثي
هو المعامل الوحيد في JavaScript الذي يأخذ ثلاثة قيمة ليجري عليها عمليته، ومن الشائع استخدام هذا المعامل كاختصارٍ للتعبير البرمجي if
.
معاملات الإسناد
تُسنِد هذه المعاملات القيمة التي على يسار المعامل بناءً على قيمة ما على يمينه.
=
: معامل الإسناد.=*
: معامل الإسناد والضرب.=/
: معامل الإسناد والقسمة.=%
: معامل الإسناد وحساب باقي القسمة.=+
: معامل الإسناد والجمع.=-
: معامل الإسناد والطرح.=>>
: معامل الإسناد والإزاحة إلى اليسار.=<<
: معامل الإسناد والإزاحة إلى اليمين.=<<<
: معامل الإسناد والإزاحة إلى اليمين دون الحفاظ على الإشارة.=&
: معامل الإسناد وإجراء عملية AND الثنائية.=^
: معامل الإسناد وإجراء عملية XOR الثنائية.=|
: معامل الإسناد وإجراء عملية OR الثنائية.
الإسناد بالتفكيك
الاسناد بالتفكيك (destructuring assignment) يسمح بتفكيك القيم الموجودة في المصفوفات أو خاصيات أحد الكائنات إلى متغيرات مستقلة.
[a, b] = [1, 2]
{a, b} = {a:1, b:2}
معامل الفاصلة
يُقدِّر القيم التي يجري عمليتها عليها (من اليسار إلى اليمين) ويُعيد قيمة آخر قيمة.
الدوال
هذا القسم فيه ما يتعلق بميزات دوال JavaScript التي تستفيد منها في تطوير التطبيقات.
مصادر ومواصفات
- مسودة المعيار ECMAScript Latest Draft.
- معيار ECMAScript 2016.
- معيار ECMAScript 2015 (6th Edition).
- معيار ECMAScript 5.1.
- معيار ECMAScript 3rd Edition.
- معيار ECMAScript 1st Edition .
- توثيق JavaScript في شبكة MDN.