في هذا الدرس 10تصفّح المواضيع
JavaScript Constants
الثوابت في الجافاسكريبت
JavaScript Constants الثوابت في الجافاسكريبت
الثابت Constant وهي عكس المتغيرات في لغة البرمجة حيث يمكننا اجراء تحديثات او اعادة تعيين القيم في المتغيرات ولكن في الثوابت لا يمكننا فعل ذلك لان لا تسمح لغة جافا سكريبت بذلك فيما يخص إعادة الإسناد إلى الاسم.
تم انشاء ال Constant في الإصدار ES6 في عام 2015 ، والتي تستخدم لتعريف ثابت جديد في JavaScript, ,ويجب تهيئة الربط عند التصريح ولا يمكن إعادة إسناده لاحقًا. إذا كانت القيمة كائنًا أو مصفوفة فيمكن تعديل خصائصها أو عناصرها؛ const لا تجمّد المحتويات.
الثوابت Constant هي عبارة عن حاوية container يتم تخزين بداخلها قيمة معينة Value عن طريق ال Names الأسماء الخاصة بها ونستطيع استرجاعها في اي وقت ولا يمكن إعادة إسناد قيمة أخرى إلى الاسم أثناء التشغيل.


Constant syntax
تعريف او الاعلان علي متغير في لغة جافا سكريبت
Constant syntax تعريف او الاعلان علي متغير في لغة جافا سكريبت
تأتي الثوابت Constants علي هيئة:
- [ const ] Declare keyword وهو اعلان او اخبار المتصفحات بلغة جافا سكريبت اننا قمنا بانشاء ثابت جديد.
- [ Name ] ينطبق علي الاسماء شروط وقواعد محددة سنتعرف عليها في هذا الدرس.
- [ = ] assign Operators وهي علامات رياضية لتتم عملية التعيين اي نعلن ان الثابت يساوي قيمة معينة ولا نستطيع اعادة تعيينة بعكس المتغير.
- [ Value ] وهي القيم التي تخزن داخل الثوابت يمكن تخزين اي قيمه من ال Data Types في لغة الجافا سكريبت وتكون نصوص او رموز او كلمات محجوزه او مصفوفات arrays او كائنات objects او تساوي ثابت اخر.
النص يتم حفظه في منطقة الذاكره مع اسم الثابت. نستطيع الوصول الي القيمة التي بداخل الثابت عن طريق اسم الثابت constant name.
Constant Syntax
Constants naming rules
قواعد او شروط تسمية الثوابت
Constants naming rules قواعد او شروط تسمية الثوابت
يمكنك تسمية الثابت في لغة Java Script إلى أي شيء تريده، ولكن هناك قيود او شروط علي الاسماء. بشكل عام .
- الأحرف اللاتينية والأرقام شائعة في الأسماء، لكن المعرّفات ليست مقصورة على ASCII؛ ولا يجوز أن يبدأ الاسم برقم.
- تسمح JavaScript بكثير من أحرف Unicode، ومنها العربية؛ مثل let الاسم = "أحمد";. استخدام الأسماء اللاتينية عرف شائع في الفرق وليس شرطًا في اللغة.
- لا تستخدم الأرقام في بداية الثوابت. هذا غير مسموح به ويسبب خطأ.
- لا تستخدم رموز مثل @#%^&*-)( في اسماء الثوابت هذا غير مسموح به ويسبب خطأ.
- الرمزين المسموح بهما هم علامة ال Dollar sign $ وعلامة underscore _.
- يمكن استخدام underscore _ في بداية الاسم أو وسطه؛ ولا تمنح الاسم خصوصية أو معنى خاصًا تلقائيًا.
- يمكن ان يحتوي اسم الثابت Variable علي أحرف وأرقام لا تبدأ اسم الثابت Variable بأرقام.
- الثوابت حساسة لحالة الأحرف - لذا فإن username ثابت مختلف عن USERNAME.
- يفضل كتابة الثوابت بحروف كبيرة Capitalize لكي نفرق بينها وبين الثوابت.
- تحتاج أيضًا إلى تجنب استخدام كلمات JavaScript المحجوزة كأسماء ثوابت - بهذا ، نعني الكلمات التي تشكل البنية الفعلية لجافا سكريبت ! مثل var و function و let و for كأسماء متغيرات او ثوابت. تتعرف المستعرضات عليها كعناصر تعليمات برمجية مختلفة ، وبالتالي ستحصل على أخطاء. هذه قائمة بالاسماء المحجوزه.
هذه نماذج من الاسماء المتطابقه مع الشروط.
const USERNAME= "Ahmed";
const USERNAME1 = "Mohamed";
const USERNAME2 = "Aly";
const _USERNAME = "Khaled";
const USER_NAME= "Sameh";
const $USERNAME= "Saleh";
هذه امثلة علي اسماء ثوابت متطابقة مع الشروط العلوية.
const AGE = 22;
const USERNAME = "closetag";
const MYNAME = "Ahmed Aly";
const COLOR = "blue";
const USER_NAME= "Mohamed Adly";
const PASSWORD = 258622;
const EMAIL= "[email protected]";
const EMAILADDRESS= "[email protected]";
const EMAIL_ADDRESS= "[email protected]";
const $EMAIL = "[email protected]";
المثال يتعمد أخطاء SyntaxError: 2 يبدأ برقم، وconst كلمة محجوزة، وMY AGE يحتوي مسافة. بقية الأسماء مثل A و_12 وDocument صالحة نحويًا؛ وقد تكون بعض الأسماء غير واضحة رغم صحتها.
const 2 = 10;
const A = 5;
const _12 = "ahmed";
const myage = 25;
const my_age = 25;
const const = true;
const Document = 10;
const DSFGSFGSDFGDFGSDFGDFGD= "add";
const SDFASDFASDFASDFWERTWERWERWER= "SDFASDFASDFASDFWERTWERWERWER";
const MY AGE = "SDFASDFASDFASDFWERTWERWERWER";
استخدام علاامة الدولار dollar sign مع الثوابت في البدايه وفي النهاية وفي المنتصف.
const $USERNAME= "CloseTag";
const PASSWORD$ = 123;
const U$RL = "www.closetag.com";
document.write("<b>"+ $USERNAME +"<b><br>");
document.write("<b>"+ PASSWORD$+"<b><br>");
document.write("<b>"+ U$RL +"<b>");
Declaring constant
تعريف الثوابت في لغة الجافا سكريبت
Declaring constant تعريف الثوابت في لغة الجافا سكريبت
علي عكس المتغيرات فأن طريقة انشاء الثابت في ال JavaScript تسمي declaring a constant يشترط تعيين قيمة عند اعلان الثابت const keyword, وذا قمنا بالاعلان فقط بدون تعيين قيمة الثابت فسوف يحدث خطأ اثناء التشغيل, ايضاً بعكس المتغير لا تعني القيمة في هذة الحالة undefined.
الاعلان عن ثابت بدون تعيين قيمة في نفس السطر يحدث خطأ شاهدة في ال Console : هذا الخط Uncaught SyntaxError: Missing initializer in const declaration
هذه هي الطريقة الصحيحه للأعلان ثم تعيين قيمة الثابت في نفس السطر.
نستطيع تعريف مجموعة ثوابت في سطر واحد قد يبدو اقل في عدد السطور, ولكن لا نوصي بهذه الطريقه لانها غير قابلة للقراءه وغير منظمة Not Readable.
تكتب ايضاً بهذه الطريق بدلاً من استخدام اكثر من مره مفتاح var keyword وهذه طريقة صحيحة ومستخدمة ايضاً.
Declaring constant errors
الاخطاء الناتجه عن اعلان الثوابت
Declaring constant errors الاخطاء الناتجه عن اعلان الثوابت
- يجب تعيين قيمة الثابت الذي تقوم بتحديده ك " const " في نفس الخطوة التي تقوم بأنشائه خلالها.
- لا يمكن تعديل قيمة الثابت من النوع "const" بعد انشائه وتعيين القيمة الخاصة به.
- لا يمكنن تغيير نوع اي متغير الي const بعد انشائه.
غير مسموح
في هذه الحالة سوف يحدث خطأ لاننا قمنا بتعريف الثابت دون اضافة او تعيين قيمه له ثم قمنا بتغيير قيمته بعد ذلك فهذا شئ غير منطقي لان القيمه لا تتغير في الثوابت.
غير مسموح
لا نستطيع تعيين القيم بهذا الشكل لانه سوف يحدث خطأ اثناء التشغيل.
غير مسموح
لا نستطيع تعريفها بهذا الشكل ايضاً
Uppercase constants
الثوابت ذات الأحرف الكبيرة في الجافاسكريبت
Uppercase constants الثوابت ذات الأحرف الكبيرة في الجافاسكريبت
هناك قاعدة متعارف عليها بين المبرمجين في معظم لغات البرمجة استخدام احرف كبيرة مع الثوابت فبدلاً من username بحروف صغيرة نستخدم USERNAME باحرف كبيرة وقبلها كلمة const.
استخدم احرف كبيرة عند الاعلان عن الثوابت
const $USERNAME= "CloseTag";
const PASSWORD$ = 123;
const U$RL = "www.closetag.com";
استخدم احرف صغيرة عند الاعلان عن الثوابت لا يعد خطأ ولكن قاعدة والشائع حروف كبيرة بتفرق بينها وبين المتغيرات.
const $username = "CloseTag";
const password$ = 123;
const u$rl = "www.closetag.com";
Initializing a constant - Initialization
تهيئة او تعين الثابت في لغة جافا سكريبت
Initializing a constant - Initialization تهيئة او تعين الثابت في لغة جافا سكريبت
تهيئة الثوابت في لغة جافا سكريبت Initializing a constant :
يجب عند انشاء الثابت تعيين القيمة مباشرة حتي لا يحدث خطأ برمجي اثناء التشغيل ولا يمكن اعطاء قيمة اولية ثم تعديلها او تحديث القيمه لاحقاً بعكس المتغيرات variables.
- يجب علينا عند انشاء الثوابت ان نقوم بعملية تهيئه في نفس الوقت وفي نفس السطر.
يوجد نوعمن التهيئة Initializing وهناك نوعين منها وهم :
- Explicit : تطلق علي المتغيرات والثوابت التي تم تعيين قيمتهم initialization عند وقت انشائها declaration.
- implicit : تطلق علي المتغيرات التي تم انشائها declaration في خطوة تسبق أضافة قيمة بداخلها initialization وهذه للمتغيرات فقط لا تتوافق مع الثوابت.

