أساسيات JavaScript
توضح هذه المقالة أساسيات JavaScript۔
YouTube Video
تنفيذ مرحبًا بالعالم!
نظرة عامة على JavaScript
JavaScript هي واحدة من أكثر لغات البرمجة استخدامًا في تطوير الويب۔ تُستخدم بشكل أساسي لإضافة عناصر ديناميكية إلى صفحات الويب، مما يسمح بالتلاعب بواجهة المستخدم، ونقل البيانات، وإنشاء الرسوم المتحركة۔ يمكن أن تعمل على جانب العميل (في المتصفح) وجانب الخادم باستخدام تقنيات مثل Node.js۔ نظرًا لبساطتها ومرونتها، فإنها سهلة التعلم للمبتدئين وتستخدم على نطاق واسع من قبل المطورين المحترفين۔
المتغيرات في جافاسكريبت
المتغيرات في جافاسكريبت تشبه الحاويات التي تُستخدم لتخزين البيانات وإعادة استخدامها.۔ باستخدام المتغيرات، يمكنك الحفاظ على القيم والتعامل معها في برنامجك.۔
تصريح المتغير
في جافاسكريبت، توجد ثلاث كلمات مفتاحية للتصريح عن المتغيرات۔
var
: طريقة قديمة للتصريح عن المتغيرات، ولكن التعامل مع نطاقها معقد ويتطلب الحذر.۔ يعتمد على نطاق الدالة۔
1var x = 10;
let
: تم تقديمه في ES6، وهو طريقة للتصريح عن المتغيرات بنطاق الكتلة.۔ يمكن إعادة تعيينه ولكن لا يمكن إعادة التصريح عنه في نفس النطاق.۔
1let y = 20;
const
: تُستخدم لتصريح المتغيرات التي تكون غير قابلة للتغيير (ثوابت)۔ لها نطاق الكتلة ولا يمكن إعادة تعيينها أو التصريح بها مجددًا بعد التصريح الأولي۔
1const z = 30;
النطاق
للمتغيرات مفهوم النطاق۔
نطاق عام
1var globalVar = 'This is global'; // Global scope
2
3function accessGlobal() {
4 console.log(globalVar); // Able to access global variable
5}
6
7accessGlobal(); // Outputs "This is global"
- يمكن الوصول إلى المتغيرات في النطاق العام من أي مكان۔ المتغيرات المصَرَّح بها باستخدام
var
لها نطاق عام أو نطاق تابع للدالة، بينما المتغيرات باستخدامlet
وconst
لها نطاق الكتلة۔
نطاق الكتلة
1if (true) {
2 let localVar = "This is a block-scoped variable";
3
4 // Accessible inside the brackets
5 console.log(localVar);
6}
7
8// Error: localVar cannot be used outside of this scope
9console.log(localVar);
-
نطاق الكتلة: المتغيرات المصَرَّح بها باستخدام
let
أوconst
تكون صالحة فقط داخل{}
(الأقواس المتعرجة)۔ -
يحدث خطأ عند الوصول من خارج
{}
(الأقواس المعقوفة)۔
نطاق الدالة
1function myFunction() {
2 var functionScoped = 'This is function scope';
3 // Accessible inside the function
4 console.log(functionScoped);
5
6 if (true) {
7 var functionVar = 'This is also function scope';
8 }
9 // functionVar can be used inside of the fucntion
10 console.log(functionVar);
11}
12
13myFunction(); // Outputs "This is function scope"
14
15// Error: functionScoped is not defined
16console.log(functionScoped);
-
نطاق الدالة: المتغيرات والدوال المعرفة داخل الدالة لا يمكن الوصول إليها من خارجها۔ المتغيرات المصرّح بها داخل دالة باستخدام
var
تنتمي إلى هذا النطاق۔ -
في هذا المثال، يمكن الوصول إلى المتغير
functionVar
من خارج الأقواس المعقوفة{}
طالما أنه داخل نطاق الدالة.۔ من ناحية أخرى، يؤدي الوصول إلى المتغيرfunctionScoped
من خارج نطاق الدالة إلى حدوث خطأ.۔
لذا، المتغيرات المصرّح بها باستخدام var
لها نطاق خاص بالدوال فقط وليس نطاق الكتلة، مما يشكل خطراً باستخدامها في نطاقات غير متوقعة۔ يفضل استخدام const للمتغيرات التي لا تتغير وعادةً استخدام let، مع تجنب استخدام var قدر الإمكان۔
أنواع البيانات
يمكن لمتغيرات JavaScript تخزين قيم من أنواع بيانات مختلفة۔ توجد string
للتعامل مع النصوص وnumber
للتعامل مع القيم العددية۔
أنواع البيانات الرئيسية هي كما يلي:۔
1// Number: Numeric type (integer and floating point number)
2let integerNumber = 42;
3let floatNumber = 3.14;
4console.log("Number (Integer):", integerNumber);
5console.log("Number (Float):", floatNumber);
6
7// String: String type
8let text = "Hello, JavaScript!";
9console.log("String:", text);
10
11// Boolean: Boolean type (true or false)
12let isJavaScriptFun = true;
13let isError = false;
14console.log("Boolean (true):", isJavaScriptFun);
15console.log("Boolean (false):", isError);
16
17// Null: Explicitly represents "nothing"
18let emptyValue = null;
19console.log("Null:", emptyValue);
20
21// Undefined: The default value assigned to an uninitialized variable
22let notDefined;
23console.log("Undefined:", notDefined);
24
25// Symbol: A data type for creating unique values
26let uniqueKey = Symbol("id");
27console.log("Symbol:", uniqueKey);
- الأنواع الأولية:
number
: للتعامل مع القيم العددية (الأعداد الصحيحة والأعداد العشرية)۔string
: للتعامل مع السلاسل النصية۔boolean
: يعالج القيم البوليانيةtrue
أوfalse
۔null
: يمثل صراحةً قيمة 'لا شيء'۔- غير معرّف: قيمة يتم تعيينها تلقائيًا للمتغيرات التي لم تتم تهيئتها۔
Symbol
: نوع بيانات يستخدم لإنشاء قيم فريدة۔
1// Object: A data structure that holds multiple properties
2let person = {
3 name: "Alice",
4 age: 25,
5 isStudent: false
6};
7console.log("Object:", person);
8console.log("Object Property (name):", person.name);
9console.log("Object Property (age):", person.age);
10
11// Array: A list that holds multiple values
12let numbers = [10, 20, 30, 40];
13console.log("Array:", numbers);
14console.log("Array Element (index 0):", numbers[0]);
15
16// Function: A function object
17function greet(name) {
18 return "Hello, " + name + "!";
19}
20console.log("Function Output:", greet("Bob"));
21
22// Another way to define a function using arrow syntax
23let add = (a, b) => a + b;
24console.log("Arrow Function Output (3 + 5):", add(3, 5));
- أنواع الكائنات:
الكائن
: هيكل بيانات يحتوي على خصائص متعددة۔Array
: قائمة تحتوي على قيم متعددة۔Function
: كائن دالة۔
تعيين وإعادة تعيين للقيم المتغيرة
يمكن إعادة تعيين المتغيرات المعلنة باستخدام let
أو var
، لكن const
لا يمكن إعادة تعيينها بمجرد إعلانها۔
1let score = 100;
2score = 150; // Correct
3
4const pi = 3.14;
5pi = 3.14159; // Error
رفع المتغيرات
في JavaScript، هناك ظاهرة يتم فيها 'رفع' تعريفات المتغيرات إلى قمة نطاقها۔ المتغيرات المعلنة باستخدام var
تُرفع، ولكن استخدام let
أو const
قبل الإعلان عنها يؤدي إلى خطأ۔
1console.log(a); // undefined
2var a = 10;
3console.log(a); // 10
- في هذه الحالة، يتم رفع المتغيرات المُعلنة باستخدام
var
ويتم إخراج قيمها.۔
1console.log(b); // ReferenceError
2let b = 20;
- المتغيرات المُعلنة باستخدام
let
لا يتم رفعها، مما يؤدي إلى حدوث خطأ.۔
الاستخدام الصحيح للمتغيرات
خذ بعين الاعتبار النقاط التالية للاستخدام الصحيح للمتغيرات۔
- يفضل استخدام
const
وتجنب استخدامvar
۔ - اتبع قواعد تسمية المتغيرات۔
- استخدم
camelCase
، مثلuserName
أوtotalPrice
۔ - تجنب الأسماء الغامضة مثل
data
أوvalue
، واستخدم أسماء ذات مغزى لتحسين القابلية للقراءة۔ - لا يمكن لاسم المتغير أن يبدأ برقم، لذا فإن الأسماء مثل
1variable
غير مسموح بها۔
- استخدم
- الاستخدام المفرط للمتغيرات العامة يمكن أن يسبب غموضاً في النطاق ويؤدي إلى الأخطاء، لذا تجنب استخدامها قدر الإمكان۔
الملخص
var
: طريقة قديمة لإعلان المتغيرات ذات نطاق الوظيفة۔let
: متغير ذو نطاق كتلة يمكن إعادة تعيينه۔const
: متغير ذو نطاق كتلة لا يمكن إعادة تعيينه (ثابت)۔- من المهم استخدام المتغيرات وفقًا لأنواع بياناتها والانتباه إلى نطاقها۔
ما هي أحرف الهروب في JavaScript؟
أحرف الهروب هي طريقة تُستخدم لتمثيل الأحرف ذات المعاني الخاصة داخل النصوص العادية۔ في JavaScript، يتم تقديم أحرف الهروب باستخدام الخط المائل العكسي \
لإضفاء تأثيرات خاصة على النص أو لإدراج أحرف التحكم۔ أحرف الهروب مفيدة لإدراج عناصر مثل السطور الجديدة، علامات التبويب، أو علامات الاقتباس داخل النص۔
أمثلة على استخدام أحرف الهروب
فيما يلي بعض أمثلة الأكواد التي تستخدم أحرف الهروب۔
الهروب من علامات الاقتباس المزدوجة والمفردة
استخدم أحرف الهروب لتمثيل علامات الاقتباس المزدوجة أو المفردة داخل النص۔
1const singleQuote = 'It\'s a beautiful day!';
2console.log(singleQuote); // Output: It's a beautiful day!
3
4const doubleQuote = "He said, \"Hello there!\"";
5console.log(doubleQuote); // Output: He said, "Hello there!"
الهروب من الخط المائل العكسي
لإدراج خط مائل عكسي في النص نفسه، استخدم الهروب بكتابة \
۔
1const path = "C:\\Program Files\\MyApp";
2console.log(path); // Output: C:\Program Files\MyApp
الهروب من السطور الجديدة وعلامات التبويب
يمكنك إدراج سطور جديدة وعلامات تبويب لجعل النصوص الطويلة أكثر قابلية للقراءة۔
1const multiline = "First line\nSecond line\nThird line";
2console.log(multiline);
3// Output:
4// First line
5// Second line
6// Third line
7
8const tabbed = "Column1\tColumn2\tColumn3";
9console.log(tabbed); // Output: Column1 Column2 Column3
الهروب من أحرف Unicode
استخدام تسلسلات الهروب الخاصة بـ Unicode يتيح لك تمثيل أحرف معينة باستخدام رموز سداسية عشرية۔
1const smiley = "\u263A"; // Copyright Mark
2console.log(smiley);
ملاحظات
الاستخدام المفرط لأحرف الهروب قد يضر بقابلية قراءة الكود
الاستخدام الزائد عن الحد لأحرف الهروب يمكن أن يقلل من قابلية قراءة الكود الخاص بك۔ من المهم بشكل خاص استخدام أحرف الهروب بحكمة في النصوص الطويلة۔
فكّر في استخدام النصوص النموذجية
في JavaScript، النصوص النموذجية باستخدام علامات التراجع تسمح لك بإدراج سطور جديدة أو تعبيرات مدمجة دون الحاجة إلى أحرف الهروب۔
1const message = `This is a message
2that spans multiple lines`;
3console.log(message);
4// Output:
5// This is a message
6// that spans multiple lines
الملخص
أحرف الهروب ضرورية لتمثيل الأحرف الخاصة أو أحرف التحكم داخل النصوص۔ من خلال الهروب من علامات الاقتباس الفردية أو المزدوجة وإضافة السطور الجديدة أو علامات التبويب، يمكنك إنشاء نصوص أكثر مرونة۔ ومع ذلك، فإن الاستخدام المفرط لأحرف الهروب يمكن أن يجعل الكود أكثر صعوبة في القراءة، لذلك فكّر في استخدام النصوص النموذجية عند الحاجة۔
إصدارات JavaScript
تمتلك JavaScript مواصفة قياسية تُعرف باسم ECMAScript (ES)۔ تطورت JavaScript بناءً على هذه المواصفة القياسية۔ فيما يلي وصف موجز للإصدارات الرئيسية۔
-
ES3 (1999)
أول إصدار تم اعتماده على نطاق واسع۔ تم وضع القواعد الأساسية والمزايا الرئيسية۔
-
ES5 (2009)
تم تقديم وضع
strict mode
، وإضافة ميزات جديدة مثلArray.prototype.forEach
، وObject.keys
، وغيرها.۔ -
ES6 / ES2015 (2015)
تم إجراء تحديث رئيسي لـ JavaScript۔ تم تقديم العديد من الميزات الأساسية لجافاسكريبت الحديثة، مثل
let
،const
،arrow functions
،classes
،promises
،modules
، وغيرها.۔ -
إي إس7 / إي إس2016 (2016)
تمت إضافة
Array.prototype.includes
وعامل الأس (**)
.۔ -
إي إس8 / إي إس2017 (2017)
تم تقديم
async/await
، مما جعل كتابة العمليات غير المتزامنة أبسط.۔ -
إي إس9 / إي إس2018 (2018)
تمت إضافة المكررات غير المتزامنة وخصائص
Rest/Spread
.۔ -
إي إس10 / إي إس2019 (2019)
تمت إضافة
flatMap
وObject.fromEntries
.۔ -
إي إس11 / إي إس2020 (2020)
تمت إضافة
Optional Chaining (?.)
وNullish Coalescing Operator (??)
، مما يسمح بكتابة الكود بطريقة أبسط وأكثر أماناً.۔ -
ES12 / ES2021 (2021)
تمت إضافة
String.prototype.replaceAll
وPromise.any
، من بين ميزات أخرى۔ -
ES13 / ES2022 (2022)
تمت إضافة
Array.prototype.at
وحقولprivate
في الصفوف (#field
)، من بين ميزات أخرى۔ -
ES14 / ES2023 (2023)
تمت إضافة
Array.prototype.toSorted
وSymbol.prototype.description
، من بين ميزات أخرى۔ -
ES15 / ES2024 (2024)
تمت إضافة
Promise.withResolvers
لإدارةPromise
بشكل أسهل وArrayBuffer
قابل للتغيير في الحجم، من بين ميزات أخرى۔
يتم تحديث جافاسكريبت الحالية كل عام، وتُضاف ميزات جديدة حتى في أحدث الإصدارات.۔
يمكنك متابعة المقالة أعلاه باستخدام Visual Studio Code على قناتنا على YouTube.۔ يرجى التحقق من القناة على YouTube أيضًا.۔