diff --git a/1-js/02-first-steps/01-hello-world/1-hello-alert/task.md b/1-js/02-first-steps/01-hello-world/1-hello-alert/task.md index afed6a91d..3aff152cf 100644 --- a/1-js/02-first-steps/01-hello-world/1-hello-alert/task.md +++ b/1-js/02-first-steps/01-hello-world/1-hello-alert/task.md @@ -2,11 +2,11 @@ importance: 5 --- -# Show an alert +# أظهر تحذير -Create a page that shows a message "I'm JavaScript!". +اكتب صفحة تعرض الرسالة "I'm JavaScript!". -Do it in a sandbox, or on your hard drive, doesn't matter, just ensure that it works. +قم بها في sandbox .او في قرصك المحلي , لا يهم , المهم ان تتأكد من عمله [demo src="solution"] diff --git a/1-js/02-first-steps/01-hello-world/2-hello-alert-ext/solution.md b/1-js/02-first-steps/01-hello-world/2-hello-alert-ext/solution.md index f42c41e6d..98ba9aa91 100644 --- a/1-js/02-first-steps/01-hello-world/2-hello-alert-ext/solution.md +++ b/1-js/02-first-steps/01-hello-world/2-hello-alert-ext/solution.md @@ -1,8 +1,8 @@ -The HTML code: +نص الـHTML: [html src="index.html"] -For the file `alert.js` in the same folder: +من اجل الملف `alert.js` في نفس المجلد: [js src="alert.js"] diff --git a/1-js/02-first-steps/01-hello-world/2-hello-alert-ext/task.md b/1-js/02-first-steps/01-hello-world/2-hello-alert-ext/task.md index 26168d6a7..11aa6fc32 100644 --- a/1-js/02-first-steps/01-hello-world/2-hello-alert-ext/task.md +++ b/1-js/02-first-steps/01-hello-world/2-hello-alert-ext/task.md @@ -2,8 +2,8 @@ importance: 5 --- -# Show an alert with an external script +# أظهر تحذير باستخدام سكريبت خارجي -Take the solution of the previous task . Modify it by extracting the script content into an external file `alert.js`, residing in the same folder. +قم باخذ الحل السابق . عدل عليه باستخراج محتوى السكريبت الى ملف خارجي `alert.js` , مع وضعه في نفس المجلد. -Open the page, ensure that the alert works. +أفتح الصفحة وتأكد من انه يعمل. diff --git a/1-js/02-first-steps/01-hello-world/article.md b/1-js/02-first-steps/01-hello-world/article.md index c414004ce..a59ab1c29 100644 --- a/1-js/02-first-steps/01-hello-world/article.md +++ b/1-js/02-first-steps/01-hello-world/article.md @@ -19,7 +19,7 @@ -

Before the script...

+

قبل السكريبت...

*!* */!* -

...After the script.

+

...بعد السكريبت.