Explicit
لا تعمل هذه الطريقة مع الثوابت Implicit
Arithmetic operators as Constants javascript
العمليات الحسابية مع الثوابت بالجافا سكريبت
Arithmetic operators as Constants javascript العمليات الحسابية مع الثوابت بالجافا سكريبت
لغة ال JavaScript في الثوابت مثل الجبر يمكنك اجراء عمليات حسابية علي الثوابت عن طريق العلامات.
JavaScript Arithmetic Operators عوامل الجافا سكريبت والثوابت:
- Addition ( + ) : نستطيع جمع ثابتين أو اكثر في لغة جافا سكريبت عن طريق عامل الجمع ويجب الثابت يكون من النوع Number.
- Subtraction ( - ) : نستطيع طرح ثابتين أو اكثر في لغة جافا سكريبت عن طريق عامل الطرح ويجب الثابت يكون من النوع Number.
- Multiplication (*) : نستطيع ضرب ثابتين أو اكثر في لغة جافا سكريبت عن طريق عامل الضرب ويجب الثابت يكون من النوع Number.
- Division (/) : نستطيع قسمة ثابتين أو اكثر في لغة جافا سكريبت عن طريق عامل القسمة ويجب الثابت يكون من النوع Number.
- Modulus (%) : نستطيع ان نحصل علي باقي القسمة بين ثابتين في لغة جافا سكريبت عن طريق عامل النسبة المئوية ويجب الثابت يكون من النوع Number.

