Skip to content

Commit 58381bc

Browse files
authored
docs: improve translation & fix typos
1 parent 73864ea commit 58381bc

1 file changed

Lines changed: 43 additions & 43 deletions

File tree

1-js/04-object-basics/01-object/article.md

Lines changed: 43 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11

22
# الكائنات
33

4-
كما عرفنا من فصل[أنواع البيانات](info:types), هنالك ثماني أنواع للبيانات في الجافا اسكريبت.سبعة منهم يسمون "أوليةprimitive",لأن قيمهم تحتوي شيئا واحداً (لتكن سلسلة نصية أو رقم أو أي شيْ)
4+
كما عرفنا من فصل [أنواع البيانات](info:types)، هنالك ثماني أنواع للبيانات في الجافاسكريبت. سبعة منهم يسمون "أولية primitive"، لأن قيمهم تحتوي شيئا واحداً (لتكن سلسلة نصية أو رقم أو أي شيْء).
55

6-
في المقابل,تستخدم الكائنات لحفظ مجموعات keyed collections من مختلف البيانات و الكيانات المركبة.في الجافا اسكريبت,تدخل الكائنات تقريبا في كل جانب من جوانب اللغة. لذا يتوجب علينا فهمها قبل التعمق في أي شيئ آخر.
6+
في المقابل، تستخدم الكائنات لحفظ مجموعات keyed collections من مختلف البيانات والكيانات المركبة.في الجافاسكريبت، تدخل الكائنات تقريبا في كل جانب من جوانب اللغة. لذا يتوجب علينا فهمها قبل التعمق في أي شيء آخر.
77

8-
يمكن إنشاء أي كائن باستخدام الأقواس المعقوصة `{…}` مع قائمة اختيارية بالخاصيات. الخاصية هي زوج من "مفتاح: قيمة" (`key: value`) إذ يكون المفتاح عبارة عن نص (يُدعى "اسم الخاصية")، والقيمة يمكن أن تكون أي شيء.
8+
يمكن إنشاء أي كائن باستخدام الأقواس المعقوفة `{…}` مع قائمة اختيارية بالخاصيات. الخاصية هي زوج من "مفتاح: قيمة" (`key: value`) إذ يكون المفتاح عبارة عن نص (يُدعى "اسم الخاصية")، والقيمة يمكن أن تكون أي شيء.
99

1010
يمكننا تخيل الكائن كخزانة تحوي ملفات. يُخزن كل جزء من هذه البيانات في الملف الخاص به باستخدام المفتاح. يمكن إيجاد، أو إضافة، أو حذف ملف باستخدام اسمه.
1111

@@ -20,7 +20,7 @@ let user = {}; // "object literal" syntax
2020

2121
![](object-user-empty.svg)
2222

23-
تُستخدم الأقواس المعقوصة `{...}` عادة، وهذا النوع من التصريح يُسمى «*الصياغة المختصرة لتعريف كائن*» (*object literal*).
23+
تُستخدم الأقواس المعقوفة `{...}` عادة، وهذا النوع من التصريح يُسمى «*الصياغة المختصرة لتعريف كائن*» (*object literal*).
2424

2525
## القيم المُجرَّدة والخاصيات
2626