@@ -60,7 +60,7 @@ //--> ``` - لا يتم استخدام هذه الخدعة في جافا سكريبت الحديثة. تخفي هذه التعليقات شفرات جافا سكريبت في المتصفحات القديمة التي لاتعرف كيفية عمل معالجة للوسم ` ``` -لكي نرفق العديد من النصوص البرمجية، استخدم To attach several scripts، use الوسوم بصورة مضاعفة: +لكي نرفق العديد من النصوص البرمجية، استخدم الوسوم بصورة مضاعفة: ```html @@ -106,7 +106,7 @@ ```html ``` diff --git a/1-js/02-first-steps/04-variables/article.md b/1-js/02-first-steps/04-variables/article.md index 89d21f287..89356c2b8 100644 --- a/1-js/02-first-steps/04-variables/article.md +++ b/1-js/02-first-steps/04-variables/article.md @@ -135,18 +135,18 @@ alert(hello); // Hello world! alert(message); // Hello world! ``` -````warn header="Declaring twice triggers an error" -A variable should be declared only once. +````warn header="يؤدي التعريف مرتين الى حدوث خطأ" +يجب تعريف المتغير مره واحدة فقط. -A repeated declaration of the same variable is an error: +التعريف المتكرر لنفس المتغير خطأ: ```js run let message = "This"; -// repeated 'let' leads to an error +// تكرار 'let' يؤدي الى خطأ let message = "That"; // SyntaxError: 'message' has already been declared ``` -So, we should declare a variable once and then refer to it without `let`. +اذا يجب علينا تعريف المتغير مرة واحدة ثم نشير اليه بدون استخدام `let`. ```` ```smart header="Functional languages" @@ -226,7 +226,7 @@ let return = 5; // وأيضا لا تستطيع تسميته "return", خطأ! بشكل طبيعي, نحن نحتاج تعريف المتغير قبل أستخدامه. ولكن في الماضي ، كان من الممكن من الناحية الفنية إنشاء متغير بمجرد تخصيص القيمة بدون استخدام `let`. وهذه الطريقة مازالت تعمل حتي الان أذا لم نكتب `use strict` في الملفات ولكن للحصول علي توافق مع الكتابة القديمة. ```js run no-strict -// note: no "use strict" in this example +// لاحظ: لم نستخدم "use strict" في هذا المثال num = 5; // المتغير "num" أنشئ ولم يكن موجود diff --git a/1-js/02-first-steps/05-types/article.md b/1-js/02-first-steps/05-types/article.md index d555a8c24..8c8d20baa 100644 --- a/1-js/02-first-steps/05-types/article.md +++ b/1-js/02-first-steps/05-types/article.md @@ -86,7 +86,7 @@ const bigInt = 1234567890123456789012345678901234567890n; الأن `BigInt` متوافق مع فايرفوكس/كروم/ايدج/سفاري ،لكن ليست متوافقة مع إنترنت اكسبلورر ``` -You can check [*MDN* BigInt compatibility table](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt#Browser_compatibility) to know which versions of a browser are supported. +يمكنك التحقق من [*MDN* BigInt compatibility table](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt#Browser_compatibility) لمعرفة اي نسخة من المتصفح مدعومة. ## النص @@ -98,7 +98,7 @@ let str2 = 'Single quotes are ok too'; let phrase = `can embed another ${str}`; ``` -In JavaScript, there are 3 types of quotes. +فالـ JavaScript, هناك 3 انواع من علامات التنصيص. 1. علامات التنصيص المزدوجة: `"Hello"`. 2. علامات التنصيص المفردة: `'Hello'`. @@ -128,12 +128,12 @@ alert( "the result is ${1 + 2}" ); // the result is ${1 + 2} (علامات ال سنغطي النصوص بشئ من التفصيل في هذا الفصل . ```smart header="لا يوجد نوع *character* ." -في بعض اللغات، يوجد نوع خاص "character" يعبر عن الحرف الواحد. For example,على سبيل المثال، في لغة سي وجافا يدعى "char". +في بعض اللغات، يوجد نوع خاص "character" يعبر عن الحرف الواحد. على سبيل المثال، في لغة سي وجافا يدعى "char". في جافا سكريبت، لا يوجد مثل هذا النوع. يوجد نوع واحد فقط: `string`. النص قد يتكون من صفر حرف (نص فارغ), حرف واحد أو أكثر. ``` -## Boolean (logical type) +## Boolean (نوع منطقي) النوع boolean لديه قيمتين فقط: `صواب` and `خطأ`. @@ -156,7 +156,7 @@ alert( isGreater ); // نعم (نتيجة المقارنة هي "نعم") سنغطي القيم المنطقية بشكل أعمق في الفصل . -## The "null" value +## القيمة "null" القيمة الخاصة `null` لا ينتمي إلى أي نوع تم شرحه بالأعلى. @@ -172,7 +172,7 @@ let age = null; الكود أعلاه يوضح أن `age` غير معروفة. -## The "undefined" value +## القيمة "undefined" القيمة الخاصة `undefined` أيضاً قيمة محايدة. أنها تصنع نوع من نفسها مثل `null`. @@ -199,7 +199,7 @@ alert(age); // "undefined" ...لكن لا ننصح بذلك. في الطبيعي، الشخص يستخدم `null` لتعيين قيمة "فارغ" أو "غير معروف" لمتغير، بينما `undefined` محجوزة كقيمة إفتراضية أساسية للأشياء غير المعينة. -## Objects and Symbols +## الكائنات و الرموز النوع `كائن` هو نوع خاص. diff --git a/1-js/02-first-steps/08-operators/1-increment-order/solution.md b/1-js/02-first-steps/08-operators/1-increment-order/solution.md index f17fe7c7c..3a98125d5 100644 --- a/1-js/02-first-steps/08-operators/1-increment-order/solution.md +++ b/1-js/02-first-steps/08-operators/1-increment-order/solution.md @@ -9,10 +9,10 @@ ```js run no-beautify let a = 1, b = 1; -alert( ++a ); // 2, prefix form returns the new value -alert( b++ ); // 1, postfix form returns the old value +alert( ++a ); // 2, prefix ترجع القيمة الجديدة +alert( b++ ); // 1, postfix ترجع القيمة القديمة -alert( a ); // 2, incremented once -alert( b ); // 2, incremented once +alert( a ); // 2, الزيادة 1 +alert( b ); // 2, الزيادة 1 ``` diff --git a/1-js/02-first-steps/08-operators/2-assignment-result/solution.md b/1-js/02-first-steps/08-operators/2-assignment-result/solution.md index 36dc005e7..1f7e0fbb8 100644 --- a/1-js/02-first-steps/08-operators/2-assignment-result/solution.md +++ b/1-js/02-first-steps/08-operators/2-assignment-result/solution.md @@ -1,5 +1,5 @@ الإجابة هي: -- `a = 4` (multiplied by 2) -- `x = 5` (calculated as 1 + 4) +- `a = 4` (ضرب بالعدد 2) +- `x = 5` (حسبت كـ 1 + 4) diff --git a/1-js/02-first-steps/08-operators/4-fix-prompt/solution.md b/1-js/02-first-steps/08-operators/4-fix-prompt/solution.md index fd22eb83d..75768d591 100644 --- a/1-js/02-first-steps/08-operators/4-fix-prompt/solution.md +++ b/1-js/02-first-steps/08-operators/4-fix-prompt/solution.md @@ -2,8 +2,8 @@ حتى المتغيرات لها قيم "1" و "2" على التوالي. ```js run -let a = "1"; // prompt("First number?", 1); -let b = "2"; // prompt("Second number?", 2); +let a = "1"; // prompt("العدد الأول؟", 1); +let b = "2"; // prompt("العدد الثاني؟", 2); alert(a + b); // 12 ``` @@ -13,8 +13,8 @@ alert(a + b); // 12 على سبيل المثال ، قبل "prompt" مباشرةً: ```js run -let a = +prompt("First number?", 1); -let b = +prompt("Second number?", 2); +let a = +prompt("العدد الأول؟", 1); +let b = +prompt("العدد الثاني؟", 2); alert(a + b); // 3 ``` @@ -22,8 +22,8 @@ alert(a + b); // 3 أو في `alert`: ```js run -let a = prompt("First number?", 1); -let b = prompt("Second number?", 2); +let a = prompt("العدد الأول؟", 1); +let b = prompt("العدد الثاني؟", 2); alert(+a + +b); // 3 ``` diff --git a/1-js/02-first-steps/08-operators/4-fix-prompt/task.md b/1-js/02-first-steps/08-operators/4-fix-prompt/task.md index d09e54bd2..bb5872794 100644 --- a/1-js/02-first-steps/08-operators/4-fix-prompt/task.md +++ b/1-js/02-first-steps/08-operators/4-fix-prompt/task.md @@ -11,8 +11,8 @@ لماذا ا؟ اصلحه. يجب أن تكون النتيجة `3`. ```js run -let a = prompt("First number?", 1); -let b = prompt("Second number?", 2); +let a = prompt("العدد الأول ؟", 1); +let b = prompt("العدد الثاني ؟", 2); alert(a + b); // 12 ``` diff --git a/1-js/02-first-steps/08-operators/article.md b/1-js/02-first-steps/08-operators/article.md index f3b7469c2..afd5cc5bb 100644 --- a/1-js/02-first-steps/08-operators/article.md +++ b/1-js/02-first-steps/08-operators/article.md @@ -18,13 +18,13 @@ *!* x = -x; */!* - alert( x ); // -1, unary negation was applied + alert( x ); // -1, تم تطبيق عملية الطرح الاحادية ``` العامل الحسابي يكون ثنائيا إذا كان لديه معاملين حسابيين اثنين. نفس الشيء بالنسبة لعامل الطرح الحسابي أيضا: ```js run no-beautify let x = 1, y = 3; - alert( y - x ); // 2, binary minus subtracts values + alert( y - x ); // 2, الطرح الثنائي طرح القيم ``` بشكل رسمي، في الأمثلة السابقة كان لدينا عاملين حسابيين مختلفين يشتركان في نفس الرمز: عامل النفي يعكس إلإشارة وعامل الطرح , عامل ثنائي يقوم يطرح رقم من آخر @@ -50,8 +50,8 @@ على سبيل المثال: ```js run -alert( 5 % 2 ); // 1, a remainder of 5 divided by 2 -alert( 8 % 3 ); // 2, a remainder of 8 divided by 3 +alert( 5 % 2 ); // 1, باقي قسمة 5 على 2 +alert( 8 % 3 ); // 2, باقي قسمة 8 على 3 ``` ### الضرب الأسي ** @@ -61,17 +61,17 @@ alert( 8 % 3 ); // 2, a remainder of 8 divided by 3 على سبيل المثال: ```js run -alert( 2 ** 2 ); // 4 (2 multiplied by itself 2 times) -alert( 2 ** 3 ); // 8 (2 * 2 * 2, 3 times) -alert( 2 ** 4 ); // 16 (2 * 2 * 2 * 2, 4 times) +alert( 2 ** 2 ); // 4 (ضرب العدد 2 في نفسه مرتين) +alert( 2 ** 3 ); // 8 (2 * 2 * 2, 3 مرات) +alert( 2 ** 4 ); // 16 (2 * 2 * 2 * 2, 4 مرات) ``` من الناحية الرياضياتية الضرب الأسي يستخدم أيضا مع الأرقام غير الصحيحة. على سبيل المثال الجذر التربيعي هو ضرب أسي بقيمة `1/2`: ```js run -alert( 4 ** (1/2) ); // 2 (power of 1/2 is the same as a square root) -alert( 8 ** (1/3) ); // 2 (power of 1/3 is the same as a cubic root) +alert( 4 ** (1/2) ); // 2 (القوة 1/2 هي نفسها الجذر التربيعي) +alert( 8 ** (1/3) ); // 2 (القوة 1/3 هي نفسها الجذر التكعيبي) ``` @@ -102,13 +102,13 @@ alert( 2 + '1' ); // "21" مثال آخر أكثر تعقيدا: ```js run -alert(2 + 2 + '1' ); // "41" and not "221" +alert(2 + 2 + '1' ); // "41" وليس "221" ``` هنا العوامل الحسابية تعمل بعد الأخرى. عامل الإضافة الأول `+` يقوم بجمع الرقمين فيصبح ناتجهمها `4` ثم يقوم عامل الإضافة الثاني `+` بدمج `4` و `1` في كلمة واحدة فتصبح الناتج النهائي مثل `4 + '1' = 41`. ```js run -alert('1' + 2 + 2); // "122" and not "14" +alert('1' + 2 + 2); // "122" وليس "14" ``` هنا, المعامل الأول هو نص, يعامل المترجم المعاملين الآخرين كنصوص أيضًا. `2` يتم دمجها مع `'1'`, مثل ذلك `'1' + 2 = "12"` و `"12" + 2 = "122"`. @@ -118,8 +118,8 @@ alert('1' + 2 + 2); // "122" and not "14" هنا شرح مبسط لعملية الطرح والقسمة: ```js run -alert( 6 - '2' ); // 4, converts '2' to a number -alert( '6' / '2' ); // 3, converts both operands to numbers +alert( 6 - '2' ); // 4, تحول '2' الى رقم +alert( '6' / '2' ); // 3, تحول المعملين الى ارقام ``` ## التحويل العددي ، الأحادي + @@ -132,7 +132,7 @@ alert( '6' / '2' ); // 3, converts both operands to numbers على سبيل المثال: ```js run -// No effect on numbers +// لا يؤثر على الرقم let x = 1; alert( +x ); // 1 @@ -140,7 +140,7 @@ let y = -2; alert( +y ); // -2 *!* -// Converts non-numbers +// تحول المتغيرات غير الرقمية alert( +true ); // 1 alert( +"" ); // 0 */!* @@ -158,7 +158,7 @@ alert( +"" ); // 0 let apples = "2"; let oranges = "3"; -alert( apples + oranges ); // "23", the binary plus concatenates strings +alert( apples + oranges ); // "23", الجمع الثنائي يسلسل النصوص ``` فإذا أردنا جمعهم كأرقام ، فإننا بحاجة إلى تحويلهم ثم جمعهم: @@ -168,11 +168,11 @@ let apples = "2"; let oranges = "3"; *!* -// both values converted to numbers before the binary plus +// كلا القيمتين تم تحويلها الى رقم قبل عملية الجمع الثنائية alert( +apples + +oranges ); // 5 */!* -// the longer variant +// الطريقة الاطول // alert( Number(apples) + Number(oranges) ); // 5 ``` @@ -295,8 +295,8 @@ n = n * 2; ```js run let n = 2; -n += 5; // now n = 7 (same as n = n + 5) -n *= 2; // now n = 14 (same as n = n * 2) +n += 5; // الان n = 7 (نفس العملية n = n + 5) +n *= 2; // الان n = 14 (نقس العملية n = n * 2) alert( n ); // 14 ``` @@ -311,7 +311,7 @@ let n = 2; n *= 3 + 5; -alert( n ); // 16 (right part evaluated first, same as n *= 8) +alert( n ); // 16 (الجانب الايمن يحسب اولا, نفس العملية n *= 8) ``` ## الزيادة / النقصان @@ -322,14 +322,14 @@ alert( n ); // 16 (right part evaluated first, same as n *= 8) لذلك ، هناك عوامل خاصة لذلك: -- ** زيادة ** `++` يزيد المتغير بمقدار 1: +- **زيادة** `++` يزيد المتغير بمقدار 1: ```js run no-beautify let counter = 2; counter++; //يعمل مثل counter = counter + 1 ولكنه أقصر alert( counter ); // 3 ``` -- **Decrement** `--` decreases a variable by 1: +- **الانقاص** `--` ينقص المتغير بقيمة 1: ```js run no-beautify let counter = 2; @@ -367,7 +367,7 @@ alert(a); // *!*2*/!* ```js run let counter = 1; -let a = counter++; // (*) changed ++counter to counter++ +let a = counter++; // (*) غيرت ++counter الى counter++ alert(a); // *!*1*/!* ``` @@ -381,7 +381,7 @@ alert(a); // *!*1*/!* let counter = 0; counter++; ++counter; - alert( counter ); // 2, the lines above did the same + alert( counter ); // 2, السطرين في الاعلى قاما بنفس العمل ``` - إذا أردنا زيادة القيمة واستخدام نتيجة عامل التشغيل على الفور ، فنحن بحاجة إلى نموذج البادئة: @@ -396,7 +396,7 @@ alert(a); // *!*1*/!* alert( counter++ ); // 0 ``` -````عنوان ذكي ومختصر = "زيادة / نقصان بين العوامل الأخرى" +````smart header="زيادة / نقصان بين العوامل الأخرى" يمكن استخدام عوامل التشغيل `++ / -` داخل التعبيرات أيضًا. أسبقيتها أعلى من معظم العمليات الحسابية الأخرى. على سبيل المثال: @@ -410,7 +410,7 @@ alert( 2 * ++counter ); // 4 ```js run let counter = 1; -alert( 2 * counter++ ); // 2, because counter++ returns the "old" value +alert( 2 * counter++ ); // 2, لأن counter++ يرجع القيمة "القديمة" ``` على الرغم من أنه بخير من الناحية الفنية ، فإن مثل هذا التدوين يجعل التعليمات البرمجية أقل قابلية للقراءة. سطر واحد يقوم بأشياء متعددة - ليس جيدًا. @@ -456,7 +456,7 @@ counter++; let a = (1 + 2, 3 + 4); */!* -alert( a ); // 7 (the result of 3 + 4) +alert( a ); // 7 (نتيجة 3 + 4) ``` هنا ، يتم تقييم التعبير الأول `1 + 2` ويتم التخلص من نتائجه. ثم يتم تقييم `3 + 4` وإرجاعها كنتيجة. diff --git a/1-js/02-first-steps/09-comparison/article.md b/1-js/02-first-steps/09-comparison/article.md index 3dba72cc5..548d0fb67 100644 --- a/1-js/02-first-steps/09-comparison/article.md +++ b/1-js/02-first-steps/09-comparison/article.md @@ -17,21 +17,21 @@ تُرجع جميع عوامل المقارنة قيمة منطقية: -- "صحيح" - يعني "نعم" أو "صحيح" أو "الحقيقة". +- "true" - يعني "نعم" أو "صحيح" أو "الحقيقة". - "false" - تعني "لا" أو "خطأ" أو "ليست الحقيقة". فمثلا: ```js run -alert( 2 > 1 ); // true (correct) -alert( 2 == 1 ); // false (wrong) -alert( 2 != 1 ); // true (correct) +alert( 2 > 1 ); // true (صحيح) +alert( 2 == 1 ); // false (خطأ) +alert( 2 != 1 ); // true (صحيح) ``` يمكن تعيين نتيجة مقارنة لمتغير ، تمامًا مثل أي قيمة: ```js run -let result = 5 > 4; // assign the result of the comparison +let result = 5 > 4; // تعيين قيمة في المقارنة في المتغير alert( result ); // true ``` @@ -78,8 +78,8 @@ alert( 'Bee' > 'Be' ); // true فمثلا: ```js run -alert( '2' > 1 ); // true, string '2' becomes a number 2 -alert( '01' == 1 ); // true, string '01' becomes a number 1 +alert( '2' > 1 ); // true, النص '2' يصبح الرقم 2 +alert( '01' == 1 ); // true, النص '01' يصبح الرقم 1 ``` بالنسبة إلى القيم المنطقية ، يصبح "true" "1" ويصبح "false" "0". @@ -114,7 +114,7 @@ alert(a == b); // true! ## المساواة الصارمة -هناك مشكلة في التحقق المنتظم من المساواة `= =`. لا يمكن التمييز بين "0" و "false": +هناك مشكلة في التحقق المنتظم من المساواة `===`. لا يمكن التمييز بين "0" و "false": ```js run @@ -130,14 +130,14 @@ alert( '' == false ); // true ماذا أفعل إذا أردنا التمييز بين "0" و "false"؟ -** عامل المساواة الصارم `= =` يتحقق من المساواة بدون تحويل النوع. ** +** عامل المساواة الصارم `===` يتحقق من المساواة بدون تحويل النوع. ** بمعنى آخر ، إذا كان "a" و "b" من أنواع مختلفة ، فإن "a === b" يُرجع على الفور "خطأ" دون محاولة تحويلها. فلنجربها: ```js run -alert( 0 === false ); // false, because the types are different +alert( 0 === false ); // false, لان الأتواع مختلفة ``` هناك أيضًا عامل "صارم لعدم المساواة" `! ==` مشابه لـ '! = `. @@ -148,15 +148,15 @@ alert( 0 === false ); // false, because the types are different هناك سلوك غير بديهي عند مقارنة "null" أو "undefined" بقيم أخرى. -للتحقق من المساواة الصارمة `= =` +للتحقق من المساواة الصارمة `===` : هذه القيم مختلفة ، لأن كل منها نوع مختلف. ```js run alert( null === undefined ); // false ``` -للتحقق غير الصارم `= =` -: هناك قاعدة خاصة. هذان الزوجان "زوجان لطيفان": إنهما يساويان بعضهما البعض (بمعنى `= =`) ، ولكن ليس أي قيمة أخرى. +للتحقق غير الصارم `===` +: هناك قاعدة خاصة. هذان الزوجان "زوجان لطيفان": إنهما يساويان بعضهما البعض (بمعنى `===`) ، ولكن ليس أي قيمة أخرى. ```js run alert( null == undefined ); // true @@ -180,9 +180,9 @@ alert( null >= 0 ); // (3) *!*true*/!* رياضيا ، هذا غريب. تشير النتيجة الأخيرة إلى أن "القيمة" فارغة "أكبر من الصفر أو تساويه" ، لذا في إحدى المقارنات أعلاه ، يجب أن تكون "true" ، لكن كلاهما خطأ. -والسبب هو أن التحقق من المساواة `= =` والمقارنات `>> <> = <=` يعمل بشكل مختلف. تقوم المقارنات بتحويل `null` إلى رقم ، وتعاملها على أنها` 0`. لهذا السبب (3) `null> = 0` صحيحة و (1)` null> 0` خاطئة. +والسبب هو أن التحقق من المساواة `===` والمقارنات `>> <> = <=` يعمل بشكل مختلف. تقوم المقارنات بتحويل `null` إلى رقم ، وتعاملها على أنها` 0`. لهذا السبب (3) `null> = 0` صحيحة و (1)` null> 0` خاطئة. -من ناحية أخرى ، يتم تحديد علامة المساواة `= =` لـ `undefined` و` null` بحيث لا يساوي أحدهما الآخر دون تحويلات ولا يساوي أي شيء آخر. لهذا السبب (2) `null == 0` خطأ. +من ناحية أخرى ، يتم تحديد علامة المساواة `===` لـ `undefined` و` null` بحيث لا يساوي أحدهما الآخر دون تحويلات ولا يساوي أي شيء آخر. لهذا السبب (2) `null == 0` خطأ. ### غير المحدد غير المقارن diff --git a/1-js/02-first-steps/10-ifelse/2-check-standard/ifelse_task2.svg b/1-js/02-first-steps/10-ifelse/2-check-standard/ifelse_task2.svg index 47b020aab..94b224769 100644 --- a/1-js/02-first-steps/10-ifelse/2-check-standard/ifelse_task2.svg +++ b/1-js/02-first-steps/10-ifelse/2-check-standard/ifelse_task2.svg @@ -1 +1 @@ -BeginYou don't know? “ECMAScript”!Right!What's the “official” name of JavaScript?OtherECMAScript \ No newline at end of file +بدايةألا تعرف ؟ “ECMAScript”!!صحيحما هو الاسم الرسمي" للـ" JavaScript?غير ذلكECMAScript \ No newline at end of file diff --git a/1-js/02-first-steps/10-ifelse/article.md b/1-js/02-first-steps/10-ifelse/article.md index b733a4e7a..4771b1263 100644 --- a/1-js/02-first-steps/10-ifelse/article.md +++ b/1-js/02-first-steps/10-ifelse/article.md @@ -43,7 +43,7 @@ if (year == 2015) { لذلك فإن الأوامر المكتوبة تحت هذا الشرط لن تنفذ أبدًا: ```js -if (0) { // 0 يكون falsy +if (0) { // 0 قيمة خاطئة ... } ``` @@ -51,7 +51,7 @@ if (0) { // 0 يكون falsy وفي هذه الحالة ستنفذ دائمًا: ```js -if (1) { // 1 يكون truthy +if (1) { // 1 قيمة صحيحة ... } ``` @@ -78,7 +78,7 @@ let year = prompt("في أي عام تم نشر تخصيصات ECMAScript-2015? if (year == 2015) { alert("تخمينك صحيح!"); } else { - alert("كيف يمكنك أن تخطئ ؟"); // any value except 2015 + alert("كيف يمكنك أن تخطئ ؟"); // أي قيمة ما عدى 2015 } ``` diff --git a/1-js/02-first-steps/11-logical-operators/1-alert-null-2-undefined/solution.md b/1-js/02-first-steps/11-logical-operators/1-alert-null-2-undefined/solution.md index 9f5bfabae..9ed473e38 100644 --- a/1-js/02-first-steps/11-logical-operators/1-alert-null-2-undefined/solution.md +++ b/1-js/02-first-steps/11-logical-operators/1-alert-null-2-undefined/solution.md @@ -1,4 +1,4 @@ -الإجابة هي `2` لأنها أول قيمة truthy. +الإجابة هي `2` لأنها أول قيمة صادقة. ```js run alert( null || 2 || undefined ); diff --git a/1-js/02-first-steps/11-logical-operators/1-alert-null-2-undefined/task.md b/1-js/02-first-steps/11-logical-operators/1-alert-null-2-undefined/task.md index f21e97d4d..be3046e61 100644 --- a/1-js/02-first-steps/11-logical-operators/1-alert-null-2-undefined/task.md +++ b/1-js/02-first-steps/11-logical-operators/1-alert-null-2-undefined/task.md @@ -4,7 +4,7 @@ # ما نتيجة OR? -ما خرج الأمر التالي ؟ +ماذا سينتج عن الأمر التالي ؟ ```js alert( null || 2 || undefined ); diff --git a/1-js/02-first-steps/11-logical-operators/2-alert-or/task.md b/1-js/02-first-steps/11-logical-operators/2-alert-or/task.md index d06816557..0308cdf46 100644 --- a/1-js/02-first-steps/11-logical-operators/2-alert-or/task.md +++ b/1-js/02-first-steps/11-logical-operators/2-alert-or/task.md @@ -4,7 +4,7 @@ # نتيجة التنبيهات التي بينها OR? -ما خرج الكود التالي ؟ +ماذا سينتج عن الأمر التالي ؟ ```js alert( alert(1) || 2 || alert(3) ); diff --git a/1-js/02-first-steps/11-logical-operators/3-alert-1-null-2/task.md b/1-js/02-first-steps/11-logical-operators/3-alert-1-null-2/task.md index a1778d407..fbcf95cab 100644 --- a/1-js/02-first-steps/11-logical-operators/3-alert-1-null-2/task.md +++ b/1-js/02-first-steps/11-logical-operators/3-alert-1-null-2/task.md @@ -4,7 +4,7 @@ # نتيحة AND? -ما خرج الكود التالي ؟ +ماذا سينتج عن الأمر التالي ؟ ```js alert( 1 && null && 2 ); diff --git a/1-js/02-first-steps/11-logical-operators/4-alert-and/task.md b/1-js/02-first-steps/11-logical-operators/4-alert-and/task.md index b2b6e3876..c3b8d122e 100644 --- a/1-js/02-first-steps/11-logical-operators/4-alert-and/task.md +++ b/1-js/02-first-steps/11-logical-operators/4-alert-and/task.md @@ -4,7 +4,7 @@ importance: 3 # نتيجة التنبيهات التي بينها AND? -ما خرج الكود التالي ؟ +ماذا سينتج عن الأمر التالي ؟ ```js diff --git a/1-js/02-first-steps/11-logical-operators/8-if-question/solution.md b/1-js/02-first-steps/11-logical-operators/8-if-question/solution.md index 71e9463f4..e2ddb755e 100644 --- a/1-js/02-first-steps/11-logical-operators/8-if-question/solution.md +++ b/1-js/02-first-steps/11-logical-operators/8-if-question/solution.md @@ -4,11 +4,11 @@ ```js run // ينفذ -// نتيجة -1 || 0 = -1 هي truthy +// نتيجة -1 || 0 = -1 هي نتيجة صادقة if (-1 || 0) alert("first"); // لا ينفذ -// -1 && 0 = 0, falsy +// -1 && 0 = 0, نتيجة كاذبة if (-1 && 0) alert("second"); // ينفذ diff --git a/1-js/02-first-steps/11-logical-operators/9-check-login/ifelse_task.svg b/1-js/02-first-steps/11-logical-operators/9-check-login/ifelse_task.svg index d22b518a9..702f98e5f 100644 --- a/1-js/02-first-steps/11-logical-operators/9-check-login/ifelse_task.svg +++ b/1-js/02-first-steps/11-logical-operators/9-check-login/ifelse_task.svg @@ -1 +1 @@ -BeginCanceledCanceledWelcome!I don't know youWrong passwordWho's there?Password?CancelCancelAdminTheMasterOtherOther \ No newline at end of file +البدايةالغيتالغيت!مرحبالا أعرفككلمة مرور خاطئةمن هناك ؟كلمة المرور؟الغالغAdminTheMasterشخص اخرنص اخر \ No newline at end of file diff --git a/1-js/02-first-steps/11-logical-operators/9-check-login/solution.md b/1-js/02-first-steps/11-logical-operators/9-check-login/solution.md index 3aa769beb..4d5582f4d 100644 --- a/1-js/02-first-steps/11-logical-operators/9-check-login/solution.md +++ b/1-js/02-first-steps/11-logical-operators/9-check-login/solution.md @@ -1,24 +1,24 @@ ```js run demo -let userName = prompt("Who's there?", ''); +let userName = prompt("من هناك؟", ''); if (userName === 'Admin') { - let pass = prompt('Password?', ''); + let pass = prompt('كلمة المرور؟', ''); if (pass === 'TheMaster') { - alert( 'Welcome!' ); + alert( 'مرحبا!' ); } else if (pass === '' || pass === null) { - alert( 'Canceled' ); + alert( 'الغيت' ); } else { - alert( 'Wrong password' ); + alert( 'كلمة مرور خاطئة' ); } } else if (userName === '' || userName === null) { - alert( 'Canceled' ); + alert( 'الغيت' ); } else { - alert( "I don't know you" ); + alert( "لا أعرفك" ); } ``` diff --git a/1-js/02-first-steps/11-logical-operators/9-check-login/task.md b/1-js/02-first-steps/11-logical-operators/9-check-login/task.md index 2fc66e40d..3bc148321 100644 --- a/1-js/02-first-steps/11-logical-operators/9-check-login/task.md +++ b/1-js/02-first-steps/11-logical-operators/9-check-login/task.md @@ -6,13 +6,13 @@ أكتب كود يكلب تسجيل الدخول باستخدام `prompt`. -إذا كتب المستخدم كلمة `"Admin"` اطلب منه `prompt` كلمة المرور فإذا كتب سطر فارغ أو استخدم `key:Esc` -- أظهر رسالة "Canceled" وإذا كان نص آخر أظهر له "I don't know you". +إذا كتب المستخدم كلمة `"Admin"` اطلب منه `prompt` كلمة المرور فإذا كتب سطر فارغ أو استخدم `key:Esc` -- أظهر رسالة "الغيت" وإذا كان نص آخر أظهر له "لا أعرفك". يتم فحص كلمة المرور كالتالي: -- إذا كانت تساوي "TheMaster" يتم عرض "Welcome!", -- نص آخر يتم عرض "Wrong password", -- نص فارغ أو إلغاء العملية يتم عرض "Canceled" +- إذا كانت تساوي "TheMaster" يتم عرض "مرحبا!", +- نص آخر يتم عرض "كلمة مرور خاطئة", +- نص فارغ أو إلغاء العملية يتم عرض "الغيت" الصيغة العامة: diff --git a/1-js/02-first-steps/11-logical-operators/article.md b/1-js/02-first-steps/11-logical-operators/article.md index 422fd59da..c8655c783 100644 --- a/1-js/02-first-steps/11-logical-operators/article.md +++ b/1-js/02-first-steps/11-logical-operators/article.md @@ -1,14 +1,14 @@ -# العوامل المنطقية +# الالعمليات المنطقية -يوجد اربعة عوامل منطقية في جافا سكريبت: `||` (OR), `&&` (AND), `!` (NOT), `??` (Nullish Coalescing). هنا سوف نقوم بشرح الثلاثة الأولى, و المعامل `??` فى الفصل القادم. +يوجد اربعة العمليات منطقية في جافا سكريبت: `||` (OR), `&&` (AND), `!` (NOT), `??` (Nullish Coalescing). هنا سوف نقوم بشرح الثلاثة الأولى, و المعامل `??` فى الفصل القادم. -بالرغم من أن اسمهم عوامل منطقية إلا أنه يمكنك تطبيقهم على أي نوع من البيانات وليس فقط البيانات المنطقية. كما أنه يمكنهم إنتاج أي قيمة. +بالرغم من أن اسمهم العمليات المنطقية إلا أنه يمكنك تطبيقهم على أي نوع من البيانات وليس فقط البيانات المنطقية. كما أنه يمكنهم إنتاج أي قيمة. لنرى ذلك بالتفصيل. ## || (OR) -عامل "OR" رمزه هو خطين أفقيين: +العملية "OR" رمزها هو خطين أفقيين: ```js result = a || b; @@ -65,7 +65,7 @@ if (hour < 10 || hour > 18 || isWeekend) { } ``` -## OR "||" إيجاد أول قيمة truthy [#or-finds-the-first-truthy-value] +## OR "||" إيجاد أول قيمة صادقة [#or-finds-the-first-truthy-value] ما تم وصفه بالأعلى هو الأمر التقليدي. الآن دعنا نرى ما أضافته جافا سكريبت. @@ -85,24 +85,24 @@ result = value1 || value2 || value3; يتم إرجاع القيمة بصيغتها الأصلية دون تحويل. -بصيغة أخرى فإن مجموعة OR `"||"` ترجع أول قيمة truthy value أو آخر قيمة إذا لم تجد أي قيمة truthy. +بصيغة أخرى فإن مجموعة OR `"||"` ترجع أول قيمة صادقة (صحيحة ) أو آخر قيمة إذا لم تجد أي قيمة صادقة. مثلًا: ```js run -alert(1 || 0); // 1 (1 is truthy) +alert(1 || 0); // 1 (1 قيمة صادقة) -alert(null || 1); // 1 (1 هو أول قيمة truthy) -alert(null || 0 || 1); // 1 (أول قيمة truthy) +alert(null || 1); // 1 (1 هو أول قيمة صادقة) +alert(null || 0 || 1); // 1 (1 هو أول قيمة صادقة) -alert(undefined || null || 0); // 0 (الكل falsy, ترجع آخر قيمة) +alert(undefined || null || 0); // 0 (كل القيم كاذبة, ترجع آخر قيمة) ``` هذا يوصل إلى بعض الاستخدامات الشيقة مقارنةً بالاستخدام التقليدي. -1. **الحصول على أول قيمة truthy من مبين مجموعة متغيرات أو تعبيرات.** +1. **الحصول على أول قيمة صادقة من مبين مجموعة متغيرات أو تعبيرات.** - مثلًا لدينا `firstName`, `lastName` و `nickName` متغيرات, كلها إختياريه (مثال. يمكن ان تكون undefined او لديها قيم falsy). + مثلًا لدينا `firstName`, `lastName` و `nickName` متغيرات, كلها إختياريه (مثال. يمكن ان تكون undefined او لديها قيم كاذبة). هيا نستخدم OR `||` لاختيار الذي لديه قيمة ونعرضه (أو نعرض `"Anonymous"` إذا لم يحدد أي أحد): @@ -116,13 +116,13 @@ alert(undefined || null || 0); // 0 (الكل falsy, ترجع آخر قيمة) */!* ``` - إذا كانت كل المتغيرات falsy, `Anonymous` سيتم عرض. + إذا كانت كل المتغيرات كاذبة, `Anonymous` سيتم عرض. -2. **Short-circuit evaluation.** +2. **Short-circuit تقييم.** - ميزة أخرى للعامل OR `||` تسمى "short-circuit" evaluation. + ميزة أخرى للعامل OR `||` تسمى "short-circuit" تقييم. - ويعني أن `||` ينفذ العمليات الممررة له حتى أول قيمة truthy وبعد ذلك يتم إرجاع القيمة مباشرة بدون لمس باقي العمليات. + ويعني أن `||` ينفذ العمليات الممررة له حتى أول قيمة صادقة وبعد ذلك يتم إرجاع القيمة مباشرة بدون لمس باقي العمليات. أهمية هذه الميزة تصبح ملحوظة إذا كانت القيمة الممررة عبارة عن عملية لها آثار جانبية مثل تخصيص قيمة متغير أو استدعاء دالة @@ -145,7 +145,7 @@ alert(undefined || null || 0); // 0 (الكل falsy, ترجع آخر قيمة) result = a && b; ``` -في البرمجة التقليدية فإن العامل AND ينتج `true` إذا كان كلتا القيمتان truthy وغير ذلك يرجع `false`: +في البرمجة التقليدية فإن العامل AND ينتج `true` إذا كان كلتا القيمتان صادقة وغير ذلك يرجع `false`: ```js run alert(true && true); // true @@ -161,7 +161,7 @@ let hour = 12; let minute = 30; if (hour == 12 && minute == 30) { - alert("The time is 12:30"); + alert("الوقت هو 12:30"); } ``` @@ -170,11 +170,11 @@ if (hour == 12 && minute == 30) { ```js run if (1 && 0) { // تنفذ مثل true && false - alert("لن يعمل لأن النتيجة falsy"); + alert("لن يعمل لأن النتيجة كاذبة"); } ``` -## AND "&&" إيجاد أول قيمة falsy +## AND "&&" إيجاد أول قيمة كاذبة يعطى العديد من القيم بينهم AND: @@ -186,33 +186,33 @@ result = value1 && value2 && value3; - تنفيذ العمليات من اليسار إلى اليمين. - كل عملية تحول إلى قيمة منطقية. إذا كانت النتيجة `false` يتوقف ويرجع القيمة الأصلية لهذه العملية. -- إذا تم تنفيذ كل العمليات (يعنى أن كلهم were truthy) يرجع آخر قيمة +- إذا تم تنفيذ كل العمليات (يعنى أن كلهم قيم صادقة) يرجع آخر قيمة -بكلمات أخرى فإن AND ترجع أول قيمة falsy أو آخر قيمة. +بكلمات أخرى فإن AND ترجع أول قيمة كاذبة أو آخر قيمة. هذا مشابه ل OR. الاختلاف هو أن AND ترجع أول قيمة _falsy_ بينما OR ترجع أول قيمة _truthy_. Examples: ```js run -// إذا كانت أول قيمة truthy, +// إذا كانت أول قيمة صادقة, // AND ترجع ثاني قيمة: alert(1 && 0); // 0 alert(1 && 5); // 5 -// إذا كانت أول قيمة falsy, +// إذا كانت أول قيمة كاذبة, // AND ترجعها وتتجاهل القيمة الثانية alert(null && 5); // null -alert(0 && "no matter what"); // 0 +alert(0 && "مهما حدث"); // 0 ``` -يمكننا أيضًا تمرير العديد من القيم وسيتم إرجاع أول قيمة falsy: +يمكننا أيضًا تمرير العديد من القيم وسيتم إرجاع أول قيمة كاذبة: ```js run alert(1 && 2 && null && 3); // null ``` -إذا كانت كل القيم truthy يتم إرجاع آخر قيمة: +إذا كانت كل القيم صادقة يتم إرجاع آخر قيمة: ```js run alert(1 && 2 && 3); // 3, آخر قيمة @@ -233,7 +233,7 @@ alert(1 && 2 && 3); // 3, آخر قيمة ```js run let x = 1; -(x > 0) && alert( 'Greater than zero!' ); +(x > 0) && alert( أكبر من الصفر!' ); ``` سيتم تنفيذ الجزء الأيمن من `&&` إذا كان `(x > 0)` يساوي true. @@ -243,7 +243,7 @@ let x = 1; ```js run let x = 1; -if (x > 0) alert( 'Greater than zero!' ); +if (x > 0) alert( 'أكبر من الصفر!' ); ``` بالرغم من أن `&&` يبدو مختصرًا إلا أن `if` أفذل ومقروءة أكثر. لذلك ننصح باستخدام كل تعبير في مكانه: نستخدم `if` إذا أردنا if ونستخدم `&&` إذا أردنا AND. @@ -287,4 +287,4 @@ alert(Boolean("non-empty string")); // true alert(Boolean(null)); // false ``` -أولوية NOT `!` هي الأعلى في كل العوامل المنطقية لذلك تنفذ أولًا دائمًا قبل `&&` أو `||`. +أولوية NOT `!` هي الأعلى في كل الالعمليات المنطقية لذلك تنفذ أولًا دائمًا قبل `&&` أو `||`. diff --git a/1-js/04-object-basics/02-object-copy/article.md b/1-js/04-object-basics/02-object-copy/article.md index 596520c95..893e742ae 100644 --- a/1-js/04-object-basics/02-object-copy/article.md +++ b/1-js/04-object-basics/02-object-copy/article.md @@ -1,4 +1,4 @@ -# Object references and copying +# مؤشرات الكائن ونسخه أحد الاختلافات الأساسية بين الكائنات والقيم الأساسية هو أن الكائنات تخزن وتنسخ "ضمنيًا" وبالمقابل، يتم نسخ القيم الأساسية بالكامل. @@ -77,9 +77,9 @@ alert(*!*user.name*/!*); // 'Pete', التغيرات مرئية بواسطة م ## المقارنة بالمؤشرات -Two objects are equal only if they are the same object. +الكائنان متساويان اذا كانا فقط نفس الكائن -For instance, here `a` and `b` reference the same object, thus they are equal: +على سبيل المثال , لدينا `a` و `b` يؤشران الى نفس الكائن , لهذا هما متساويان: ```js run let a = {};