Skip to content

Commit 083ebd4

Browse files
authored
Merge pull request #51 from javascript-tutorial/sync-69e44506
Sync with upstream @ 69e4450
2 parents b33eb77 + b82579e commit 083ebd4

File tree

19 files changed

+97
-67
lines changed

19 files changed

+97
-67
lines changed

1-js/02-first-steps/03-strict-mode/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ For example:
1919
...
2020
```
2121

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.
2323

2424
````warn header="Ensure that \"use strict\" is at the top"
2525
Please make sure that `"use strict"` is at the top of your scripts, otherwise strict mode may not be enabled.

1-js/02-first-steps/09-comparison/article.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44

55
: وفي لغة الجافسكريبت تكتب كما يلي
66

7-
- أكبر من وأصغر من: <code>a &gt; b</code>, <code>a &lt; b</code>.
8-
- أكبر : <code>a &gt;= b</code>, <code>a &lt;= b</code>.
7+
- أكبر/أصغر من: <code>a &gt; b</code>, <code>a &lt; b</code>.
8+
- أكبر/أصغر من او يساوي: <code>a &gt;= b</code>, <code>a &lt;= b</code>.
99
- يساوي: `a == b` ، يرجى ملاحظة أن علامة المساواة المزدوجة` = `تعني اختبار المساواة ، في حين أن كلمة واحدة` a = b` تعني تعيين أو مساواة .
10-
- لا تساوي. في الرياضيات ، يكون الترميز في JavaScript مكتوب مثل a !=b
10+
- لا تساوي. في الرياضيات يكون الترميز <code>&ne;</code> ،لكن في JavaScript تكتب هكذا <code>a != b</code>.
1111

1212
في هذه المقالة سنتعلم المزيد عن الأنواع المختلفة من المقارنات ، وكيف تجعلها JavaScript ، بما في ذلك الخصائص المهمة.
1313

@@ -211,4 +211,4 @@ alert( undefined == 0 ); // false (3)
211211
- تتم مقارنة السلاسل حرفًا بحرف في ترتيب "القاموس".
212212
- عند مقارنة القيم من أنواع مختلفة ، يتم تحويلها إلى أرقام (باستثناء التحقق من المساواة الصارم).
213213
- القيمتان "null" و "undefined" تساوي `==` بعضها البعض ولا تساوي أي قيمة أخرى.
214-
- كن حذرًا عند استخدام مقارنات مثل `>` أو `<` مع المتغيرات التي يمكن أن تكون أحيانًا `خالية / غير محددة '. يُعد التحقق من "null / undefined" بشكل منفصل فكرة جيدة.
214+
- كن حذرًا عند استخدام مقارنات مثل `>` أو `<` مع المتغيرات التي يمكن أن تكون أحيانًا `خالية / غير محددة '. يُعد التحقق من "null / undefined" بشكل منفصل فكرة جيدة.

1-js/02-first-steps/11-logical-operators/article.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,13 +129,13 @@ alert(undefined || null || 0); // 0 (الكل falsy, ترجع آخر قيمة)
129129
في هذا المثال سيتم طباعة الرسالة الأولى ولن يتم طباعة الثانية:
130130

131131
```js run no-beautify
132-
*!*false*/!* || alert("printed");
133132
*!*true*/!* || alert("not printed");
133+
*!*false*/!* || alert("printed");
134134
```
135135

136136
في السطر الثاني يتوقف العامل OR `||` مباشرة عند الوصول إلى `true` لذلك فإن `alert` لا ينفذ.
137137

138-
أحيانًا يستخدم الناس هذه الخاصية لتنفيذ أوامر فقط إذا كان الجزء الأيسر truthy.
138+
أحيانًا يستخدم الناس هذه الخاصية لتنفيذ أوامر فقط إذا كان الجزء الأيسر زائف.
139139

140140
## && (AND)
141141

1-js/02-first-steps/12-nullish-coalescing-operator/article.md

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,27 @@ x = a !== null && a !== undefined ? a : b;
1717

1818
هذا مثال أطول.
1919

20-
لنفترض أن لدينا `firstName`, `lastName` أو `nickName` وجميعهم اختياريين.
20+
21+
لنفترض أن لدينا مستخدم ولديه المتغيرات `firstName`, `lastName` أو `nickName` وجميعهم اختياريين.
2122

2223
لنختار القيمة المعرفة ونعرضها (أو نعرض "Anonymous" إذا لم يحدد أي شئ):
2324

25+
لنستخدم `??` لتحديد أول عامل محدد
26+
2427
```js run
2528
let firstName = null;
2629
let lastName = null;
2730
let nickName = "Supercoder";
2831