@@ -90,10 +90,10 @@ let user = {
9090
age: 30*!*,*/!*
9191
}
9292
```
93-
وهذا يسمى فاصلة "زائدة" أو "معلقة". يجعل من السهل إضافة / إزالة / نقل الخصائص ، لأن جميع الأسطر تصبح متشابهة.
93+
وهذا يسمى فاصلة "زائدة" أو "معلقة". يجعل من السهل إضافة، إزالة، ونقل الخصائص، لأن جميع الأسطر تصبح متشابهة.
9494

9595
````smart header="الكائن المعرف بأنه ثابت يمكنه أن يتغير"
96-
يرجى ملاحظة: يمكن تعديل كائن معلن على أنه ثابت.
96+
ملاحظة: يمكن تعديل كائن معلن على أنه ثابت.
9797
9898
مثلاً:
9999
@@ -109,11 +109,11 @@ user.name = "Pete"; // (*)
109109
alert(user.name); // Pete
110110
```
111111
112-
قد يبدو أن الخط `(*)` سيسبب خطأ ، لكن لا. يُحدِّد "const" قيمة "user" ، وليس إصلاح محتوياتها.
112+
قد يبدو أن الخط `(*)` سيسبب خطأ، لكن ذلك لن يحدث. يُحدِّد "const" قيمة "user"، وليس إصلاح محتوياتها.
113113
114-
لن يُظهر "const" خطأ إلا إذا حاولنا تعيين "user = ...` ككل.
114+
لن يُظهر "const" خطأ إلا إذا حاولنا تعيين "user = ...` كله.
115115
116-
هناك طريقة أخرى لعمل خصائص كائن ثابتة ، وسنتناولها لاحقًا في الفصل<info:property-descriptors>.
116+
هناك طريقة أخرى لخلق خصائص كائن ثابتة، وسنتناولها لاحقًا في الفصل <info:property-descriptors>.
117117
````
118118

119119
## الأقواس المربعة
@@ -125,11 +125,11 @@ alert(user.name); // Pete
125125
user.likes birds = true
126126
```
127127

128-
لا تفهم الجافا اسكريبت هذه الصيغه. يعتقد أننا نتعامل مع "user.likes" ، ثم تعطي خطأ في بناء الجملة عندما يصادف "birds" غير متوقعة
128+
لا تفهم الجافاسكريبت هذه الصيغه. يعتقد أننا نتعامل مع "user.likes"، ثم تعطي خطأ في بناء الجملة عندما يصادف "birds" غير متوقعة.
129129

130-
تتطلب النقطة أن يكون المفتاح معرفًا متغيرًا صالحًا. هذا يعني: أنه لا يحتوي على مسافات ، ولا يبدأ برقم ولا يتضمن أحرفًا خاصة (يُسمح بـ `$` و` _`).
130+
تتطلب النقطة أن يكون المفتاح معرفًا متغيرًا صالحًا. هذا يعني: أنه لا يحتوي على مسافات، ولا يبدأ برقم ولا يتضمن أحرفًا خاصة (يُسمح بـ `$` و` _`).
131131

132-
هناك بديل "رمز القوس المربع" يعمل مع أي سلسلة:
132+
هناك بديل "رمز القوس المربع" الذي يعمل مع أي سلسلة:
133133

134134
```js run
135135
let user = {};
@@ -146,7 +146,7 @@ delete user["likes birds"];
146146

147147
الآن كل شيء على ما يرام. يرجى ملاحظة أن السلسلة داخل الأقواس مقتبسة بشكل صحيح (أي نوع من علامات الاقتباس ستفعل).
148148

149-
توفر الأقواس المربعة أيضًا جلب اسم خاصية ناتجة عن قيمة أي تعبير - على عكس السلسلة الحرفية - مثل المتغير كما يلي:
149+
توفر الأقواس المربعة أيضًا جلب اسم خاصية ناتجة عن قيمة أي تعبير -على عكس السلسلة الحرفية- مثل المتغير كما يلي:
150150

151151
```js
152152
let key = "likes birds";
@@ -155,7 +155,7 @@ let key = "likes birds";
155155
user[key] = true;
156156
```
157157

158-
هنا, المتغير`key` يمكن حسابه وقت التنفيذ run-time أو اعتمادا على ما يدخله المستخدم. من ثم نستخدمها للوصول إلى الخاصية.وهذا يمنحنا قدراً كبيراً من المرونة.
158+
هنا, المتغير `key` يمكن حسابه وقت التنفيذ (run-time) أو اعتمادا على ما يدخله المستخدم. من ثم نستخدمها للوصول إلى الخاصية. وهذا يمنحنا قدراً كبيراً من المرونة.
159159

160160
مثلاً:
161161

