You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/02-first-steps/03-strict-mode/article.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -19,7 +19,7 @@ For example:
19
19
...
20
20
```
21
21
22
-
Quite soon we're going to learn functions (a way to group commands) soon, so let's note in advance that `"use strict"` can be put at the beginning of a function. Doing that enables strict mode in that function only. But usually people use it for the whole script.
22
+
Quite soon we're going to learn functions (a way to group commands), so let's note in advance that `"use strict"` can be put at the beginning of a function. Doing that enables strict mode in that function only. But usually people use it for the whole script.
23
23
24
24
````warn header="Ensure that \"use strict\" is at the top"
25
25
Please make sure that `"use strict"` is at the top of your scripts, otherwise strict mode may not be enabled.
- تتم مقارنة السلاسل حرفًا بحرف في ترتيب "القاموس".
212
212
- عند مقارنة القيم من أنواع مختلفة ، يتم تحويلها إلى أرقام (باستثناء التحقق من المساواة الصارم).
213
213
- القيمتان "null" و "undefined" تساوي `==` بعضها البعض ولا تساوي أي قيمة أخرى.
214
-
- كن حذرًا عند استخدام مقارنات مثل `>` أو `<` مع المتغيرات التي يمكن أن تكون أحيانًا `خالية / غير محددة '. يُعد التحقق من "null / undefined" بشكل منفصل فكرة جيدة.
214
+
- كن حذرًا عند استخدام مقارنات مثل `>` أو `<` مع المتغيرات التي يمكن أن تكون أحيانًا `خالية / غير محددة '. يُعد التحقق من "null / undefined" بشكل منفصل فكرة جيدة.
هذا مشابه جدًا للعامل`||`. في الحقيقة يمكننا استبدال `??` ب `||` في المثال السابق وسنحصل على نفس النتيجة.
40
+
هذا مشابه جدًا للمعامل`||`. في الحقيقة يمكننا استبدال `??` ب `||` في المثال السابق وسنحصل على نفس النتيجة. كما وصفنا في [الفصل السابق](info:logical-operators#or-finds-the-first-truthy-value).
36
41
37
42
الفرق الجوهري بينهما أن:
38
43
@@ -58,15 +63,17 @@ alert(height || 100); // 100
58
63
alert(height ??100); // 0
59
64
```
60
65
61
-
هنا `height ||100` تعامل الصفر مثل`null`, `undefined` أو أي قيمة falsy أخرىوهذا قد لا يكون صحيح أحيانًا.
66
+
هنا `height ||100` تعامل الصفر كـ`null`, `undefined` أو أي قيمة زائفة. اذا الصفر يصبح `100`.
62
67
63
-
ولكن `height ??100` ترجع `100` إذا كان فقط `height` يساوي تمامًا `null` أو `undefined`.
68
+
ولكن `height ??100` ترجع `100` إذا كان فقط `height` يساوي تمامًا `null` أو `undefined`. اذا الصفر يبقى "كما هو".
69
+
70
+
يعتمد السلوك الافضل على حالة الاستخدام. تكون `??` الطريقة الافضل عندما يكون صفر height قيمة صالحة.
64
71
65
72
## الأولوية
66
73
67
74
أولوية العامل `??` هي قليلة: `7` وتساوي [MDN جدول](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table).
68
75
69
-
هذا أقل من معظم العوامل وأكبر بقليل من `=` و `?`.
76
+
هذا أقل من معظم المعاملات وأكبر بقليل من `=` و `?`.
70
77
71
78
لذلك إذا أردنا استخدام `??` في تعبيرات معقدة نقوم بإضافة أقواس:
72
79
@@ -80,14 +87,16 @@ let area = (height ?? 100) * (width ?? 50);
80
87
alert(area); // 5000
81
88
```
82
89
83
-
إذا لم نستخدم الأقواس فإن `*` له أولوية أعلى وسينفذ أولًا كأننا كتبنا:
90
+
من ناحية اخرى، إذا لم نستخدم الأقواس فإن `*` له أولوية أعلى وسينفذ أولًا كأننا كتبنا:
84
91
85
92
```js
86
93
// غير صحيح
87
94
let area = height ??100* width ??50;
88
95
```
89
96
90
-
هناك أيضًا قيود لغوية. لأسباب أمنية لا يمكن استخدام `??` مع `&&` أو `||`.
97
+
هناك أيضًا قيود لغوية.
98
+
99
+
**لأسباب أمنية، لا يمكن استخدام `??` مع `&&` و `||`.**
91
100
92
101
هذا سينتج خطأ لغوي:
93
102
@@ -100,7 +109,9 @@ let x = 1 && 2 ?? 3; // Syntax error
Copy file name to clipboardExpand all lines: 1-js/07-object-properties/02-property-accessors/article.md
+1-3Lines changed: 1 addition & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,9 +2,7 @@
2
2
3
3
يوجد نوعين من الخصائص.
4
4
5
-
الأوّل هو خصائص البيانات _data properties_. نحن بالفعل نعلم كيف نتعامل مع هذا النوع. إذ كلّ ما استعملناه من البداية حتى الآن هو خصائص البيانات.
6
-
7
-
النوع الثاني من الخصائص هو شيئ ما جديد. و هو _accessor properties_. هي دوال بشكل أساسي تجلب القيم و تضبطها, ولكن في الكود تظهرُ لنا وكأنها خصائص عادية.
5
+
النوع الثاني من الخصائص هو شيئ ما جديد. و هو *accessor properties*. هي دوال بشكل أساسي تجلب القيم و تضبطها, ولكن في الكود تظهرُ لنا وكأنها خصائص عادية.
Copy file name to clipboardExpand all lines: 1-js/10-error-handling/1-try-catch/article.md
+18-15Lines changed: 18 additions & 15 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -354,29 +354,32 @@ try {
354
354
355
355
بالطبع ، كل شيء ممكن! المبرمجون يرتكبون الأخطاء. حتى في المرافق المفتوحة المصدر التي يستخدمها الملايين لعقود - فجأة يمكن اكتشاف خطأ يؤدي إلى اختراق رهيب.
356
356
357
-
في حالتنا هذه, `try..catch` المقصود لالتقاط أخطاء "البيانات غير صحيحة".ولكن بطبيعتها ، `catch` يحصل على *كل* الأخطاء من `try`. هنا يحصل على خطأ غير متوقع, ولكن لا يزال يظهر `"JSON Error"`. هذا خطأ ويجعل أيضًا تصحيح التعليمات البرمجية أكثر صعوبة.
357
+
في حالتنا هذه, `try..catch` المقصود لالتقاط أخطاء "البيانات غير صحيحة".ولكن بطبيعتها ، `catch` يحصل على *كل* الأخطاء من `try`. هنا يحصل على خطأ غير متوقع, ولكن لا يزال يظهر `"JSON Error"`. هذا خطأ ويجعل أيضًا تصحيح التعليمات البرمجية أكثر صعوبة.القاعدة بسيطة:
358
358
359
-
لحسن الحظ ، يمكننا معرفة الخطأ الذي تحصلنا عليه ، على سبيل المثال من `name`:
359
+
**يجب أن يقوم Catch بمعالجة الأخطاء التي يعرفها و "إعادة رمي" كل الآخرين فقط.**
360
+
361
+
يمكن شرح تقنية "إعادة الرمي" بمزيد من التفصيل على النحو التالي:
362
+
363
+
1. Catch يحصل على جميع الأخطاء.
364
+
2. في `catch(err) {...}` نقوم بتحليل كائن الخطأ `err`.
365
+
3. إذا لم نكن نعرف كيف نتعامل معها ، فنفعل `throw err`.
366
+
367
+
عادة ، يمكننا التحقق من نوع الخطأ باستخدام العامل `instanceof`:
360
368
361
369
```js run
362
370
try {
363
371
user = { /*...*/ };
364
-
} catch(e) {
372
+
} catch(err) {
365
373
*!*
366
-
alert(e.name); // "ReferenceError" for accessing an undefined variable
374
+
if (err instanceof ReferenceError) {
367
375
*/!*
376
+
alert('ReferenceError'); // "ReferenceError" للوصول إلى متغير غير محدد
377
+
378
+
}
368
379
}
369
380
```
370
381
371
-
القاعدة بسيطة:
372
-
373
-
**يجب أن يقوم Catch بمعالجة الأخطاء التي يعرفها و "إعادة رمي" كل الآخرين فقط.**
374
-
375
-
يمكن شرح تقنية "إعادة الرمي" بمزيد من التفصيل على النحو التالي:
376
-
377
-
1. Catch يحصل على جميع الأخطاء.
378
-
2. في `catch(err) {...}` نقوم بتحليل كائن الخطأ `err`.
379
-
2. إذا لم نكن نعرف كيف نتعامل معها ، فنفعل `throw err`.
382
+
يمكننا أيضًا الحصول على اسم فئة الخطأ من خاصية `err.name`. جميع الأخطاء الأصلية لديها هذه الخاصية. خيار آخر هو قراءة err.constructor.name.
380
383
381
384
في الكود أدناه ، نستخدم إعادة رمي بحيث `catch` يعالج فقط `SyntaxError`:
0 commit comments