29-
// show the first not-null/undefined variable
32+
// show the first not-null/undefined value
33+
*!*
3034
alert(firstName ?? lastName ?? nickName ?? "Anonymous"); // Supercoder
35+
*/!*
3136
```
3237
3338
## المقارنة مع ||
3439
35-
هذا مشابه جدًا للعامل `||`. في الحقيقة يمكننا استبدال `??` ب `||` في المثال السابق وسنحصل على نفس النتيجة.
40+
هذا مشابه جدًا للمعامل `||`. في الحقيقة يمكننا استبدال `??` ب `||` في المثال السابق وسنحصل على نفس النتيجة. كما وصفنا في [الفصل السابق](info:logical-operators#or-finds-the-first-truthy-value).
3641
3742
الفرق الجوهري بينهما أن:
3843
@@ -58,15 +63,17 @@ alert(height || 100); // 100
5863
alert(height ?? 100); // 0
5964
```
6065
61-
هنا `height || 100` تعامل الصفر مثل `null`, `undefined` أو أي قيمة falsy أخرىوهذا قد لا يكون صحيح أحيانًا.
66+
هنا `height || 100` تعامل الصفر كـ `null`, `undefined` أو أي قيمة زائفة. اذا الصفر يصبح `100`.
6267
63-
ولكن `height ?? 100` ترجع `100` إذا كان فقط `height` يساوي تمامًا `null` أو `undefined`.
68+
ولكن `height ?? 100` ترجع `100` إذا كان فقط `height` يساوي تمامًا `null` أو `undefined`. اذا الصفر يبقى "كما هو".
69+
70+
يعتمد السلوك الافضل على حالة الاستخدام. تكون `??` الطريقة الافضل عندما يكون صفر height قيمة صالحة.
6471
6572
## الأولوية
6673
6774
أولوية العامل `??` هي قليلة: `7` وتساوي [MDN جدول](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table).
6875
69-
هذا أقل من معظم العوامل وأكبر بقليل من `=` و `?`.
76+
هذا أقل من معظم المعاملات وأكبر بقليل من `=` و `?`.
7077
7178
لذلك إذا أردنا استخدام `??` في تعبيرات معقدة نقوم بإضافة أقواس:
7279
@@ -80,14 +87,16 @@ let area = (height ?? 100) * (width ?? 50);
8087
alert(area); // 5000
8188
```
8289
83-
إذا لم نستخدم الأقواس فإن `*` له أولوية أعلى وسينفذ أولًا كأننا كتبنا:
90+
من ناحية اخرى، إذا لم نستخدم الأقواس فإن `*` له أولوية أعلى وسينفذ أولًا كأننا كتبنا:
8491
8592
```js
8693
// غير صحيح
8794
let area = height ?? 100 * width ?? 50;
8895
```
8996
90-
هناك أيضًا قيود لغوية. لأسباب أمنية لا يمكن استخدام `??` مع `&&` أو `||`.
97+
هناك أيضًا قيود لغوية.
98+
99+
**لأسباب أمنية، لا يمكن استخدام `??` مع `&&` و `||`.**
91100
92101
هذا سينتج خطأ لغوي:
93102
@@ -100,7 +109,9 @@ let x = 1 && 2 ?? 3; // Syntax error
100109
استخدم الأقواس لتجنب الخطأ:
101110
102111
```js run
112+
*!*
103113
let x = (1 && 2) ?? 3; // تعمل دون مشاكل
114+
*/!*
104115
alert(x); // 2
105116
```
106117

1-js/05-data-types/05-array-methods/12-reduce-object/_js.view/test.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,14 @@ describe("groupById", function() {
88
];
99

1010
assert.deepEqual(groupById(users), {
11-
john: {id: 'john', name: "John Smith", age: 20}
11+
john: {id: 'john', name: "John Smith", age: 20},
1212
ann: {id: 'ann', name: "Ann Smith", age: 24},
1313
pete: {id: 'pete', name: "Pete Peterson", age: 31},
1414
});
1515
});
1616

1717
it("works with an empty array", function() {
18+
users = [];
1819
assert.deepEqual(groupById(users), {});
1920
});
2021
});

1-js/05-data-types/05-array-methods/12-reduce-object/task.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ let usersById = groupById(users);
2323
// after the call we should have:
2424
2525
usersById = {
26-
john: {id: 'john', name: "John Smith", age: 20}
26+
john: {id: 'john', name: "John Smith", age: 20},
2727
ann: {id: 'ann', name: "Ann Smith", age: 24},
2828
pete: {id: 'pete', name: "Pete Peterson", age: 31},
2929
}

1-js/05-data-types/07-map-set/article.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ let prices = Object.fromEntries([
198198
alert(prices.orange); // 2
199199
```
200200
201-
We can use `Object.fromEntries` to get an plain object from `Map`.
201+
We can use `Object.fromEntries` to get a plain object from `Map`.
202202
203203
E.g. we store the data in a `Map`, but we need to pass it to a 3rd-party code that expects a plain object.
204204
@@ -220,7 +220,7 @@ let obj = Object.fromEntries(map.entries()); // make a plain object (*)
220220
alert(obj.orange); // 2
221221
```
222222
223-
A call to `map.entries()` returns an array of key/value pairs, exactly in the right format for `Object.fromEntries`.
223+
A call to `map.entries()` returns an iterable of key/value pairs, exactly in the right format for `Object.fromEntries`.
224224
225225
We could also make line `(*)` shorter:
226226
```js