@@ -201,9 +201,9 @@ let bag = {
201201
alert( bag.apple ); // 5 if fruit="apple"
202202
```
203203

204-
معنى computed property بسيط: `[fruit]` تعني أن اسم الخاصية يجب أن يؤخذ من `fruit`.
204+
معنى computed property سهل: `[fruit]` تعني أن اسم الخاصية يجب أن يؤخذ من `fruit`.
205205

206-
لذا, إذا أدخل الزائر `"apple"`, `bag` ستتحول `{apple: 5}`.
206+
لذا, إذا أدخل الزائر `"apple"`، `bag` ستتحول `{apple: 5}`.
207207

208208
يعمل الأمر السابق بالطريقة التالية ذاتها:
209209
```js run
@@ -225,13 +225,13 @@ let bag = {
225225
};
226226
```
227227

228-
الأقواس المربعة أقوى بكثير من استخدام الصيغة النُقطية.حيث تسمح باستخدام أي أسماء خصائص و متغيرات. لكنها أيضا أكثر إرهاقاً في الكتابة.
228+
الأقواس المربعة أقوى بكثير من استخدام الصيغة النُقطية. حيث تسمح باستخدام أي أسماء خصائص ومتغيرات. لكنها أيضا أكثر إرهاقاً في الكتابة.
229229

230-
لذلك معظم الوقت, حينما يكون اسم خاصية معروفا أو بسيطا, تستخدم الصيغة النُقطية . وإذا أردنا شيئاً أكثر تعقيدا, ننتقل إلى استخدام الأقواس المربعة.
230+
لذلك، معظم الوقت، حينما يكون اسم خاصية معروفا أو غير مركب، تستخدم الصيغة النُقطية. وإذا أردنا شيئاً أكثر تعقيدا، ننتقل إلى استخدام الأقواس المربعة.
231231

232-
## اختصار قيمة الخاصية(Property value shorthand)
232+
## اختصار قيمة الخاصية (Property value shorthand)
233233

234-
في الكود الحقيقي ، غالبًا ما نستخدم المتغيرات الموجودة كقيم لأسماء الخصائص.
234+
في الشيفرة الحقيقية، غالبًا ما نستخدم المتغيرات الموجودة بصفتها قيَمًا لأسماء الخصائص.
235235

236236
مثلاً:
237237

@@ -248,9 +248,9 @@ let user = makeUser("John", 30);
248248
alert(user.name); // John
249249
```
250250

251-
في المثال السابق, تمتلك الخصائص نفس أسماء المتغيرات. حالة عمل خاصية من متغير هي أمر شائع جدا, that ذلك أنه من المميز وجود *اختصار قيمة الخاصية* لجعلها مختصرة .
251+
في المثال السابق، تمتلك الخصائص نفس أسماء المتغيرات. حالة عمل خاصية من متغير هي أمر شائع جدا، that ذلك أنه من المميز وجود *اختصار قيمة الخاصية* لجعلها مختصرة .
252252

253-
بدلاً من `name:name` يمكننا فقط كتابة `name`, كهذا المثال:
253+
بدلاً من `name:name` يمكننا فقط كتابة `name`، كهذا المثال:
254254

255255
```js
256256
function makeUser(name, age) {
@@ -264,7 +264,7 @@ function makeUser(name, age) {
264264
}
265265
```
266266

267-
يمكننا استخدام كل من الخصائص العادية و والاختصارات كليهما في نفس الكائن object :
267+
يمكننا استخدام كل من الخصائص العادية والاختصارات كليهما في نفس الكائن:
268268

269269
```js
270270
let user = {
@@ -276,9 +276,9 @@ let user = {
276276

277277
## قيود أسماء الخصائص Property names limitations
278278

279-
كما نعلم, لا يمكن للمتغير أن يمتلك اسماً يساوي واحداً من الكلمات المحفوظة للغة language-reserved words مثل "for", "let", "return" إلخ.
279+
كما نعلم، لا يمكن للمتغير أن يمتلك اسماً يساوي واحداً من الكلمات المحفوظة للغة (language-reserved words) مثل "for", "let", "return" إلخ.
280280

281-
لكن بالنسبة لخاصية في كائن, لا توجد مثل هذه القيود:
281+
لكن بالنسبة لخاصية في كائن، لا توجد مثل هذه القيود:
282282

283283
```js run
284284
// كل هذه الخصائص صحيحة
@@ -292,11 +292,11 @@ alert( obj.for + obj.let + obj.return ); // 6
292292
```
293293

294294

295-
باختصار, ليس هناك أي قيود لأسماء الخصائص property names. يمكن أن يكونوا أي حرف أو رمز (نوع مميز من identifiers, سيتم الحديث عنه لاحقاً).
295+
باختصار، ليس هناك أي قيود لأسماء الخصائص. يمكنها أن تكون أي حرف أو رمز (نوع مميز من identifiers، سيتم الحديث عنه لاحقاً).
296296

297297
الأنواع الأخرى تتحول تلقائياً لسلاسل نصية strings.
298298

299-
مثلاً, رقم `0` يتحول إلى حرف `"0"` عند استخدامه كاسم خاصية property key:
299+
مثلاً, رقم `0` يتحول إلى حرف `"0"` عند استخدامه اسما لخاصية:
300300

301301
```js run
302302
let obj = {
@@ -316,13 +316,13 @@ obj.__proto__ = 5; // assign a number
316316
alert(obj.__proto__); // [object Object] - the value is an object, didn't work as intended
317317
```
318318

319-
كما نرى من الكود , إعطاء قيمة أولية primitive `5` يتم تجاهلها.
319+
كما نرى في الشيفرة أعلاه، إعطاء قيمة أولية `5` يتم تجاهلها.
320320

321-
سوف نغطي طبيعة `__proto__` في [subsequent chapters](info:prototype-inheritance), واقتراح [ways to fix](info:prototype-methods) مثل هذا السلوك.
321+
سوف نغطي طبيعة `__proto__` في [subsequent chapters](info:prototype-inheritance)، واقتراح [ways to fix](info:prototype-methods) مثل هذا السلوك.
322322

323-
## فحص الكينونة, "in" معامل
323+
## فحص الكينونة، "in" معامل
324324

325-
ميزة ملحوظة للكائنات في الجافا اسكريبت ، مقارنة بالعديد من اللغات الأخرى ، هي أنه من الممكن الوصول إلى أي خاصية. لن يكون هناك خطأ إذا كانت الخاصية غير موجودة!
325+
ميزة ملحوظة للكائنات في الجافاسكريبت، مقارنة بالعديد من اللغات الأخرى، هي أنه من الممكن الوصول إلى أي خاصية. لن يكون هناك خطأ إذا كانت الخاصية غير موجودة!
326326

327327

328328
قراءة خاصية غير موجودة تُرجع فقط "غير محدد". لذا يمكننا بسهولة اختبار ما إذا كانت الخاصية موجودة:
@@ -333,7 +333,7 @@ let user = {};
333333
alert( user.noSuchProperty === undefined ); // "تحقق هذه الموازنة يشير إلى "عدم وجود الخاصية
334334
```
335335

336-
يوجد أيضا مُعامل خاصة `"in"` لفحص تواجد أي خاصية.
336+
يوجد أيضا مُعامل خاصة `"in"` لفحص وجود أي خاصية.
337337

338338
The syntax is:
339339
```js
@@ -351,7 +351,7 @@ alert( "blabla" in user ); // false, user.blabla غير موجود
351351

352352
يرجى ملاحظة أنه في الجهة اليسرى من `in` يجب أن يكون هناك *اسم خاصية*. يكون عادة نصًا بين علامتي تنصيص.
353353

354-
إذا حذفنا علامات التنصيص ، فهذا يعني متغيرًا ، يجب أن يحتوي على الاسم الفعلي المراد اختباره. على سبيل المثال:
354+
إذا حذفنا علامات التنصيص، فهذا يعني متغيرًا، يجب أن يحتوي على الاسم الفعلي المراد اختباره. على سبيل المثال:
355355

356356
```js run
357357
let user = { age: 30 };
@@ -362,9 +362,9 @@ alert( *!*key*/!* in user ); // true, خاصية "age" موجودة
362362
363363
لماذا يوجد المعامل `in`? أليس من الكافي المقارنة مقابل `undefined`?
364364
365-
حسناً, في معظم الأحيان المقارنة ب `undefined` تكون جيدة. ولكن هناك حالة خاصة عندما تفشل, لكن `"in"` تعمل بشكل صحيح.
365+
حسناً، في معظم الأحيان المقارنة بـ`undefined` تكون جيدة. ولكن هناك حالة خاصة عندما تفشل، لكن `"in"` تعمل بشكل صحيح.
366366
367-
يحدث ذلك عند وجود خاصية داخل كائن ، ولكنها تخزن قيمة `undefined`:
367+
يحدث ذلك عند وجود خاصية داخل كائن، ولكنها تخزن قيمة `undefined`:
368368
369369
```js run
370370
let obj = {
@@ -376,24 +376,24 @@ alert( obj.test ); // تعطي undefined, لذلك - ألا توجد هذه ال
376376
alert( "test" in obj ); // true, الخاصية موجودة بالفعل!
377377
```
378378
379-
في الكود السابق, الخاصية `obj.test` موجودة بالفعل. لذا معامل `in`يعمل بشكل صحيح.
379+
في الشيفرة السابقة، الخاصية `obj.test` موجودة بالفعل. لذا معامل `in`يعمل بشكل صحيح.
380380
381-
مواقف كهذه تحدث نادراً, لأن `undefined` لا ينبغي تعيينها بشكل ذاتي. عادة ما نستخدم `null` ل "unknown" أو "empty" قيم . لذا معامل `in` يعتبر ضيفاً غريباً في الكود.
381+
مواقف مثل هذه تحدث نادراً، لأن `undefined` لا ينبغي تعيينها بشكل ذاتي. عادة ما نستخدم `null` للقيم غير المعروفة أو الفارغة. لذا معامل `in` يعتبر ضيفاً غريباً في الشيفرة.
382382
383383
384384
## The "for..in" loop
385385
386-
للمرور على كل مفاتيح الكائن, يوجد شكل خاص آخر للحلقة loop: `for..in`. هذه الحلقة مختلفة تمامًا عما درسناه سابقًا، أي الحلقة `for(;;)`.
386+
للمرور على كل مفاتيح الكائن، يوجد شكل خاص آخر للحلقة loop: `for..in`. هذه الحلقة مختلفة تمامًا عما درسناه سابقًا، أي الحلقة `for(;;)`.
387387
388-
طريقة الكتابة في الكود:
388+
طريقة الكتابة في الشيفرة:
389389
390390
```js
391391
for (key in object) {
392392
//يتنفذ ما بداخل الحلقة لكل مفتاح ضمن خاصيات الكائن
393393
}
394394
```
395395
396-
مثلاً, لنطبع جميع خاصيات الكائن `user`:
396+
مثلاً، لنطبع جميع خاصيات الكائن `user`:
397397
398398
```js run
399399
let user = {
@@ -410,13 +410,13 @@ for (let key in user) {
410410
}
411411
```
412412
413-
لاحظ أن جميع تراكيب "for" تتيح لنا تعريف متغير التكرار بِداخل الحلقة، مثل `let key` في المثال السابق,.
413+
لاحظ أن جميع تراكيب "for" تتيح لنا تعريف متغير التكرار بِداخل الحلقة، مثل `let key` في المثال السابق.
414414
415-
أيضاً, يمكننا استخدام اسم متغير آخر بدلا من `key`. مثلا, `"for (let prop in obj)"` مستخدم أيضاَ بكثرة.
415+
أيضاً، يمكننا استخدام اسم متغير آخر بدلا من `key`. مثلا، `"for (let prop in obj)"` مستخدم أيضاَ بكثرة.
416416
417417
### الترتيب مثل الكائنات
418418
419-
هل الكائنات مرتبة? بمعنى آخر, إن تنقلنا في حلقة خلال كائن, هل نحصل على جميع الخاصيات بنفس الترتيب الذي أُضيفت به؟ وهل يمكننا الاعتماد على هذا؟
419+
هل الكائنات مرتبة؟ بمعنى آخر، إن تنقلنا في حلقة خلال كائن، هل نحصل على جميع الخاصيات بنفس الترتيب الذي أُضيفت به؟ وهل يمكننا الاعتماد على هذا؟
420420
421421
The short answer is: "ordered in a special fashion": integer properties are sorted, others appear in creation order. The details follow.
422422

0 commit comments

Comments
 (0)