وعلى الرغم من اسمها، لا ترتبط لغة JavaScript إلا بـ Java، إذ يتشارك الاثنان عددًا قليلاً من أوجه التشابه النحوية. كانت بنية JavaScript في تطويرها الأولي وهي مستوحاة من بناء جملة Java وكان يطلق عليها "LiveScript" في المرة الأولى تم شحنها في إصدار تجريبي من Netscape Navigator في 1995، وكلاهما ليتوافق مع بعض من عروض Netscape الأخرى المعروفة، وكإشارة إلى أنّها تبثّ "عرضًا مباشرًا" في المتصفح. أطلقت Microsoft تطبيقها الخاص لـ JavaScript، و"JScript"، بعد ذلك بقليل باستخدام Internet Explorer 3.0.
أرسلت Netscape هذا العمل المبكر إلى Ecma International، وهي مؤسسة وتطوير المعايير الفنية ونشرها لإضفاء الطابع الرسمي على كيفية لغة البرمجة النصية يجب أن تفهمها المتصفحات الأخرى. في عام 1997، شركة Ecma تم إطلاق معيار ECMA-262 على الصعيد الدولي لتوحيد النسخة الأولى من النص البرمجي تسمى ECMAScript. وECMAScript هي المعيار الذي يوجه عملية الإنشاء في لغات برمجة نصية محددة، على سبيل المثال، عملت Microsoft لاحقًا على كل من JScript وActionScript وJavaScript من Adobe لم يعد متوفرًا الآن.
هذا التمييز مهم عند مناقشة جوانب وميزات معينة JavaScript. "ES5" يشير إلى أول بطاقة "إصدار" من إصدار معيار ECMAScript في عام 2009، بعد سنوات من تطوير المزيد من الوجبات السريعة. "ES6" (أو "ES2015") هو اختصار للمعايير التي تم تحديدها في الإصدار السادس من ECMAScript، تم إصداره في عام 2015. بعد ES6، ستكون الإصدارات الجديدة من ECMAScript تُصدِر معيارًا سنويًا، مع إضافة تغييرات وإضافاتها في كل إصدار. يُشار إليه حسب السنة باسم "ES2016" أو "ES2017".
القواعد الأساسية
على عكس اللغات البرمجة المجمَّعة، لا تتم ترجمة JavaScript من الرمز البرمجي الذي يكتبه المستخدم. إلى شكل يستطيع المتصفح فهمه. يتم إرسال نص برمجي إلى المتصفح إلى جانب الأصول مثل الترميز والصور وأوراق الأنماط، يفسّرها المتصفح بنفس الطريقة التي تمت كتابتها: كتسلسل يمكن للإنسان قراءته من حروف Unicode، تحليلها من اليسار إلى اليمين ومن أعلى إلى أسفل.
عندما يتلقّى مترجم JavaScript نصًا برمجيًا، يتم تنفيذه أولاً التحليل المعجم، وتحليل سلسلة الأحرف الطويلة التي يتألف منها النص البرمجي وتحويله إلى عناصر الإدخال المنفصلة التالية:
- الرموز المميزة
- تنسيق أحرف التحكّم
- نهايات الخطوط
- التعليقات
- المسافة البيضاء (تقريبًا والتي تعني دائمًا علامات التبويب والمسافات).
لن تستمر نتائج النص البرمجي بعد إعادة التحميل أو الانتقال من الصفحة الحالية، ما لم تقم بتضمين تعليمات صريحة لإجراء خلاف ذلك في النص.
تتألف تطبيقات JavaScript بشكل عام من العبارات التعبيرات.
العبارات
العبارة هي وحدة تعليمات تتكون من سطر أو أكثر من الرموز التي
أن تمثل إجراءً. على سبيل المثال، يمكنك استخدام العبارة التالية لتعيين
قيمة لمتغيّر باسم myVariable
:
let myVariable = 4;
myVariable;
> 4
ليتم تفسيرها بشكل صحيح، يجب أن تنتهي العبارات بفاصلة منقوطة. ومع ذلك، فإن هذه لا تكون الفواصل المنقوطة مطلوبة دائمًا عند كتابة JavaScript. هناك ميزة تسمى يتيح الإدراج التلقائي للفاصلة المنقوطة للسطر يتم التعامل مع فاصل بعد عبارة كاملة كفاصلة منقوطة إذا كانت الفاصلة المنقوطة إلى حدوث خطأ.
ASI هي تصحيح للأخطاء، وليست جانبًا متساهلاً لـ JavaScript نفسها. لأنّ فقد يؤدي الاعتماد كثيرًا على تصحيح الخطأ هذا إلى الغموض الذي يكسر ، فلا يزال يتعين عليك إنهاء كل عبارة يدويًا بفاصلة منقوطة.
حظر العبارات
تجمع عبارة الحظر أي عدد من العبارات والتوضيحات داخل الزوج
من الأقواس ({}
). يتيح لك هذا الخيار دمج العبارات في أماكن تستخدم فيها لغة JavaScript
ويتوقع واحدًا فقط.
سترى غالبًا عبارات الحظر بجانب
بيانات تدفق التحكم،
مثل if
:
if ( x === 2 ) {
//some behavior;
}
التعبيرات
التعبير هو وحدة من الرموز البرمجية التي ينتج عنها قيمة، وبالتالي يمكن أن يكون
استخدامه حيثما كان من المتوقع وجود قيمة. 2 + 2
هو تعبير يؤدي إلى
القيمة 4
:
2 + 2;
> 4
يُستخدم "عامل التجميع"، وهو زوج مطابق من أقواس التضمين، تجميع أجزاء من التعبير لضمان أن جزء من التعبير كوحدة واحدة. على سبيل المثال، يمكنك استخدام عامل تشغيل تجميع لإلغاء الترتيب الرياضي للعمليات، أو لتحسين سهولة قراءة التعليمة البرمجية:
2 + 2 * 4;
> 10
( 2 + 2 ) * 4;
> 16
let myVariable = ( 2 + 2 );
myVariable;
> 4
كتابة ضعيفة
لغة JavaScript هي لغة مكتوبة بشكل ضعيف، ما يعني أنّ قيمة البيانات لا تحتاج إلى أن يتم تصنيفها بشكل واضح كنوع بيانات محدّد وعلى عكس اللغة المكتوبة بقوة، يمكن لـ JavaScript أن تستنتج النوع المقصود من سياق القيمة وتحويل القيمة إلى هذا النوع. تُسمى هذه العملية الإكراه.
فعلى سبيل المثال، إذا أضفت رقمًا إلى قيمة سلسلة بلغة مكتوبة مكتوبًا بشكل كبير، مثل Python، فإن النتيجة هي خطأ:
>>> "1" + 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects
بدلاً من عرض خطأ، تفرض JavaScript قيمة الرقم على سلسلة ما. ويربط بين القيمتين، وهو السلوك المقصود على الأرجح عند إضافة أي قيمة في سلسلة:
"1" + 1;
> "11"
ويمكن أيضًا فرض أنواع البيانات بشكل صريح. يرتكز المثال التالي على
القيمة الرقمية 100
إلى قيمة سلسلة تبلغ "100"
باستخدام لغة JavaScript المضمَّنة
طريقة toString
:
let myVariable = 100;
typeof myVariable;
> "number"
myVariable = myVariable.toString();
> "100"
typeof myVariable;
> "string"
الحساسية لحالة الأحرف
على عكس HTML ومعظم صفحات CSS، تكون لغة JavaScript نفسها حسّاسة لحالة الأحرف بالكامل. وهذا يعني أنه يجب عليك دائمًا كتابة كل شيء بشكل متسق، بدءًا من السمات والطرق المضمّنة في لغة المعرّفات التي تحدّدها نفسك.
console.log( "Log this." );
> Log this.
console.Log( "Log this too." );
> Uncaught TypeError: console.Log is not a function
const myVariable = 2;
myvariable;
> Uncaught ReferenceError: myvariable is not defined
myVariable;
> 2
مسافة بيضاء
لغة JavaScript غير حساسة للمسافات البيضاء. هذا يعني أن المترجم يتجاهل مقدار المسافة البيضاء المستخدمة ونوعها (علامات تبويب أو مسافات).
console.log( "Log this" );console.log("Log this too");
> "Log this."
> "Log this too."
ومع ذلك، يمكن أن يكون تواجد المسافات البيضاء مهمًا كفاصل بين الرموز المعجمية:
let x;
[الرموز المميزة: [let]
[x]
]
letx;
> Uncaught ReferenceError: letx is not defined
[الرموز المميّزة: [letx]
]
فعندما يتم استخدام المسافة البيضاء لفصل الرموز المعجمية ذات معنى، فإن المحلل اللغوي يتجاهل مقدار ونوع المسافة البيضاء:
let x = 2;
[الرموز المميزة: [let]
[x]
[=]
[2]
]
ينطبق الأمر نفسه على فواصل الأسطر، على الرغم من وجود حالات يمكن أن تتسبب فيها فواصل الأسطر حدوث مشاكل من خلال إنهاء بيان قبل أوانه):
let x
=
2;
[الرموز المميزة: [let]
[x]
[=]
[2]
]
من حيث الأسلوب، غالبًا ما تشغل بعض أنواع العبارات سطرًا واحدًا:
let x = 1;
let y = 2;
في حين أنّ بعض العبارات تستخدم عادةً عدة أسطر:
if ( x == 2 ) {
//some behavior;
}
ومع ذلك، فإن هذه الاصطلاحات تهدف فقط إلى تيسير قراءتها. JavaScript الأمثلة السابقة بنفس الطريقة كما يلي:
let x=1;let y=2;
if(x==2){}
ولهذا السبب، فإن العملية الآلية التي تزيل مسافات بيضاء غير ضرورية من ملفات النصوص البرمجية لتقليل حجم النقل هو خطوة شائعة في إعداد لغة JavaScript لبيئة إنتاج، إلى جانب عدد من التحسينات الأخرى.
يعتمد استخدام أحرف المسافات البيضاء في جافا سكريبت إلى حد كبير على المؤلف إعدادات الصيانة المفضّلة. مشاريع JavaScript مع عدّة مطوّرين غالبًا ما تقترح التعليمات البرمجية المساهمة أو تفرض اصطلاحات مسافات بيضاء معينة ضمان تنسيق ثابت للرموز، على سبيل المثال، استخدام علامات التبويب أو المسافات عبارات متداخلة تضم مسافة بادئة:
let myVariable = 10;
if ( typeof myVariable === "number" ) {
console.log( "This variable is a number." );
if( myVariable > 5 ) {
console.log( "This variable is greater than five." );
}
}
> "This variable is a number."
> "This variable is greater than five."
التحقق من فهمك
ما المقصود بالتعبير؟
لغة JavaScript حساسة لحالة الأحرف.