1-js/05-data-types/11-date/6-get-seconds-today/solution.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,6 @@ function getSecondsToday() {
2323
let d = new Date();
2424
return d.getHours() * 3600 + d.getMinutes() * 60 + d.getSeconds();
2525
}
26+
27+
alert( getSecondsToday() );
2628
```

1-js/07-object-properties/02-property-accessors/article.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@
22

33
يوجد نوعين من الخصائص.
44

5-
الأوّل هو خصائص البيانات _data properties_. نحن بالفعل نعلم كيف نتعامل مع هذا النوع. إذ كلّ ما استعملناه من البداية حتى الآن هو خصائص البيانات.
6-
7-
النوع الثاني من الخصائص هو شيئ ما جديد. و هو _accessor properties_. هي دوال بشكل أساسي تجلب القيم و تضبطها, ولكن في الكود تظهرُ لنا وكأنها خصائص عادية.
5+
النوع الثاني من الخصائص هو شيئ ما جديد. و هو *accessor properties*. هي دوال بشكل أساسي تجلب القيم و تضبطها, ولكن في الكود تظهرُ لنا وكأنها خصائص عادية.
86

97
## الجالبات والضابطات
108

1-js/10-error-handling/1-try-catch/article.md

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -354,29 +354,32 @@ try {
354354

355355
بالطبع ، كل شيء ممكن! المبرمجون يرتكبون الأخطاء. حتى في المرافق المفتوحة المصدر التي يستخدمها الملايين لعقود - فجأة يمكن اكتشاف خطأ يؤدي إلى اختراق رهيب.
356356

357-
في حالتنا هذه, `try..catch` المقصود لالتقاط أخطاء "البيانات غير صحيحة".ولكن بطبيعتها ، `catch` يحصل على *كل* الأخطاء من `try`. هنا يحصل على خطأ غير متوقع, ولكن لا يزال يظهر `"JSON Error"`. هذا خطأ ويجعل أيضًا تصحيح التعليمات البرمجية أكثر صعوبة.
357+
في حالتنا هذه, `try..catch` المقصود لالتقاط أخطاء "البيانات غير صحيحة".ولكن بطبيعتها ، `catch` يحصل على *كل* الأخطاء من `try`. هنا يحصل على خطأ غير متوقع, ولكن لا يزال يظهر `"JSON Error"`. هذا خطأ ويجعل أيضًا تصحيح التعليمات البرمجية أكثر صعوبة.القاعدة بسيطة:
358358

359-
لحسن الحظ ، يمكننا معرفة الخطأ الذي تحصلنا عليه ، على سبيل المثال من `name`:
359+
**يجب أن يقوم Catch بمعالجة الأخطاء التي يعرفها و "إعادة رمي" كل الآخرين فقط.**
360+
361+
يمكن شرح تقنية "إعادة الرمي" بمزيد من التفصيل على النحو التالي:
362+
363+
1. Catch يحصل على جميع الأخطاء.
364+
2. في `catch(err) {...}` نقوم بتحليل كائن الخطأ `err`.
365+
3. إذا لم نكن نعرف كيف نتعامل معها ، فنفعل `throw err`.
366+
367+
عادة ، يمكننا التحقق من نوع الخطأ باستخدام العامل `instanceof`:
360368

361369
```js run
362370
try {
363371
user = { /*...*/ };
364-
} catch(e) {
372+
} catch(err) {
365373
*!*
366-
alert(e.name); // "ReferenceError" for accessing an undefined variable
374+
if (err instanceof ReferenceError) {
367375
*/!*
376+
alert('ReferenceError'); // "ReferenceError" للوصول إلى متغير غير محدد
377+
378+
}
368379
}
369380
```
370381

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.
380383

381384
في الكود أدناه ، نستخدم إعادة رمي بحيث `catch` يعالج فقط `SyntaxError`:
382385

@@ -399,7 +402,7 @@ try {
399402
} catch(e) {
400403
401404
*!*
402-
if (e.name == "SyntaxError") {
405+
if (e instanceof SyntaxError) {
403406
alert( "JSON Error: " + e.message );
404407
} else {
405408
throw e; // إعادة رمي (*)
@@ -426,7 +429,7 @@ function readData() {
426429
*/!*
427430
} catch (e) {
428431
// ...
429-
if (e.name != 'SyntaxError') {
432+
if (!(e instanceof SyntaxError)) {
430433
*!*
431434
throw e; // لا تعرف كيفية التعامل معه
432435
*/!*

0 commit comments

Comments
 (0)