عملية الجمع والطرح Addition and subtraction في الثوابت بلغة جافا سكريبت
const PRICE = 1000;
const DISCOUNT = 200;
const SUB_TOTAL = PRICE - DISCOUNT;
const TAX = 14;
const TOTAL = SUB_TOTAL + TAX;
document.write("<b> Sub Total : "+ SUB_TOTAL +"<b><br>");
document.write("<b> Total : "+ TOTAL +"<b><br>");
عملية الضرب والقسمة Multiplication and Division في الثوابت بلغة جافا سكريبت
const PRICE = 1000;
const DISCOUNT = 200;
const QUANTATIY = 3 ;
const SUB_TOTAL = (QUANTATIY * PRICE ) - DISCOUNT ;
const TAX = 14;
const TERM = (SUB_TOTAL + TAX) / 2;
const TOTAL = TERM ;
document.write("<b> Sub Total : "+ SUB_TOTAL +"<b><br>");
document.write("<b> Total : "+ TOTAL +"<b><br>");
عملية خارج القسمة او المتبقي بعد قسمة عددين Modulus في الثوابت بلغة جافا سكريبت
const ALL_PRICE = 1000;
const PRODUCTS_NUMBER = 300;
const REMANING = ALL_PRICE % PRODUCTS_NUMBER ;
document.write("<b> Remaining : "+ REMANING +"<b><br>");
يمكن جمع متغيرين او اكثر اذا كانت القيمة نصوص ففي هذه الحاله لن تتم كعملية حسابية ولكن هي اضافة النصوص بجوار بعضها لبعض باستخدام علامة Addition ( + )
const FIRST_NAME = "Ahmed";
const LAST_NAME = "Hamza";
const FULL_NAME = FIRST_NAME + " " + LAST_NAME ;
document.write("<b> Full Name Is : "+ FULL_NAME +"<b><br>");
Declare constant without the const Keyword
انشاء ثابت بدون const Keyword
Declare constant without the const Keyword انشاء ثابت بدون const Keyword
لإنشاء ربط ثابت استخدم const مع قيمة أولية. الإسناد إلى اسم دون تصريح لا ينشئ ربطًا ثابتًا.
في script تقليدي غير صارم، قد ينشئ الإسناد إلى اسم غير معلن خاصية على الكائن العام. هذا ليس تصريحًا بـvar أو let؛ وفي strict mode أو modules ينتج ReferenceError. استخدم تصريحًا صريحًا مناسبًا.
Hoisting in constants in Java Script
عملية الرفع في الثوابت في لغة جافا سكريبت
Hoisting in constants in Java Script عملية الرفع في الثوابت في لغة جافا سكريبت
يسمح var بالوصول إلى الربط قبل موضع التصريح، ويبدأ بقيمة undefined. أما const فيبقى غير مهيّأ داخل منطقة Temporal Dead Zone (TDZ) حتى تنفيذ التصريح؛ والوصول إليه قبلها ينتج ReferenceError. يجب أن يتضمن تصريح const قيمة أولية حتى يكون المثال صالح الصياغة ويختبر TDZ فعلًا.
Hoisting
Temporal Dead Zone (TDZ): المثال التالي يتعمد ReferenceError عند الوصول إلى CAR قبل تهيئته.
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.