aboutsummaryrefslogtreecommitdiff
path: root/files/ar/web/javascript
diff options
context:
space:
mode:
authorPeter Bengtsson <mail@peterbe.com>2020-12-08 14:41:15 -0500
committerPeter Bengtsson <mail@peterbe.com>2020-12-08 14:41:15 -0500
commit4b1a9203c547c019fc5398082ae19a3f3d4c3efe (patch)
treed4a40e13ceeb9f85479605110a76e7a4d5f3b56b /files/ar/web/javascript
parent33058f2b292b3a581333bdfb21b8f671898c5060 (diff)
downloadtranslated-content-4b1a9203c547c019fc5398082ae19a3f3d4c3efe.tar.gz
translated-content-4b1a9203c547c019fc5398082ae19a3f3d4c3efe.tar.bz2
translated-content-4b1a9203c547c019fc5398082ae19a3f3d4c3efe.zip
initial commit
Diffstat (limited to 'files/ar/web/javascript')
-rw-r--r--files/ar/web/javascript/about_javascript/index.html61
-rw-r--r--files/ar/web/javascript/guide/control_flow_and_error_handling/index.html467
-rw-r--r--files/ar/web/javascript/guide/grammar_and_types/index.html680
-rw-r--r--files/ar/web/javascript/guide/index.html116
-rw-r--r--files/ar/web/javascript/guide/introduction/index.html159
-rw-r--r--files/ar/web/javascript/guide/loops_and_iteration/index.html352
-rw-r--r--files/ar/web/javascript/guide/regular_expressions/index.html813
-rw-r--r--files/ar/web/javascript/guide/working_with_objects/index.html516
-rw-r--r--files/ar/web/javascript/guide/الدوال/index.html698
-rw-r--r--files/ar/web/javascript/index.html121
-rw-r--r--files/ar/web/javascript/introduction_to_object-oriented_javascript/index.html423
-rw-r--r--files/ar/web/javascript/reference/classes/constructor/index.html132
-rw-r--r--files/ar/web/javascript/reference/classes/index.html380
-rw-r--r--files/ar/web/javascript/reference/errors/index.html31
-rw-r--r--files/ar/web/javascript/reference/errors/unexpected_type/index.html68
-rw-r--r--files/ar/web/javascript/reference/global_objects/array/index.html481
-rw-r--r--files/ar/web/javascript/reference/global_objects/array/isarray/index.html146
-rw-r--r--files/ar/web/javascript/reference/global_objects/array/join/index.html143
-rw-r--r--files/ar/web/javascript/reference/global_objects/array/pop/index.html134
-rw-r--r--files/ar/web/javascript/reference/global_objects/array/reverse/index.html124
-rw-r--r--files/ar/web/javascript/reference/global_objects/array/slice/index.html151
-rw-r--r--files/ar/web/javascript/reference/global_objects/date/getdate/index.html85
-rw-r--r--files/ar/web/javascript/reference/global_objects/date/index.html261
-rw-r--r--files/ar/web/javascript/reference/global_objects/date/now/index.html80
-rw-r--r--files/ar/web/javascript/reference/global_objects/date/parse/index.html182
-rw-r--r--files/ar/web/javascript/reference/global_objects/date/setdate/index.html95
-rw-r--r--files/ar/web/javascript/reference/global_objects/date/utc/index.html133
-rw-r--r--files/ar/web/javascript/reference/global_objects/function/call/index.html219
-rw-r--r--files/ar/web/javascript/reference/global_objects/function/index.html183
-rw-r--r--files/ar/web/javascript/reference/global_objects/index.html126
-rw-r--r--files/ar/web/javascript/reference/global_objects/json/index.html215
-rw-r--r--files/ar/web/javascript/reference/global_objects/map/index.html358
-rw-r--r--files/ar/web/javascript/reference/global_objects/math/index.html190
-rw-r--r--files/ar/web/javascript/reference/global_objects/object/constructor/index.html152
-rw-r--r--files/ar/web/javascript/reference/global_objects/object/index.html182
-rw-r--r--files/ar/web/javascript/reference/global_objects/string/index.html314
-rw-r--r--files/ar/web/javascript/reference/global_objects/string/startswith/index.html101
-rw-r--r--files/ar/web/javascript/reference/global_objects/الارقام/index.html12
-rw-r--r--files/ar/web/javascript/reference/index.html50
-rw-r--r--files/ar/web/javascript/reference/operators/destructuring_assignment/index.html428
-rw-r--r--files/ar/web/javascript/reference/operators/index.html302
-rw-r--r--files/ar/web/javascript/reference/operators/new/index.html178
-rw-r--r--files/ar/web/javascript/reference/operators/object_initializer/index.html403
-rw-r--r--files/ar/web/javascript/reference/operators/operator_precedence/index.html420
-rw-r--r--files/ar/web/javascript/reference/operators/this/index.html381
-rw-r--r--files/ar/web/javascript/reference/statements/index.html141
-rw-r--r--files/ar/web/javascript/reference/statements/return/index.html145
-rw-r--r--files/ar/web/javascript/reference/الدوال/get/index.html165
-rw-r--r--files/ar/web/javascript/reference/الدوال/index.html645
49 files changed, 12342 insertions, 0 deletions
diff --git a/files/ar/web/javascript/about_javascript/index.html b/files/ar/web/javascript/about_javascript/index.html
new file mode 100644
index 0000000000..4a6fa9739e
--- /dev/null
+++ b/files/ar/web/javascript/about_javascript/index.html
@@ -0,0 +1,61 @@
+---
+title: About JavaScript
+slug: Web/JavaScript/About_JavaScript
+tags:
+ - جافا سكريبت
+ - مبتدئ
+ - مقدمة
+translation_of: Web/JavaScript/About_JavaScript
+---
+<div>{{JsSidebar}}</div>
+
+<h2 id="ماهي_جافا_سكريبت">ماهي جافا سكريبت</h2>
+
+<p><strong>جافا سكريبت</strong><sup>®</sup> (غالبا ما تختصر بـ <strong>JS</strong>) هي لغة خفيفة الوزن، مفسّرة، كائنية التوجه مع <a href="https://ar.wikipedia.org/wiki/First-class_function">دوال من الدرجة الأولى</a>، وهي معروفة باسم لغة البرمجة النصية لصفحات الويب، ولكنها <a href="https://ar.wikipedia.org/wiki/JavaScript#Uses_outside_web_pages">تستخدم في العديد من البيئات غير المتصفّح</a> أيضًا. وهي لغة برمجة مبنية على<a href="https://en.wikipedia.org/wiki/Prototype-based_programming"> نماذج أولية</a> ومتعددة النماذج تتسم بالديناميكية و تدعم أنماط البرمجة الكائنية التوجه و اﻷساسية و الوظيفية.</p>
+
+<p>تعمل جافا سكريبت على جانب العميل\المستخدم من الويب، و التي يمكن إستخدامها لتصميم\برمجة كيفية تصرف صفحات الويب عند وقوع خطأ ما. جافا سكريبت هي لغة سهلة التعلم ولغة برمجة قوية ، و تستخدم على نطاق واسع للتحكم في سلوك صفحات الويب.</p>
+
+<p>على عكس الاعتقاد الخاطئ الشائع ، فإن <strong>جافا سكريبت <em>ليست</em> "جافا المفسرة"</strong>. باختصار ، جافا سكريبت هي لغة برمجة ديناميكية تدعم بناء الكائن <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Details_of_the_Object_Model#Class-Based_vs._Prototype-Based_Languages">المعتمد على النماذج</a>. التركيب اﻷساسي مشابه -بشكل مقصود- لجافا و سي++ لتقليل عدد المفاهيم الجديدة المطلوبة لتعلم اللغة. إن تركيبات اللغة مثل عبارات <code>if</code> و حلقات <code>for</code> و <code>while</code> ، و الكتل <code>switch</code> and <code>try ... catch</code> تعمل بالمثل كما في هذه اللغات (أو أقرب إلى ذلك)</p>
+
+<p>يمكن أن تعمل جافا سكريبت كلغة <a href="https://ar.wikipedia.org/wiki/Procedural_programming">إجرائية</a> و <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript">لغة كائنية التوجه</a>.. يتم إنشاء الكائنات برمجياً في جافا سكريبت ، عن طريق إرفاق طرق وخصائص الكائنات الفارغة الأخرى <strong>في وقت التشغيل</strong>، على عكس التركيب\البناء اللغوي لتعريفات الأصناف الشائعة في اللغات المترجمة أمثال سي++ و جافا. بمجرد إنشاء كائن، يمكن استخدامه كمخطط (أو نموذج أولي) لإنشاء كائنات مشابهة.</p>
+
+<p>تتضمن الإمكانات الديناميكية لجافا سكريبت بناء الكائن وقت التشغيل ، وقوائم المعاملات المتغيرة ، ومتغيرات الوظيفة ، وإنشاء النص البرمجي الديناميكي (عن طريق <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval">eval</a>) ، واستبطان الكائن (عن طريق <code>for ... in</code>)، واستعادة الكود المصدري (يمكن لبرامج جافا سكريبت تفكيك هيئات\أجسام الوظائف رجوعا إلى نصها المصدري).</p>
+
+<p>لإجراء مناقشة أكثر عمقاً لبرمجة جافا سكريبت ، تابع روابط <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/About_JavaScript$translate?tolocale=ar#JavaScript_resources">موارد جافا سكريبت</a> أدناه.</p>
+
+<h2 id="ما_هي_تطبيقات_جافا_سكريبت_المتاحة؟">ما هي تطبيقات جافا سكريبت المتاحة؟</h2>
+
+<p>The Mozilla project provides two JavaScript implementations. The first <strong>ever</strong> JavaScript was created by Brendan Eich at Netscape, and has since been updated to conform to ECMA-262 Edition 5 and later versions. This engine, code named <a href="/en-US/docs/Mozilla/Projects/SpiderMonkey" title="en-US/docs/SpiderMonkey">SpiderMonkey</a>, is implemented in C/C++. The <a href="/en-US/docs/Rhino" title="en-US/docs/Rhino">Rhino</a> engine, created primarily by Norris Boyd (also at Netscape) is a JavaScript implementation written in Java. Like SpiderMonkey, Rhino is ECMA-262 Edition 5 compliant.</p>
+
+<p>Several major runtime optimizations such as TraceMonkey (Firefox 3.5), JägerMonkey (Firefox 4) and IonMonkey were added to the SpiderMonkey JavaScript engine over time. Work is always ongoing to improve JavaScript execution performance.</p>
+
+<p>Besides the above implementations, there are other popular JavaScript engines such as:-</p>
+
+<ul>
+ <li>Google's <a class="external" href="https://code.google.com/p/v8/" title="https://code.google.com/p/v8/">V8</a>, which is used in the Google Chrome browser and recent versions of Opera browser. This is also the engine used by <a href="http://nodejs.org">Node.js</a>.</li>
+ <li>The <a class="external" href="https://www.webkit.org/projects/javascript/index.html" title="https://www.webkit.org/projects/javascript/index.html">JavaScriptCore</a> (SquirrelFish/Nitro) used in some WebKit browsers such as Apple Safari.</li>
+ <li><a class="external" href="http://my.opera.com/ODIN/blog/carakan-faq" title="http://my.opera.com/ODIN/blog/carakan-faq">Carakan</a> in old versions of Opera.</li>
+ <li>The <a class="external" href="http://en.wikipedia.org/wiki/Chakra_%28JScript_engine%29" title="http://en.wikipedia.org/wiki/Chakra_%28JScript_engine%29">Chakra</a> engine used in Internet Explorer (although the language it implements is formally called "JScript" in order to avoid trademark issues).</li>
+</ul>
+
+<p>Each of Mozilla's JavaScript engines expose a public API which application developers can use to integrate JavaScript into their software. By far, the most common host environment for JavaScript is web browsers. Web browsers typically use the public API to create <strong>host objects</strong> responsible for reflecting the <a class="external" href="http://www.w3.org/DOM/">DOM</a> into JavaScript.</p>
+
+<p>Another common application for JavaScript is as a (Web) server side scripting language. A JavaScript web server would expose host objects representing a HTTP request and response objects, which could then be manipulated by a JavaScript program to dynamically generate web pages. <a href="http://nodejs.org">Node.js</a> is a popular example of this.</p>
+
+<h2 id="مصادر_جافا_سكريبت">مصادر جافا سكريبت</h2>
+
+<dl>
+ <dt><a href="/en-US/docs/Mozilla/Projects/SpiderMonkey" title="en-US/docs/SpiderMonkey">SpiderMonkey</a></dt>
+ <dd>Information specific to Mozilla's implementation of JavaScript in C/C++ engine (aka SpiderMonkey), including how to embed it in applications.</dd>
+</dl>
+
+<dl>
+ <dt><a href="/en-US/docs/Rhino" title="en-US/docs/Rhino">Rhino</a></dt>
+ <dd>Information specific to the JavaScript implementation written in Java (aka Rhino).</dd>
+ <dt><a href="/en-US/docs/Web/JavaScript/Language_Resources" title="en-US/docs/JavaScript_Language_Resources">Language resources</a></dt>
+ <dd>Pointers to published JavaScript standards.</dd>
+ <dt><a href="/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript" title="en-US/docs/A_re-introduction_to_JavaScript">A re-introduction to JavaScript</a></dt>
+ <dd><a href="/en-US/docs/Web/JavaScript/Guide" title="en-US/docs/JavaScript/Guide">JavaScript guide</a> and <a href="/en-US/docs/Web/JavaScript/Reference" title="en-US/docs/JavaScript/Reference">JavaScript reference</a>.</dd>
+</dl>
+
+<p>JavaScript® is a trademark or registered trademark of Oracle in the U.S. and other countries.</p>
diff --git a/files/ar/web/javascript/guide/control_flow_and_error_handling/index.html b/files/ar/web/javascript/guide/control_flow_and_error_handling/index.html
new file mode 100644
index 0000000000..d87ef2f7e9
--- /dev/null
+++ b/files/ar/web/javascript/guide/control_flow_and_error_handling/index.html
@@ -0,0 +1,467 @@
+---
+title: التحكم فى التدفق وامساك الاخطاء
+slug: Web/JavaScript/Guide/Control_flow_and_error_handling
+translation_of: Web/JavaScript/Guide/Control_flow_and_error_handling
+---
+<div>{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Grammar_and_types", "Web/JavaScript/Guide/Loops_and_iteration")}}</div>
+
+<p class="summary" dir="rtl">جافاسكريبت تدعم مجموعة من البيانات المدمجة، وتحديدا التحكم في تدفق البيانات، التي يمكنك استخدامها لخلق قدرا كبيرا من التفاعل في التطبيق الخاص بك. يقدم هذا الفصل لمحة عامة عن هذه البيانات.</p>
+
+<div style="font-size: 15; font-family: 'tahoma';">
+<p dir="rtl">يحتوي هذا الفصل، <a href="/en-US/docs/Web/JavaScript/Reference/Statements">مرجع الجافاسكريبت</a> على تفاصيل شاملة عن التعليمات البرمجية. في جافاسكريبت، يتم استخدام رمز الفاصلة المنقوطة (<code>;</code>) لانهاء التعليمات البرمجية.</p>
+
+<div class="note">
+<p dir="rtl">ملحوظة: برامج الجافاسكريبت وبيانات الجافاسكريبت، غالباً ما تسمى تعليمات برمجية.</p>
+</div>
+
+<p dir="rtl">أي تعبير جافا سكريبت، هو  أيضا تعليمة برمجية. راجع <a href="/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators">Expressions and operators</a>  للحصول على معلومات كاملة حول التعبيرات.</p>
+
+<h2 dir="rtl" id="Block_statement">Block statement</h2>
+
+<p dir="rtl">ابسط تعليمة برمجية هي التعليمة البرمجية بلوك  block، التي تستخدم لاحتواء مجموعة من التعليمات البرمجية. البلوك محدد بواسطة الاقواس المتعرجة:</p>
+
+<pre class="syntaxbox">{
+ statement_1;
+ statement_2;
+ .
+ .
+ .
+ statement_n;
+}
+</pre>
+
+<h3 dir="rtl" id="مثال"><strong>مثال</strong></h3>
+
+<p dir="rtl">اغلب استخدامات البلوك، تكون مع تعليمات التحكم في التدفق ( مثل <code>if</code>, <code>for</code>, <code>while</code> )</p>
+
+<pre class="brush: js">while (x &lt; 10) {
+ x++;
+}
+</pre>
+
+<p dir="rtl">لدينا هنا، <code>{ ;++x }</code> التعليمة البرمجة block.</p>
+
+<p dir="rtl"><strong>هام</strong>: في جافا سكريبت قبل ECMAScript2015. البلوك لم يكن لديه نطاق. المتغيرات المستخدمة في البلوك، سيتم تغيير نطاقها الى النطاق العام وهو السكريبت، فتصبح متغيرات عامة متاحة لجميع التعليمات البرمجية في السكريبت، اما اذا وجد البلوك داخل دالة سيتم تغيير نطاقها لهذه الدالة، وبالتالي ستصبح متغيرات محلية متاحة لهذه الدالة فقط.</p>
+
+<p dir="rtl">في جافا سكريبت، البلوكات "المستقلة"  يمكن أن ينتج  عنها نتائج مختلفة تماما عما كان سينتج في C أو جافا. فمثلا</p>
+
+<pre class="brush: js">var x = 1;
+{
+ var x = 2;
+}
+console.log(x); // outputs 2
+</pre>
+
+<p dir="rtl">مخرجات التعليمة البرمجية اعلاه، ستكون 2 وذالك لان المتغير x المتواجد <strong>داخل </strong>البلوك والمتغير x المتواجد <strong>خارج</strong> البلوك لديهما <strong>نفس النطاق</strong>، او بمعنى اصح، كلاهما في النطاق العام وهو السكريببت. في C أو جافا. المخرجات ستكون 1.</p>
+
+<p dir="rtl">ابتداءا من ECMAScript2015. استخدام المتغير <code>let</code> داخل البلوك سينتج عنه سلوك مغاير. راجع {{jsxref("Statements/let", "let")}} صفحة المرجع للحصول على مزيد من المعلومات.</p>
+
+<h2 dir="rtl" id="التعليمات_الشرطية">التعليمات الشرطية</h2>
+
+<p dir="rtl">التعليمة الشرطية هي مجموعة من الأوامر التي ستنفذ إذا تحقق شرطا معيناً. تدعم الجافاسكريبت اثنين من التعليمات الشرطية: هما <code>if...else</code> و <code>switch</code>.</p>
+
+<h3 dir="rtl" id="التعليمة_if...else">التعليمة <code>if...else</code></h3>
+
+<p dir="rtl">ستنفذ التعليمة البرمجية المرتبطة بالتعليمة <code><strong>if</strong></code><strong> </strong>اذا كان الشرط المنطقي يساوي <code>true</code>. وكذالك ستنفذ التعليمة البرمجية المرتبطة بالتعليمة <code><strong>else</strong></code> اذا كان الشرط المنطقي يساوي <code>false</code>. استخدام التعليمة <code>else</code> اختياري. فيما تكون التعليمة <code>if</code> على الشكل التالي،</p>
+
+<pre class="syntaxbox">if (condition) {
+ statement_1;
+} else {
+ statement_2;
+}</pre>
+
+<p dir="rtl"><strong>الشرط</strong> <code>condition</code>، يمكن ان يكون اي تعبير لإختبار ما اذا كان الشرط <code>true</code> او <code>false </code>راجع <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean#Description">Boolean.</a> لتوضيح ما الذي سيتم تنفيذه: في حالة ما اذا كان الشرط صحيح  سيتم تنفيذ <code>statement_1</code>، اما اذا كان الشرط غير صحيح سيتم تنفيذ <code>statement_2</code>، يمكن ل <code>statement_1</code> و <code>statement_2</code> ان تكون اي تعليمات برمجية، بما فيها تعليمة <code>if</code> اخرى.</p>
+
+<p dir="rtl">يمكنك أيضا توسيع مجال التعليمات الشرطية باستخدام <code><strong>else if</strong></code> لاختبار شروط متعددة في تسلسل، كما يلي:</p>
+
+<pre class="syntaxbox">if (condition_1) {
+ statement_1;
+} else if (condition_2) {
+  statement_2;
+} else if (condition_n) {
+  statement_n;
+} else {
+  statement_last;
+}
+
+</pre>
+
+<p dir="rtl">في حالة وجود شروط متعددة سيتم تنفيذ شرط واحد فقط، وهو الشرط المنطقي الذي سيتم اختباره ب <code>true</code>. لتنفيذ عدة تعليمات برمجية، قم بتضمينها في التعليمة بلوك ({ ... }). من الجيد دائماً استخدام التعليمة بلوك، لا سيما عند استخدام التعليمات الشرطية المتداخلة :</p>
+
+<pre class="syntaxbox">if (condition) {
+ statement_1_runs_if_condition_is_true;
+ statement_2_runs_if_condition_is_true;
+} else {
+ statement_3_runs_if_condition_is_false;
+ statement_4_runs_if_condition_is_false;
+}
+</pre>
+
+<div dir="rtl">من المستحسن عدم استخدام التعيينات البسيطة في التعبير الشرطي، لأنه يمكن الخلط بين التعيين والمساواة، على سبيل المثال، لا تستخدم التالي:</div>
+
+<div dir="rtl"> </div>
+
+<pre class="example-bad brush: js">if (x = y) {
+ /* statements here */
+}
+</pre>
+
+<p dir="rtl">إذا كنت بحاجة إلى استخدام تعيين بسيط في تعبير شرطي، استخدم أقواس إضافية حول التعيين. على سبيل المثال:</p>
+
+<pre class="brush: js">if ((x = y)) {
+ /* statements here */
+}
+</pre>
+
+<h4 dir="rtl" id="القيم_Falsy">القيم  Falsy</h4>
+
+<p dir="rtl">القيم التالية تُقَيًم إلى <code>false</code> عند اختباها في تعليمة شرطية (وتعرف ايضا بالقيم {{Glossary("Falsy")}}):</p>
+
+<ul>
+ <li><code>false</code></li>
+ <li><code>undefined</code></li>
+ <li><code>null</code></li>
+ <li><code>0</code></li>
+ <li><code>NaN</code></li>
+ <li>السلسلة النصية الفارغة (<code>""</code>)</li>
+</ul>
+
+<p dir="rtl">كل القيم الأخرى، بما في ذلك جميع الكائنات، تقيم إلى <code>true</code> عندما يتم تمريرها إلى تعليمة شرطية.</p>
+
+<p dir="rtl">لا تخلط بين القيم المنطقية الاولية <code>true</code> و <code>false</code> مع القيم true و false للكائن {{jsxref("Boolean")}}. على سبيل المثال:</p>
+
+<pre class="brush: js">var b = new Boolean(false);
+if (b) // this condition evaluates to true
+if (b == true) // this condition evaluates to false
+</pre>
+
+<h4 dir="rtl" id="مثال_2"><strong>مثال</strong></h4>
+
+<p dir="rtl">فى المثال التالى, الدالة checkData ستعود ب <code>true</code> ادا كان عدد الحروف في الكائن Text يساوي ثلاثة، بخلاف ذالك، سيظهر التنبيه (<code>alert</code>) وتعود ب <code>false</code>.</p>
+
+<pre class="brush: js">function checkData() {
+ if (document.form1.threeChar.value.length == 3) {
+ return true;
+ } else {
+ alert('Enter exactly three characters. ' +
+ document.form1.threeChar.value + ' is not valid.');
+ return false;
+ }
+}
+</pre>
+
+<h3 dir="rtl" id="التعليمة_switch"><code>التعليمة</code> <code>switch</code></h3>
+
+<p dir="rtl">التعليمة <code>switch</code> تسمح للبرنامج <strong>باختبار</strong> التعبير، وذالك من خلال مطابقة قيمة التعبير مع الحالة <code>case</code>. إذا تم العثور على تطابق، البرنامج سينفذ التعليمة البرمجية المرتبطة بها. التعليمة <code>switch</code> تكون على الشكل التالي:</p>
+
+<pre class="syntaxbox">switch (expression) {
+ case label_1:
+ statements_1
+ [break;]
+ case label_2:
+ statements_2
+ [break;]
+ ...
+ default:
+ statements_def
+ [break;]
+}
+</pre>
+
+<p dir="rtl">بداية يقوم البرنامج بالبحث عن الحالة <code>case</code> التي تطابق قيمتها قيمة ال <code>expression</code>، اذا وجدت، يقوم البرنامج بتنفيذ التعليمة البرمجية المرتبطة بها، اذا لم يجد ما يبحث عنه في اي من الحالات <code>case</code>، سيقوم البرنامج بتنفيذ التعليمات البرمجية المرتبطة بالحالة <code>default</code> اذا وجدت، لان وجود الحالة <code>default</code> في التعليمة <code>switch</code> اختياري. اذا لم يجد البرنامج اي حالة <code>case</code> متطابقة ولا الحالة <code>default</code> سيقوم بتنفيذ التعليمات البرمجية التي تلي التعليمة <code>switch</code>.</p>
+
+<p dir="rtl">التعليمة <code>break</code> مرتبطة مع كل حالة <code>case</code>، مهمتها جعل البرنامج يقفز خارج التعليمة <code>switch</code> بمجرد تنفيذ التعليمة البرمجية، واستكمال تنفيذ التعليمات البرمجية التي تلي التعليمة <code>switch</code>. بما ان وجود التعليمة <code>break</code> اختياري، ففي حالة عدم وجودها سيقوم البرنامج بتنفيذ التعليمة التالية في <code>switch</code>.</p>
+
+<h4 dir="rtl" id="مثال_3">مثال</h4>
+
+<p dir="rtl">في المثال التالي، اذا كان <code>fruittype</code> يساوي "Bananas"،  سيقوم البرنامج بتنفيذ  التعليمات البرمجية المرتبطة بالحالة <code>'case: 'Banana</code>. عندما سسيجد <code>break</code>، سيقوم بايقاف <code>switch</code> وينفذ التعليمات البرمجية التي تليها. اذا لم يجد <code>break</code> سينفذ التعليمة البرمجية المرتبطة بالحالة '<code>case</code>: 'Cherries ايضا. </p>
+
+<pre class="brush: js">switch (fruittype) {
+ case 'Oranges':
+ console.log('Oranges are $0.59 a pound.');
+ break;
+ case 'Apples':
+ console.log('Apples are $0.32 a pound.');
+ break;
+ case 'Bananas':
+ console.log('Bananas are $0.48 a pound.');
+ break;
+ case 'Cherries':
+ console.log('Cherries are $3.00 a pound.');
+ break;
+ case 'Mangoes':
+ console.log('Mangoes are $0.56 a pound.');
+ break;
+ case 'Papayas':
+ console.log('Mangoes and papayas are $2.79 a pound.');
+ break;
+ default:
+ console.log('Sorry, we are out of ' + fruittype + '.');
+}
+console.log("Is there anything else you'd like?");</pre>
+
+<div class="note">
+<p dir="rtl"><strong>ملاحظة :</strong> لمزيد من التفاصيل حول التعليمة  <code><a href="https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Instructions/switch">switch</a></code>.</p>
+</div>
+
+<h2 dir="rtl" id="التعليمات_المعالجة_للاستثناءات">التعليمات المعالجة للاستثناءات</h2>
+
+<blockquote>
+<p dir="rtl">من الثابت بقواعد الرياضيات انه لا يجوز القسمة على صفر بأي حال من الأحوال لذلك لن يتمكن البرنامج من تنفيذ العملية المطلوبة وستظهر للمستخدم رسالة خطا تنفيذي لا يمكنه تفاديها وعلى الأغلب أنها ستسبب بإغلاق البرنامج.<br>
+ <br>
+ ولمعالجة أخطاء التنفيذ هذه وتحجيمها فبل حدوثها وفرت لنا لغات البرمجة وعلى رأسها الجافاسكريبت آلية تتمثل بوضع جمل استثنائية خاصة يتوقع من خلالها المبرمج أنواع أخطاء التنفيذ التي قد تحدث ويقوم ببرمجة حدث برمجي بكل استثناء ليتم تنفيذه بدلا من الخطا التنفيذي.</p>
+
+<p dir="rtl">بصفة عامة، الاستثناءات هي عبارة عن آلية برمجية لمعالجة أخطاء التنفيذ المحتمل وقوعها.</p>
+
+<p dir="rtl"> </p>
+</blockquote>
+
+<p dir="rtl">يمكنك قذف (توليد)  الاستثناءات من خلال التعليمة <code>throw</code> والتعامل معها باستخدام التعليمة <code>try...catch</code></p>
+
+<ul>
+ <li><a href="#throw_statement"><code>throw</code> statement</a></li>
+ <li><a href="#try...catch_statement"><code>try...catch</code> statement</a></li>
+</ul>
+
+<h3 dir="rtl" id="انواع_الاستثناءات">انواع الاستثناءات</h3>
+
+<p dir="rtl">في جافا سكريبت، يمكن استخدام الكائنات لقذف/توليد الاستثناءات. ومع ذلك، ليس كل الكائنات القاذفة هي نفسها. من الشائع إلى حد ما، قذف الاعداد أو السلاسل الحرفية كاخطاء، الا انه في كثير من الأحيان سيكون أكثر فعالية استخدام أحد أنواع الاستثناءات التالية، والتي أنشئت خصيصا لهذا الغرض:</p>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types">ECMAScript exceptions</a></li>
+ <li>{{domxref("DOMException")}} و {{domxref("DOMError")}}</li>
+</ul>
+
+<h3 dir="rtl" id="التعليمة_throw"><code>التعليمة throw</code></h3>
+
+<p dir="rtl">التعليمة <code>throw</code> تقذف الاخطاء. عند حدوث خطأ، عادة سوف تتوقف جافا سكريبت، وستولد رسالة للاعلان عن الخطأ. المصطلح التقني لهذه العملية هو : الجافاسكريبت ستقذف (throw) الخطأ. التعليمة <code>throw</code> تمكتك من انشاء خطأ حسب رغبتك. المصطلح التقني لهذه العملية هو: اقذف استثناءا (throw an exception).</p>
+
+<p dir="rtl">إستخدِم التعليمة <code>throw</code> لقذف الإستثناء، عنما تريد قذف إستثناءا، عليك تحديد التعبير (<code>expression</code>) الذي سيحتوي على القيمة التي ستقذف:</p>
+
+<pre class="syntaxbox">throw expression;
+</pre>
+
+<p dir="rtl">يمكنك قذف اي استثناء، وليس مجرد تعبيرات من نوع معين. التعليمة البرمجية التالية تقذف استثناءات لمختلف انواع البيانات:</p>
+
+<pre class="brush: js">throw 'Error2'; // String type
+throw 42; // Number type
+throw true; // Boolean type
+throw {toString: function() { return "I'm an object!"; } };
+</pre>
+
+<div class="note" dir="rtl"><strong>ملحوظة</strong> : يمكنك تحديد كائن عندما ستقوم بقذف الاستثناء. يمكنك بعد ذالك الاشارة إلى خصائص الكائن في البلوك catch. يقوم المثال التالي بإنشاء الكائن myUserException من النوع UserException واستحدامه في التعليمة throw.</div>
+
+<pre class="brush: js">// Create an object type UserException
+function UserException(message) {
+ this.message = message;
+ this.name = 'UserException';
+}
+
+// Make the exception convert to a pretty string when used as a string
+// (e.g. by the error console)
+UserException.prototype.toString = function() {
+ return this.name + ': "' + this.message + '"';
+}
+
+// Create an instance of the object type and throw it
+throw new UserException('Value too high');</pre>
+
+<div class="note">
+<p dir="rtl">لمزيد من المعلومات حول هذه التعليمة، راجع صفحة مرجع الجافا سكريبت  <code><a href="https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Instructions/throw">throw</a></code>.</p>
+</div>
+
+<h3 dir="rtl" id="التعليمة_try...catch"><code>التعليمة </code> <code>try...catch</code></h3>
+
+<p dir="rtl">التعليمة <code>try...catch</code> تحدد بلوك من التعليمات البرمجية لتجربتها، و تنص على وجود واحد أو أكثر من الاستجابات التي ينبغي على الاستثناء ان يقذفها. إذا تم <strong>قذف</strong> الاستثناء، <strong>ستمسك</strong> به التعليمة  <code>try...catch.</code></p>
+
+<p dir="rtl">التعليمة <code>try...catch </code>تتكون من البلوك <code>try</code> الذي سيحتوي على واحدة أو أكثر من التعليمات البرمجية، والبلوك <code>catch</code> سيحتوي على التعليمات البرمجية التي تحدد ما يجب فعله اذا تم قذف الاستثناء من البلوك <code>try</code>. بمعنى اخر، في معظم الحالات. نريد من التعليمات البرمجية داخل البلوك <code>try</code> ان تسير بشكل طبيعي، وفي حالة حدوث مشاكل يمرّر التحكم الى البلوك <code>catch</code>. إذا كانت هناك احدى التعليمات البرمجية داخل البلوك <code>try</code> تقذف استثناءا، سيتم نقل التحكم فورا إلى البلوك <code>catch</code>. وإذا لم يتم إرسال أي استثناء من داخل البلوك <code>try</code>، فالبلوك <code>catch</code> لن يقم باي شئ. هذه التعليمة البرمجية يمكن ان تحتوي على البلوك <code>finally</code> والذي سينفذ بعد تنفيذ البلوك  <code>try</code> و <code>catch</code>، وايضا سينفذ قبل تنفيذ التعليمات البرمجية التي تلي التعليمة <code>try...catch</code>، اذا وجدت.</p>
+
+<p dir="rtl"><br>
+ المثال التالى يستخدم التعليمة <code>try...catch</code>. ويقوم باستدعاء دالة تعود باسم الشهر من مصفوفة بناء على القيمة التي تم تمريرها إلى الدالة. إذا كانت القيمة لا تتوافق مع رقم الشهر (1-12)، سيولّد استثناء مع القيمة "InvalidMonthNo" فيما تقوم التعليمة البرمجية في البلوك <code>catch</code> بتعين القيمة <code>unknown</code> إلى المتغير <code>monthName</code>.</p>
+
+<pre class="brush: js">function getMonthName(mo) {
+ mo = mo - 1; // Adjust month number for array index (1 = Jan, 12 = Dec)
+ var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul',
+ 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
+ if (months[mo]) {
+ return months[mo];
+ } else {
+ throw 'InvalidMonthNo'; //throw keyword is used here
+ }
+}
+
+try { // statements to try
+ monthName = getMonthName(myMonth); // function could throw exception
+}
+catch (e) {
+ monthName = 'unknown';
+ logMyErrors(e); // pass exception object to error handler -&gt; your own function
+}
+</pre>
+
+<h4 dir="rtl" id="The_catch_block">The <code>catch</code> block</h4>
+
+<p dir="rtl">يمكنك استخدام البلوك  <code>catch</code> للامساك بجميع الاستثناءات التي سيتم قذفها من البلوك <code>try.</code></p>
+
+<pre class="syntaxbox">catch (catchID) {
+ statements
+}
+</pre>
+
+<p dir="rtl">البلوك <code>catch</code> يحدد الايدي <code>catchID</code> الذي سيمسك القيمة المحددة من طرف التعليمة <code>throw</code>، يمكنك استخدام هذا الايدي للحصول على معلومات حول الاستثناء الذي سيقذف. جافا سكريبت ستنشئ هذا الايدي عند دخوله الى البلوك <code>catch</code>. يبدا عمر هذا الايدي من لحظة دخوله الى البلوك <code>catch،</code> وينتهي عندما ينتهي البلوك <code>catch </code>من التنفيذ.</p>
+
+<p dir="rtl">على سبيل المثال، التعليمة البرمجية التالية ستقذف استثناءا. عند حدوث الاستثناء، سيتم نقل التحكم الى البلوك <code>catch</code>.</p>
+
+<pre class="brush: js">try {
+ throw 'myException'; // generates an exception
+}
+catch (e) {
+ // statements to handle any exceptions
+ logMyErrors(e); // pass exception object to error handler
+}
+</pre>
+
+<h4 dir="rtl" id="The_finally_block">The <code>finally</code> block</h4>
+
+<p dir="rtl">البلوك <code>finally</code> سيحتوي على التعليمات البرمجية التي سيقوم بتنفيذها بعدما تنفذ البلوكات <code>try</code> و <code>catch</code>، وايضا سينفذ قبل تنفيذ التعليمات البرمجية التي تلي التعليمة <code>try...catch</code>. سينفذ البلوك <code>finally</code> سواء تم قذف الاستثناء ام لا، اذا تم قذف الاستثناء، ستنفذ التعليمات البرمجية في البلوك <code>finally</code> حتى وان لم يتم معالجة الاستثناء في البلوك <code>catch</code>.</p>
+
+<p dir="rtl">يمكنك استخدام البلوك <code>finally</code> لجعل السكريبت الخاص بك يفشل بأمان عند حدوث استثناء، على سبيل المثال، اذا كنت في حاجة إلى تحرير مورد، او لغلق ال flux، الخ. المثال التالي يفتح ملف ثم ينفذ التعليمات البرمجية لهذا ملف (server-side JavaScript يسمح لك بالوصول الى الملفات). اذا تم قذف استثناء في حين أن الملف مفتوح، البلوك <code>finally</code> ستغلق هذا الملف قبل فشل السكريبت.</p>
+
+<pre class="brush: js">openMyFile();
+try {
+ writeMyFile(theData); //This may throw a error
+} catch(e) {
+ handleError(e); // If we got a error we handle it
+} finally {
+ closeMyFile(); // always close the resource
+}
+</pre>
+
+<p dir="rtl">عندما سيقوم البلوك <code>finally</code> بارجاع قيمة، تصبح هذه القيمة قيمة الإرجاع من كامل المجموعة  <code>try-catch-finally</code> بغض النظر عن التعليمات البرمجية العائدة من البلوكات  <code>try</code> و <code>catch</code>.</p>
+
+<pre class="brush: js">function f() {
+ try {
+ console.log(0);
+ throw 'bogus';
+ } catch(e) {
+ console.log(1);
+ return true; // this return statement is suspended
+ // until finally block has completed
+ console.log(2); // not reachable
+ } finally {
+ console.log(3);
+ return false; // overwrites the previous "return"
+ console.log(4); // not reachable
+ }
+ // "return false" is executed now
+ console.log(5); // not reachable
+}
+f(); // console 0, 1, 3; returns false
+</pre>
+
+<p dir="rtl">الكتابة فوق القيم العائدة من قبل البلوك <code>finally</code> ينطبق أيضا على قذف الاستثناءات او اعادة القذف داخل البلوك <code>catch</code>:</p>
+
+<pre class="brush: js">function f() {
+ try {
+ throw 'bogus';
+ } catch(e) {
+ console.log('caught inner "bogus"');
+ throw e; // this throw statement is suspended until
+ // finally block has completed
+ } finally {
+ return false; // overwrites the previous "throw"
+ }
+ // "return false" is executed now
+}
+
+try {
+ f();
+} catch(e) {
+ // this is never reached because the throw inside
+ // the catch is overwritten
+ // by the return in finally
+ console.log('caught outer "bogus"');
+}
+
+// OUTPUT
+// caught inner "bogus"</pre>
+
+<h4 dir="rtl" id="التعليمات_try...catch_المتداخلة">التعليمات try...catch المتداخلة</h4>
+
+<p dir="rtl">يمكن عمل واحدة او اكثر من التعليمات <code>try...catch</code> المتداخلة.  شرط عدم توفر <code>try...catch</code> الداخلية على البلوك <code>catch</code>، تتطلب وجود البلوك <code>finally</code> والتعليمة <code>try...catch</code> الخارجية سوف تستخدم البلوك <code>catch</code> ليتم التحقق من المطابقة. راجع <a href="/en-US/docs/Web/JavaScript/Reference/Statements/try...catch#Nested_try-blocks">nested try-blocks</a> في صفحة المرجع الخاص بالتعليمة <code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/try...catch">try...catch</a></code>.</p>
+
+<h3 dir="rtl" id="باستخدام_الكائنات_Error">باستخدام الكائنات <code>Error</code></h3>
+
+<p dir="rtl">اعتماداً على نوع الخطأ، من الممكن استخدام الخصائص <code>name</code> و <code>message</code> للحصول على رسالة أكثر دقة. عموما لدينا الخاصية <code>name</code> التي ستعرض نوع الخطا الذي حدث (مثلا: <code>DOMException</code> او <code>Error</code>). والخاصية <code>message</code> التي ستعرض رسالة الخطأ لوصف هذا الخطا (تستخدم عادة عندما نريد تحويل او عرض نص الخطأ). على سبيل المثال:</p>
+
+<pre class="brush: js">try {
+ throw new Error('Whoops!');
+} catch (e) {
+ if( e.message === 'Whoops!'){
+ e.message = "Costume message";
+ }
+ console.log(e.name + ': ' + e.message); // Error: Costume message
+}</pre>
+
+<p dir="rtl">اذا كنت ترغب في انشاء اخطاء خاصة بك، يمكتك استخدام المنشئ <code>Error</code> من أجل الاستفادة من خصائصه. على سبيل المثال:</p>
+
+<pre class="brush: js">function doSomethingErrorProne() {
+ if (ourCodeMakesAMistake()) {
+ throw (new Error('The message'));
+ } else {
+ doSomethingToGetAJavascriptError();
+ }
+}
+....
+try {
+ doSomethingErrorProne();
+} catch (e) {
+ console.log(e.name); // logs 'Error'
+ console.log(e.message); // logs 'The message' or a JavaScript error message)
+}</pre>
+
+<h2 dir="rtl" id="Promises">Promises</h2>
+
+<p dir="rtl">ابتداءا من ECMAScript2015. اصبح لجافاسكريبت الكائن <code>Promise</code> والذي يسمح لك بالتحكم في التدفق والعمليات المتزامنة.</p>
+
+<p dir="rtl">Promise هو احد هذه الحالات:</p>
+
+<ul dir="rtl">
+ <li><em>pending</em>  (قيد الانتظار): الحالة الأولية، لم تَفِ أو تم رفضها.</li>
+ <li><em>fulfilled</em>  (وفَّى): عملية ناجحة</li>
+ <li><em>rejected</em>  (رُفِض): فشل العملية.</li>
+ <li><em>settled</em>  (التسوية): إما وفى بوعد أو رفضه، ولكن ليس قيد الانتظار.</li>
+</ul>
+
+<p><img alt="" src="https://mdn.mozillademos.org/files/8633/promises.png" style="height: 297px; width: 801px;"></p>
+
+<h3 dir="rtl" id="تحميل_صورة_ب_XHR">تحميل صورة ب XHR</h3>
+
+<p dir="rtl">مثال بسيط باستخدام <code>Promise</code> و <code><a href="/en-US/docs/Web/API/XMLHttpRequest">XMLHttpRequest</a></code> في مستودع الاكواد MDN GitHub. راجع المثال <a href="https://github.com/mdn/js-examples/tree/master/promises-test"> js-examples</a>. يمكنك ايضا مراجعة <a href="https://mdn.github.io/js-examples/promises-test/">see it in action</a>. تم التعليق على كل خطوة لتمكينك من متابعة سير عملية Promise و XHR. هذا الإصدار من دون تعليقات، يعرض تدفق ال Promise:</p>
+
+<pre class="brush: js">function imgLoad(url) {
+ return new Promise(function(resolve, reject) {
+ var request = new XMLHttpRequest();
+ request.open('GET', url);
+ request.responseType = 'blob';
+ request.onload = function() {
+ if (request.status === 200) {
+ resolve(request.response);
+ } else {
+ reject(Error('Image didn\'t load successfully; error code:'
+ + request.statusText));
+ }
+ };
+ request.onerror = function() {
+ reject(Error('There was a network error.'));
+ };
+ request.send();
+ });
+}</pre>
+
+<p dir="rtl">للحصول على معلومات أكثر تفصيلاً، راجع {{jsxref("Promise")}} في صفحة المرجع.</p>
+
+<div>
+<div>{{PreviousNext("Web/JavaScript/Guide/Grammar_and_types", "Web/JavaScript/Guide/Loops_and_iteration")}}</div>
+</div>
+</div>
diff --git a/files/ar/web/javascript/guide/grammar_and_types/index.html b/files/ar/web/javascript/guide/grammar_and_types/index.html
new file mode 100644
index 0000000000..be90ff189a
--- /dev/null
+++ b/files/ar/web/javascript/guide/grammar_and_types/index.html
@@ -0,0 +1,680 @@
+---
+title: قواعد اللغة وأنواع البيانات
+slug: Web/JavaScript/Guide/Grammar_and_types
+translation_of: Web/JavaScript/Guide/Grammar_and_types
+---
+<div>{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Introduction", "Web/JavaScript/Guide/Control_flow_and_error_handling")}}</div>
+
+<p class="summary" dir="rtl">يناقش هذا الفصل. القواعد الأساسية لجافا سكريبت، والإعلان عن المتغيرات، وأنواع البيانات الحرفية.</p>
+
+<h2 dir="rtl" id="الأساسيات"><strong>الأساسيات </strong></h2>
+
+<div style="font-size: 15; font-family: 'tahoma';">
+<p dir="rtl">معظم التعبيرات الخاصة بجافا سكريبت مشتقة من <code>Java</code>، ولكنها تاثرت أيضا ب <code>Awk</code>، بيرل وبايثون.</p>
+
+<p dir="rtl">الجافاسكريبت حساسة لحالة الاحرف <code>myName</code> ليس نفسه <code>myname</code>، الجافاسكريبت تستخدم مجموعة من رموز ال <code>Unicode</code>.</p>
+
+<p dir="rtl">في الجافاسكريبت، التعليمات البرمجية تسمى {{Glossary("Statement", "statements")}}  وتكون مفصولة بفاصلة منقوطة<code> (؛)</code>.  الفراغات، وعلامات التبويب <code>(tabs)</code> والأسطر الجديدة تسمى مساحة خالية.  يتم تحليل نص شيفرة المصدر لجافا سكريبت من اليسار إلى اليمين ويتم تحويلها إلى سلسلة من العناصر والمدخلات، وهي الرموز المميزة <code>(tokens)</code>، رموز التحكم <code>(control characters)</code>، ونهايات الاسطر <code>(line terminators)</code>، والتعليقات والمسافات الخالية، ECMAScript تحدد ايضا الكلمات المحجوزة مثل<code> (<strong>if</strong> او <strong>var</strong> او <strong>return</strong> الخ)</code>  والبيانات الحرفية، كما لها قواعد للإدراج التلقائي للفاصلة المنقوطة (<a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#Automatic_semicolon_insertion">ASI</a>) لانهاء التعليمة البرمجية. ومع ذالك، من المستحسن دائماً إضافة الفاصلة المنقوطة (;) نهاية التعليمة البرمجية الخاصة بك لتجنب الاثار الجانبية، للحصول على مزيد من المعلومات، راجع <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar">قاموس جافا سكريبت</a>.</p>
+
+<h2 dir="rtl" id="التعليقات"><span class="short_text" id="result_box" lang="ar"><span class="hps">التعليقات</span></span></h2>
+
+<p dir="rtl"><span id="result_box" lang="ar"><span class="hps">صيغة التعليقات</span> <span class="hps">هي نفسها</span> <span class="hps">كما هو الحال في </span><strong><code><span class="hps">++</span></code></strong></span><span lang="ar"><strong><code><span class="hps">C</span></code></strong> <span class="hps">و</span> <span class="hps">في</span> <span class="hps">العديد من اللغات الأخرى</span><span>:</span></span></p>
+
+<pre class="brush: js">// a one line comment
+
+/* this is a longer,
+ multi-line comment
+ */
+
+/* You can't, however, /* nest comments */ SyntaxError */</pre>
+
+<h2 dir="rtl" id="الاعلانات">الاعلانات</h2>
+
+<p dir="rtl">هناك ثلاثة أنواع من الإعلانات في جافا سكريبت.</p>
+
+<dl>
+ <dt dir="rtl">{{jsxref("Statements/var", "var")}}</dt>
+ <dd dir="rtl">الاعلان عن متغير (اي، الكلمة المحجوزة <code>var</code> متبوعة باسم المتغير <code>var <strong>x</strong></code>)، تهيئته (اي، اسناد قيمة اولية له <code>var x <strong>= value</strong> </code>) / اختياري.</dd>
+ <dt dir="rtl">{{jsxref("Statements/let", "let")}}</dt>
+ <dd dir="rtl">الاعلان عن متغير محلي ضمن نطاق الكتلة <code>(ال <strong>block</strong></code> هو مجموعة من التعليمات البرمجية بين اقواس متعرجة<code> {})</code>، تهيئته / اختياري.</dd>
+ <dt dir="rtl">{{jsxref("Statements/const", "const")}}</dt>
+ <dd dir="rtl">الاعلان عن ثابت قابل للقراءة فقط.</dd>
+</dl>
+
+<h3 dir="rtl" id="المتغيرات"><span class="short_text" id="result_box" lang="ar"><span class="hps">المتغيرات</span></span></h3>
+
+<p dir="rtl"><span id="result_box" lang="ar"><span>يمكنك استخدام المتغيرات كأسماء رمزية للقيم في التطبيق الخاص بك</span></span><span lang="ar"><span>.</span> <span class="hps">أسماء</span> <span class="hps">المتغيرات</span><span>، تسمى </span></span>{{Glossary("Identifier", "identifiers")}}, وتخضع <span id="result_box" lang="ar"><span class="hps">لقواعد معينة</span><span>.</span></span></p>
+
+<p dir="rtl">المتغير في جافاسكريبت، يجب أن يبدأ بحرف، أو رمز <strong><code>(_)</code></strong>، أو علامة الدولار <strong><code>($)</code></strong>. يمكن أيضا أن تكون الأحرف اللاحقة أرقاما <code><strong>(0-9)</strong>.</code> ولأن الجافاسكريبت حساسة لحالة الأحرف، فإن الحروف تشمل الأحرف من <code>"<strong>A</strong>"</code> الى <code>"<strong>Z</strong>"</code> (أحرف كبيرة) او أحرف من  <code>"<strong>a</strong>"</code> الى <code>"<strong>z</strong>"</code> (أحرف صغيرة).</p>
+
+<p dir="rtl">يمكنك استخدام معظم أحرف ال <code>ISO 8859-1</code> أو <code>Unicode</code> مثل <code>å</code> و <code>ü</code> في المتغيرات. لمزيد من المعلومات راجع <a href="https://mathiasbynens.be/notes/javascript-identifiers-es6">مذه المدونة</a> كما يمكنك أيضا استخدام  <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#String_literals">Unicode escape sequences</a> كرموز مع المتغيرات.</p>
+
+<p dir="rtl">بعض الامثلة عن اسماء المتغيرات الجائزة : <code> <strong>Number_hits, temp99, $credit, and_name</strong></code>. <span lang="ar"><span class="hps"> </span></span></p>
+
+<h3 dir="rtl" id="الاعلان_عن_المتغيرات"><span class="short_text" id="result_box" lang="ar"><span class="hps">الاعلان عن المتغيرات</span></span></h3>
+
+<p dir="rtl"><span class="short_text" id="result_box" lang="ar"><span class="hps">يمكنك</span> <span class="hps">تعريف متغير</span> ب<span class="hps">ثلاث طرق</span><span>:</span></span></p>
+
+<ul dir="rtl">
+ <li>بواسطة الكلمة المحجوزة {{jsxref("Statements/var", "var")}}. على سبيل المثال،  <strong><code>var x = 42</code></strong>. يمكن استخدام هذه الصيغة للاعلان عن متغير عام ومتغير محلي على حد سواء.</li>
+ <li>من دون الكلمة المجوزة <code>var</code>. على سبيل المثال <strong><code>x = 42</code></strong>. سيصبح متغيرا عاما. لاكن تذكر على انه سيولد تحذيرا اذا استخدمته مع الوضع الصارم لجافاسكريبت <strong><code>"use strict"</code></strong>.</li>
+ <li>بواسطة الكلمة المحجوزة {{jsxref("Statements/let", "let")}}. على سبيل المثال<strong><code> let y = 13</code></strong>. يمكن استخدام هذه الصيغة للاعلان عن متغير محلي داخل نطاق الكتلة. راجع <a href="#Variable_scope">Variable scope</a>  ادناه.</li>
+</ul>
+
+<h3 dir="rtl" id="اختبار_المتغيرات">اختبار المتغيرات</h3>
+
+<p dir="rtl">الاعلان عن متغير باستخدام <code><strong>var</strong></code> او <strong><code>let</code></strong> من دون تهيئته، سيتم تهيئته بالقيمة {{jsxref("undefined")}} (بشكل تلقائي من قبل الجافاسكريبت).</p>
+
+<div class="note">
+<p dir="rtl"><strong>ملاحظة</strong>: جافا سكريبت في الوضع الصارم ("use strict") لا تسمح باستخدام المتغيرات إذا لم يتم الإعلان عنها</p>
+</div>
+
+<p dir="rtl">محاولة الوصول إلى متغير غير معلن عنه سيؤدي الى ال {{jsxref("ReferenceError")}}. وايضا محاولة الوصول الى متغير لم يتم تهيئته بعد سيعود ب <code>undefined</code> :</p>
+
+<pre class="brush: js">var a;
+console.log("The value of a is " + a); // logs "The value of a is undefined"
+console.log("The value of b is " + b); // throws ReferenceError exception
+</pre>
+
+<p dir="rtl">يمكنك استخدام <code>undefined</code> لاختبار ما إذا كان المتغير مهيأ ام لا. في التعليمة البرمجية التالية، المتغير input غير مهيأ، ستقوم التعليمة <code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/if...else" title="en-US/docs/JavaScript/Reference/Statements/if...else">if</a></code> باختبار ما اذا كان فعلا المتغير <code>input</code> غير مهيأ، بمعنى اخر (هل صحيح/<code>true</code> ان المتغير <code>input</code> غير مهيأ).</p>
+
+<pre class="brush: js">var input;
+if(input === undefined){
+ doThis();
+} else {
+ doThat();
+}
+</pre>
+
+<p dir="rtl">القيمة <code>undefined</code> تتصرف ك <code>false</code> عندما تستخدم في السياق المنطقي. على سبيل المثال، التعليمة البرمجية التالية ستقوم بتنفيذ الدالة <code>myFunction</code> بسبب ان العنصر الاول في المصفوفة <code>myArray</code> غير مهيأ:</p>
+
+<pre class="brush: js">var myArray = [];
+if (!myArray[0]) myFunction();</pre>
+
+<div class="note">
+<p dir="rtl"><strong>تذكير: </strong> تذكر ان "المتغير الغير مهيأ يتم تهيئته بشكل تلقائي بالقيمة undefined" كما ذكرنا اعلاه.</p>
+</div>
+
+<p dir="rtl">القيمة <code>undefined</code> تتحول الى <code>NaN</code> (ليسا رقما) عندما تستخدم في السياق الرقمي.</p>
+
+<pre class="brush: js">var a;
+a + 2 = NaN</pre>
+
+<p dir="rtl">عند اختبار متغير يحمل القيمة {{jsxref("null")}} ستتصرف القيمة <code>null </code>ك 0 في السياق الرقمي وك <code>false </code>في السياق المنطقي على سبيل المثال:</p>
+
+<pre class="brush: js">var n = null;
+console.log(n * 32); // Will log 0 to the console
+</pre>
+
+<h3 dir="rtl" id="نطاق_المتغيرات_-_Variable_scope">نطاق المتغيرات - Variable scope</h3>
+
+<p dir="rtl">عندما سنقوم بتعريف متغير خارج أي دالة/وظيفة سيسمى متغير عام، لأنه سيصبح متاحا لأية تعليمات برمجية أخرى في المستند الحالي. وعندما سنقوم بتعريف متغير داخل دالة/وظيفة، سيسمى متغير محلي، لأنه سيصبح متاحا فقط داخل هذه الدالة.</p>
+
+<p dir="rtl">في جافاسكريبت قبل ECMAScript 2015، لم يكن للتعليمة البرمجية <a href="/en-US/docs/Web/JavaScript/Guide/Control_flow_and_error_handling#Block_statement" title="en-US/docs/Web/JavaScript/Guide/Control_flow_and_error_handling#Block_statement">block statement</a> نطاق (<strong><code>scope</code></strong>) خاص بها، المتغير الذي يتم تعريفه داخل <code>block</code> هو اما متغير محلى للدالة او متغير محلي للنطاق العام حسب تواجد هذا البلوك.</p>
+
+<p dir="rtl">يبين المثال التالى كيف ان ال <code>block</code> ليس له نطاق خاص به، مخرجات التعليمة البرمجية التالية ستكون 5، بسبب ان المتغير <strong>x</strong> تم تعريفه في النطاق العام وليس في نطاق ال <code>block</code>، وفي هذه الحالة ال <code>block</code> هي التعليمة <strong><code>if</code></strong>.</p>
+
+<pre class="brush: js">if (true) {
+ var x = 5;
+}
+console.log(x); // 5
+</pre>
+
+<p dir="rtl">يتغير هذا السلوك، عند الاعلان عن متغير باستخدام <strong><code>let</code></strong> المعتمدة في ECMAScript 6، الان اصبح لل <code>block</code> نطاقا خاصا به: </p>
+
+<pre class="brush: js">if (true) {
+ let y = 5;
+}
+console.log(y); // ReferenceError: y is not defined
+</pre>
+
+<h3 dir="rtl" id="رفع_المتغيرات_-_Variable_hoisting">رفع المتغيرات - Variable hoisting</h3>
+
+<p dir="rtl">الرفع هو السلوك الافتراضي لجافا سكريبت، تقوم جافاسكريبت برفع جميع المتغيرات او الدوال او اي شئ تم الاعلان عنه، إلى أعلى النطاق الحالي (في الجزء العلوي من التعليمة البرمجية الحالية أو الوظيفة الحالية بشكل اوتوماتيكي). في جافاسكريبت، يمكن الاعلان عن متغير بعد استخدامه. او بعبارة اخرى يمكن استخدام المتغير قبل الاعلان عنه.</p>
+
+<p dir="rtl">لو تاملت قليلا في التعليمة البرمجة التالية، ستتسائل ما الذي جعل المتغير <strong><code>x</code></strong> يعود ب <code>undefined</code> وليس ب <code>ReferenceError</code>. السبب هو ان الجافاسكريبت ترفع الاعلان <strong><code>(var x)</code></strong> فقط، ولا ترفع التهيئة <strong><code>(3=)</code></strong>. وبالتالي وبسبب الرفع الذي حدث "في الخفاء"، <strong><code>x</code></strong> اعلن عنه قبل استخدامه، لكن بسبب ان التهيئة لم ترفع، فقيمة <strong><code>x</code></strong> ستعود ب <code>undefined</code>. ونفس الشئ حصل مع المتغير <code>myvar</code>، بحيث تم رفعه الى اعلى نطاق الدالة. فيما تم رفع المتغير <strong><code>x</code></strong> الى اعلى النطاق العام.</p>
+
+<pre class="brush: js">/*---Example 1---*/
+
+console.log(x === undefined); // logs "true"
+var x = 3;
+
+
+/*---Example 2---*/
+
+// will return a value of undefined
+var myvar = "my value";
+
+(function() {
+ console.log(myvar); // undefined
+ var myvar = "local value";
+})();
+</pre>
+
+<p dir="rtl">الامثلة اعلاه، ستفسر بالشكل التالي:</p>
+
+<pre class="brush: js">/*---Example 1---*/
+
+var x;
+console.log(x === undefined); // logs "true"
+x = 3;
+
+
+/*---Example 2---*/
+
+var myvar = "my value";
+
+(function() {
+ var myvar;
+ console.log(myvar); // undefined
+ myvar = "local value";
+})();
+</pre>
+
+<p dir="rtl">لتجنب الكثير من الاخطاء، حاول دائما الاعلان عن المتغيرات اعلى اي نطاق. بما ان هذا هو السلوك الذي تعتمده جافاسكريبت لتفسير التعليمة البرمجية خاصتك (بخصوص هذه الجزئية)، فالسلوك المتوقع منك ايضا كمبرمج متمرس هو مجاراة الجافاسكريبت. وايضا هذا يجعل من التعليمات البرمجية خاصتك اكثر وضوحا واكثر قابلية للقراءة.</p>
+
+<p dir="rtl">في ECMAScript 2015، المتغير <strong><code>let</code></strong> سوف لن يتم رفعه الى اعلى نطاق ال <code>block</code>. واستخدام متغير داخل <code>block</code> قبل الاعلان عنه سينتج عنه <code>ReferenceError</code>. لان المتغير يعتبر في "منطقة زمنية ميتة" من بداية ال <code>block</code> حتى يتم معالجته بالإعلان.</p>
+
+<pre class="brush: js">console.log(x); // ReferenceError
+let x = 3;</pre>
+
+<h3 dir="rtl" id="رفع_الدوال_-_Function_hoisting">رفع  الدوال - Function hoisting</h3>
+
+<p dir="rtl">بالنسبة للدوال، فقط ال <strong><code>function declaration</code></strong> هي التي سترفع الى الاعلى وليست ال <strong><code>function expression</code></strong>.</p>
+
+<pre class="brush: js">/* Function declaration */
+
+foo(); // "bar"
+
+function foo() {
+ console.log('bar');
+}
+
+
+/* Function expression */
+
+baz(); // TypeError: baz is not a function
+
+var baz = function() {
+ console.log('bar2');
+};
+</pre>
+
+<h3 dir="rtl" id="المتغيرات_العامة">المتغيرات العامة</h3>
+
+<p dir="rtl">المتغيرات العامة، في حقيقة الامر هي خصائص للكائن العام. في صفحات الويب الكائن العام هو <code>window</code>. لذا يمكنك انشاء او الوصول إلى المتغيرات العامة باستخدام الصيغة <code>window.<em>variable</em></code>.</p>
+
+<p dir="rtl">كما يمكنك ايضا الوصول إلى المتغيرات العامة المعلن عنها في نافذة أو frame من نافذة اخرى او frame عن طريق تحديد النافذة او اسم ال frame. على سبيل المثال، اذا كان لدينا متغير معلن عنه في الوثيقة، واسمه<code> phoneNumber</code>,  يمكنك الوصول الى هذا المتغير من ال iframe باستخدام الصيغة <code>parent.phoneNumber</code></p>
+
+<h3 dir="rtl" id="الثوابت_-_Constants">الثوابت - Constants</h3>
+
+<p dir="rtl">يمكنك إنشاء ثابت للقراءة فقط، والمسمى بالكلمة المحجوزة {{jsxref("Statements/const", "const")}} طريقة التعبير عن الثابت هي نفسها طريقة التعبير عن المتغير: يجب ان يبدا بحرف او underscore او ($)dollar sign  ويمكن يحتوي على alphabetic، ارقام، او underscore او رموز. </p>
+
+<pre class="brush: js">const prefix = '212';
+</pre>
+
+<p dir="rtl">الثابت، لا يمكن تغيير قيمته من خلال الاحالة او باعادة الاعلان عنه اثناء تشغيل السكريبت. ولا بد من تهيئته.</p>
+
+<p dir="rtl">قواعد نطاق الثابت هي نفسها قواعد المتغير <strong><code>let</code></strong> فيما يخص نطاق ال <code>block</code>. اذا لم يتم تعيين الكلمة المحجوزة <strong><code>const</code></strong> سيتم معاملته معاملة المتغير.</p>
+
+<p dir="rtl">اسم الثابت لا يجب ان يكون هو نفسه اسم دالة او متغير في نفس النطاق. على سبيل المثال:</p>
+
+<pre class="example-bad brush: js">// THIS WILL CAUSE AN ERROR
+function f() {};
+const f = 5;
+
+// THIS WILL CAUSE AN ERROR ALSO
+function f() {
+ const g = 5;
+ var g;
+
+ //statements
+}
+</pre>
+
+<p dir="rtl">ومع ذلك، خصائص الكائنات التي يتم تعيينها إلى الثوابت غير محمية، حيث سيتم تنفيذ التعليمة التالية دون مشاكل.</p>
+
+<pre class="brush: js">const MY_OBJECT = {'key': 'value'};
+MY_OBJECT.key = 'otherValue';</pre>
+
+<h2 dir="rtl" id="هياكل_البيانات_والأنواع_-_Data_structures_and_types">هياكل البيانات والأنواع - Data structures and types</h2>
+
+<h3 dir="rtl" id="أنواع_البيانات">أنواع البيانات</h3>
+
+<p dir="rtl">المعيار الاحدث ل ECMAScript يحدد سبعة من انواع البيانات:</p>
+
+<ul dir="rtl">
+ <li>ستة منها اولية {{Glossary("Primitive", "primitives")}}:
+ <ul>
+ <li>{{Glossary("Boolean")}}. <code>true</code> و <code>false</code>.</li>
+ <li>النوع {{Glossary("null")}}. من الكلمات المحجوزة، تعني قيمة خالية. ولان جافاسكريبت حساسة لحالة الاحرف case-sensitive، يجب كتابتها كما هي لان null ليست هي  Null او NULL او اي تركيبة اخرى.</li>
+ <li>النوع {{Glossary("undefined")}}. يعبر عن القيم الغير معرفة، له قيمة واحدة فقط، وتسمى undefined.</li>
+ <li>النوع {{Glossary("Number")}}. رقمي مثل <code>42</code> او <code>3.14159</code>.</li>
+ <li>النوع {{Glossary("String")}}. سلسلة نصية مثل "Howdy"</li>
+ <li>النوع {{Glossary("Symbol")}} (new in ECMAScript 6). نوع البيانات الفريدة من نوعها والغير قابلة  للتغيير.</li>
+ </ul>
+ </li>
+ <li>والنوع {{Glossary("Object")}}</li>
+</ul>
+
+<p dir="rtl">على الرغم من أن هذه الكمية من أنواع البيانات صغيرة نسبيا، الا أنها تتيح لك القيام بمهام مفيدة مع التطبيقات الخاصة بك. الكائنات {{jsxref("Object", "Objects")}} والدوال {{jsxref("Function", "functions")}} هي العناصر الأساسية الأخرى في اللغة، يمكنك اعتبار الكائنات كحاويات لمجموعة من المتغرات المرتبطة بالكائن، والدوال هي الوظائف التي سيقوم التطبيق الخاص بك بتنفيذها.</p>
+
+<h3 dir="rtl" id="تحويل_نوع_البيانات_-_Data_type_conversion">تحويل نوع البيانات - Data type conversion</h3>
+
+<p dir="rtl">الجافاسكريبت لغة حيوية، وهذا يعني انك لست بحاجة لتحديد نوع البيانات للمتغير اثناء تعريفه، على غرار لغات برمجة اخرى (جافا مثلا)، لانه سيتم تحويل أنواع البيانات تلقائياً حسب الحاجة أثناء تنفيذ السكريبت. على سبيل المثال، يمكنك تعريف متغير كالتالي:</p>
+
+<pre class="brush: js">var answer = 42;
+</pre>
+
+<p dir="rtl">وفي وقت لاحق، يمكنك تغيير نوع البيانات، من النوع <strong><code>Number</code></strong> الى النوع <strong><code>String</code></strong>، عن طريق تعيين سلسلة حرفية لنفس المتغير، على سبيل المثال:</p>
+
+<pre class="brush: js">answer = "Thanks for all the fish...";
+</pre>
+
+<p dir="rtl">بفضل حيوية الجافا سكريبت، فهذه التعليمة البرمجية لن تتسبب في اية رسالة خطأ.</p>
+
+<p dir="rtl">اثناء الجمع بين القيم الرقمية والسلاسل الحرفية باستخدام عامل التشغيل <strong><code>(+)</code></strong>، فجافاسكريب تحول القيم الرقمية الى سلاسل حرفية. على سبيل المثال، انظر في التعليمات البرمجية التالية:</p>
+
+<pre class="brush: js">x = "The answer is " + 42 // "The answer is 42"
+y = 42 + " is the answer" // "42 is the answer"
+</pre>
+
+<p dir="rtl">في التعبيرات التي تحتوي على عوامل أخرى، جافا سكريبت لا تقوم بتحويل القيم الرقمية إلى سلاسل حرفية. على سبيل المثال:</p>
+
+<pre class="brush: js">"37" - 7 // 30
+"37" + 7 // "377"
+</pre>
+
+<h3 dir="rtl" id="تحويل_القيم_النصية_إلى_أرقام">تحويل القيم النصية إلى أرقام</h3>
+
+<p dir="rtl">في حالة أن لدينا قيمة تمثل عدد في الذاكرة وهي على شكل سلسلة حرفية <code>("10")</code>، ونريد تحويلها الى قيمة رقمية، سنحتاج الى وظائف جاهزة في الجافاسكريبت تقوم بعملية التحويل.</p>
+
+<ul>
+ <li id="parseInt()_and_parseFloat()">{{jsxref("parseInt", "()parseInt")}}</li>
+ <li>{{jsxref("parseFloat", "()parseFloat")}}</li>
+</ul>
+
+<p dir="rtl">المثال التالي يبين كيفية استخدام الوظيفة <code>parseInt</code> ببارامتر واحد، لمزيد من المعلومات حول البرامتر الثاني واشياء اخرى، راجع {{jsxref("parseInt", "()parseInt")}}:</p>
+
+<pre class="brush: js">var str = "10";
+console.log( typeof str ) // string
+var parse = parseInt(str)
+console.log( typeof parse ) // number.</pre>
+
+<p dir="rtl">المثال التالي يبين كيفية استخدام الوظيفة <code>parseFloat</code>، لمزيد من المعلومات، راجع {{jsxref("parseFloat", "()parseFloat")}}</p>
+
+<pre class="brush: js">var str = "3.14";
+console.log( typeof str ) // string
+var parse = parseInt(str)
+console.log( typeof parse ) // number.</pre>
+
+<p dir="rtl">طريقة بديلة لتحويل قيمة رقمية على شكل سلسلة حرفية، باستخدام العامل (unary plus)+</p>
+
+<pre class="brush: js">"1.1" + "1.1" = "1.11.1"
+(+"1.1") + (+"1.1") = 2.2
+// Note: the parentheses are added for clarity, not required.</pre>
+
+<h2 dir="rtl" id="البيانات_الحرفية_-_Literals">البيانات الحرفية - Literals</h2>
+
+<p dir="rtl">المقصود بالبيانات الحرفية، هو استخددام الكائن بالصيغة الاسهل، مثلا، بدلا من استخدام الكائن <code>new Array(elm1,elm2...)</code> نستخدم <code>[...elm1,elm2]</code> وهكذا مع جميع الكائنات الاخرى.</p>
+
+<p dir="rtl">يمكنك استخدام البيانات الحرفية لتمثيل القيم في جافا سكريبت. وهي قيم ثابتة، ليست متغيرات، والتي ترد حرفيا في السكريبت. يصف هذا القسم الأنواع التالية من البيانات الحرفية :</p>
+
+<ul>
+ <li>{{anch("Array literals")}}</li>
+ <li>{{anch("Boolean literals")}}</li>
+ <li>{{anch("Floating-point literals")}}</li>
+ <li>{{anch("Integers")}}</li>
+ <li>{{anch("Object literals")}}</li>
+ <li>{{anch("String literals")}}</li>
+</ul>
+
+<h3 dir="rtl" id="بيانات_المصفوفة_الحرفية_-_Array_literals">بيانات المصفوفة الحرفية - Array literals</h3>
+
+<p dir="rtl">بيانات المصفوفة الحرفية، هي قائمة تتكون من صفر او اكثر من التعبيرات، كل تعبير فيها يمثل عنصر المصفوفة، محاطة بأقواس مربعة <code>([])</code>. عندما تقوم بإنشاء مصفوفة باستخدام البيانات الحرفية ، ستقوم بتهيئتها بقيم محددة لتكوين عناصرها، طول المصفوفة هو عدد البارامترات/العناصر المحددة لها.</p>
+
+<p dir="rtl">ينشئ المثال التالي مصفوفة القهوة مع ثلاثة عناصر وطولها ثلاثة:</p>
+
+<pre class="brush: js">var coffees = ["French Roast", "Colombian", "Kona"];
+</pre>
+
+<div class="note">
+<p dir="rtl"><strong>ملاحظة</strong>: بيانات المصفوفة الحرفية هي نوع من مهيئ الكائن.  <a href="/en-US/docs/Web/JavaScript/Guide/Working_with_Objects#Using_object_initializers" title="en-US/docs/JavaScript/Guide/Working with Objects#Using Object Initializers">Using Object Initializers</a>.</p>
+</div>
+
+<p dir="rtl">إذا تم إنشاء مصفوفة باستخدام البيانات الحرفية في سكريبت على أعلى مستوى (top-level script)، فجافاسكريبت ستفسر هذه المصفوفة في كل مرة يتم اختبار التعبير الذي يحتوي على المصفوفة. بالإضافة الى ذالك، البيانات الحرفية المستخدمة في دالة يتم إنشاءها كل مرة يتم فيها استدعاء الدالة. </p>
+
+<p dir="rtl"> البيانات الحرفية هي كذالك <code>Array objects</code> راجع {{jsxref("Array")}} و <a href="/en-US/docs/Web/JavaScript/Guide/Indexed_collections">Indexed collections</a> لمعرفة تفاصيل ال <code>Array</code> objects.</p>
+
+<h3 dir="rtl" id="فواصل_إضافية_في_ال_array_literals">فواصل إضافية في ال array literals</h3>
+
+<p dir="rtl">لست بحاجة لتحديد جميع العناصر في بيانات المصفوفة الحرفية. اذا قمت بوضع فاصلتات متتاليتان سيم انشاء المصفوفة مع <code>undefined</code> مكان العنصر الغير محدد.</p>
+
+<pre class="brush: js">var fish = ["Lion", , "Angel"];
+</pre>
+
+<p dir="rtl">تحتوي هذه المصفوفة على عنصرين بقيم، وعنصر واحد فارغ <code>(fish[0]</code> هو <code>"Lion"</code>، و <code>fish[1]</code> هو <code>undefined</code>، و <code>fish[2]</code> هو <code>"Angel")</code>.</p>
+
+<p dir="rtl">إذا قمت بتضمين فاصلة زائدة في نهاية قائمة العناصر، سيتم تجاهل تلك الفاصلة. في المثال التالي، طول المصفوفة هو ثلاثة. وليس هناك<code> myList[3]</code>. جميع الفواصل الأخرى في القائمة تشير الى عنصر جديد.</p>
+
+<pre class="brush: js">var myList = ['home', , 'school', ];
+</pre>
+
+<p dir="rtl">في المثال التالي، طول المصفوفة هو أربعة، و<code> myList[0]</code> و <code>myList[2]</code> في عداد المفقودين.</p>
+
+<pre class="brush: js">var myList = [ , 'home', , 'school'];
+</pre>
+
+<p dir="rtl">في المثال التالي، طول المصفوفة أربعة، <code>myList[1]</code> و <code>myList[3]</code> في عداد المفقودين. وسيتم تجاهل الفاصلة الأخيرة فقط.</p>
+
+<pre class="brush: js">var myList = ['home', , 'school', , ];
+</pre>
+
+<p dir="rtl">فهم سلوك الفواصل الاضافية مهم لفهم جافا سكريبت كلغة، ولكن عند كتابة التعليمات البرمجية الخاصة بك: من الافضل الإعلان الصريح عن العناصر المفقودة ب <code>undefined</code>، مثل هذه الممارسات ستزيد من وضوح التعليمات البرمجية الخاصة بك ويصبح من السهل صيانتها.</p>
+
+<div class="note">
+<p dir="rtl"><strong>ملاحظة</strong>: يمكن للفواصل الزائدة ان تخلق أخطاءا في الاصدارات القديمة من المتصفحات. من الافضل إزالتها.</p>
+</div>
+
+<h3 dir="rtl" id="Boolean_literals">Boolean literals</h3>
+
+<p dir="rtl">النوع Boolean يتكون من بيانين حرفيين وهما :  <code>true</code> و <code>false</code>.</p>
+
+<p dir="rtl">لا ينبغي الخلط بين القيم المنطقية الاولية <code>true</code> و <code>false</code> مع القيم true و false لل Boolean object. الكائن Boolean هو من يحتضن انوع البيانات المنطقية الاولية. راجع {{jsxref("Boolean")}} لمزيد من المعلومات.</p>
+
+<h3 dir="rtl" id="الأعداد_الصحيحة_-_Integers">الأعداد الصحيحة - Integers</h3>
+
+<p dir="rtl">يمكن التعبير عن الأعداد الصحيحة بالنسبة لكل من العدد الصحيح العشري ب (base 10)، ونظام العد السداسي عشر ب (base 16) والرقم الثماني ب (base 8) والثنائي ب (base 2)<span style="display: none;"> </span><span style="display: none;"> </span>.</p>
+
+<ul dir="rtl">
+ <li>البيانات الحرفية التي تمثل الأرقام العشرية هي عبارة عن سلسلة من الأرقام التي لا تبدأ ب 0 (صفر)</li>
+ <li>البادئة 0 (صفر)  تشير إلى أن العدد الصحيح الحرفي في تدوين ثماني. هذه الاعداد الصحيحة يمكن أن تتكون من ارقام فقط من 0 (صفر) إلى 7 (سبعة).</li>
+ <li>البادئة 0x (أو 0X) تشير إلى نظام العد السداسي عشر. يمكن أن تتضمن أرقام نظام العد السداسي عشر والأحرف من A إلى F (حروف صغيرة وحروف كبيرة) وأرقام (0-9).</li>
+ <li>
+ <p>البادئة 0b  (أو 0B) تشير إلى منهج ثنائي. يمكن أن تتكون من الأرقام الثنائية 0 أو 1 فقط.</p>
+ </li>
+</ul>
+
+<p dir="rtl">بعض الأمثلة عن البيانات الحرفية لعدد صحيح :</p>
+
+<pre class="eval">0, 117 and -345 (decimal, base 10)
+015, 0001 and -077 (octal, base 8)
+0x1123, 0x00111 and -0xF1A7 (hexadecimal, "hex" or base 16)
+</pre>
+
+<p dir="rtl">لمزيد من المعلومات، راجع <a href="/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#Numeric_literals">Numeric literals in the Lexical grammar reference</a>.</p>
+
+<h3 dir="rtl" id="بيانات_العدد_الكسري_الحرفي">بيانات العدد الكسري الحرفي</h3>
+
+<p dir="rtl">البيانات الحرفية لعدد كسري  يمكن أن تتكون من الأجزاء التالية:</p>
+
+<ul dir="rtl">
+ <li>الاعداد الصحيحة العشرية التي يمكن توقيعها (مسبوقة ب "+" أو "-")،</li>
+ <li>النقطة العشرية <code>(".")</code>،</li>
+ <li> العدد الكسري (عدد عشري آخر)،</li>
+ <li>الأس.</li>
+</ul>
+
+<p dir="rtl">الأس هو "e" أو "E" متبوعاً بعدد صحيح، والذي يمكن توقيعه (يسبقه "+" أو "-"). يجب أن يكون قيمة حرفية floating-point ويجب ان يحتوي على رقم واحد على الأقل والنقطة العشرية أو "e"  (أو "E").</p>
+
+<pre class="eval">[(+|-)][digits][.digits][(E|e)[(+|-)]digits]
+</pre>
+
+<p dir="rtl">على سبيل المثال:</p>
+
+<pre class="eval">3.14
+2345.789
+.3333333333333333333
+-.283185307179586
+</pre>
+
+<h3 dir="rtl" id="بيانات_الكائن_الحرفي_-_Object_literals">بيانات الكائن الحرفي - Object literals</h3>
+
+<p dir="rtl">بيانات الكائن الحرفية هي عبارة عن قائمة تتكون من صفر او اكثر من الازواج، كل زوجين  عبارة عن اسم خاصية الكائن وقيمتها، محاطة بأقواس متعرجة <code>({})</code>. لا يجب استخدام البيانات الحرفية للكائن في بداية التعليمة البرمجية خاصتك. لان هذا سيؤدي إلى خطأ او سيقوم بسلوك عكس المتوقع منه، بسبب ان الجافاسكريبت ستفسر } على انه بداية ل <code>block</code>.</p>
+
+<p dir="rtl">في المثال التالي. العنصر الاول للكائن <strong><code>car</code></strong> يمثل الخاصية  <code>myCar</code>، تحمل القيمة النصية <code>"Saturn"</code>، العنصر الثاني هي الخاصية <code>getCar</code>، قيمتها هو ناتج الدالة <code>carTypes("Honda")</code>، العنصر الثالث، هي الخاصية <code>special</code>، قيمتها متغير خارجي وهو  <code>sales</code>.</p>
+
+<pre class="brush: js">var Sales = "Toyota";
+
+function CarTypes(name) {
+ if (name == "Honda") {
+ return name;
+ } else {
+ return "Sorry, we don't sell " + name + ".";
+ }
+}
+
+var car = { myCar: "Saturn", getCar: CarTypes("Honda"), special: Sales };
+
+console.log(car.myCar); // Saturn
+console.log(car.getCar); // Honda
+console.log(car.special); // Toyota
+</pre>
+
+<p dir="rtl">بالإضافة إلى ذلك، يمكنك استخدام قيمة رقمية أو سلسلة حرفية كاسم للخاصية، كما يمكنك ايضا انشاء كائن داخل كائن آخر. يبين المثال التالي كيفية انشاء هذه الخيارات.</p>
+
+<pre class="brush: js">var car = { manyCars: {a: "Saab", "b": "Jeep"}, 7: "Mazda" };
+
+console.log(car.manyCars.b); // Jeep
+console.log(car[7]); // Mazda
+</pre>
+
+<p dir="rtl">أسماء خصائص الكائن يمكن أن تكون أي سلسلة حرفية، بما في ذالك السلسلة الحرفية الفارغة, اذا كان اسم الخاصية عبارة عن احد المعرفات <a href="/en-US/docs/Web/JavaScript/Guide/Values,_variables,_and_literals#Variables">identifier</a>، الغير مسموح بها (ما لا يمكن استخدامه كاسم للمتغر مثلا) او ان يكون اسم الخاصية عبارة عن رقم، فيجب إحاطتها بعلامات الاقتباس. اسماء الخاصية الغير مسموح بها كمعرفات لا يمكن الوصول اليها بطريقة نقطة التدوين <code>(.)</code>، وانما تستخدم طريقة الاقواس المربعة<code> ("[]")</code> للوصول اليها او التعديل عليها.</p>
+
+<pre class="brush: js">var unusualPropertyNames = {
+ "": "An empty string",
+ "!": "Bang!"
+}
+console.log(unusualPropertyNames.""); // SyntaxError: Unexpected string
+console.log(unusualPropertyNames[""]); // An empty string
+console.log(unusualPropertyNames.!); // SyntaxError: Unexpected token !
+console.log(unusualPropertyNames["!"]); // Bang!</pre>
+
+<p dir="rtl">ابتداءا من ES2015، اصبح من الممكن : تعيين ال <code>prototype</code>  أثناء إنشاء الكائن. استخدام التعيين المختصر ك  <code>foo: foo</code>، تعيين الوظائف، استدعاء وظائف الكائن الاب بواسطة <code>super</code>، استخدام أسماء الخصائص المحوسبة مع التعبيرات.</p>
+
+<pre class="brush: js">var obj = {
+ // __proto__
+ __proto__: theProtoObj,
+ // Shorthand for ‘handler: handler’
+ handler,
+ // Methods
+ toString() {
+ // Super calls
+ return 'd ' + super.toString();
+ },
+ // Computed (dynamic) property names
+ [ 'prop_' + (() =&gt; 42)() ]: 42
+};</pre>
+
+<p dir="rtl">يبين المثال التالي الطرق الصحيحة لكيفية الوصول الى الكائن:</p>
+
+<pre class="brush: js">var foo = {a: "alpha", 2: "two"};
+console.log(foo.a); // alpha
+console.log(foo[2]); // two
+//console.log(foo.2); // Error: missing ) after argument list
+//console.log(foo[a]); // Error: a is not defined
+console.log(foo["a"]); // alpha
+console.log(foo["2"]); // two
+</pre>
+
+<h3 dir="rtl" id="بيانات_التعبير_القياسي_الحرفي_-_RegExp_literals">بيانات التعبير القياسي الحرفي - RegExp literals</h3>
+
+<p dir="rtl"><code>Regex</code> هو نمط <code>(pattern)</code> محصور بين خطوط مائلة. يبين المثال التالي كيفبة التعبير عن بيانات التعبيرات القياسية الحرفية.</p>
+
+<pre class="brush: js">var re = /ab+c/;</pre>
+
+<h3 dir="rtl" id="بيانات_السلاسل_النصية_الحرفية_-_String_literals">بيانات السلاسل النصية الحرفية - String literals</h3>
+
+<p dir="rtl">السلسلة النصية، هي عبارة عن صفر أو أكثر من الأحرف محاطة بعلامات اقتباس اما منفردة<code> (')</code> أو مزدوجة <code>(")</code>. يبين المثال التالي كيفية استخدام كل من الاقتباسات المنفردة والمزدوجة:</p>
+
+<pre class="brush: js">'foo'
+"bar"
+'1234'
+'one line \n another line'
+"John's cat"
+</pre>
+
+<p dir="rtl">من الممكن استدعاء وظائف الكائن <code>String</code> على السلاسل الحرفية. تقوم الجافاسكريبت بتحويل السلاسل الحرفية الى الكائن <code>String</code> بشكل مؤقت، بعدما تستدعى الوظائف، يتم استبعاد/تدمير الكائن <code>String</code> المؤقت، يمكنك ايضا استخدام  الخاصية <code>String.length</code> مع القيم النصية:</p>
+
+<pre class="brush: js">console.log("John's cat".length)
+// Will print the number of symbols in the string including whitespace.
+// In this case, 10.
+</pre>
+
+<p dir="rtl">ابتداءا من ES2015، يمكنك استخدام البيانات الحرفية كقوالب  (template literals)، هذه القوالب النصية هي نفسها المستخدمة في  Perl ،Python، الخ. يمكنك استخدامها لانشاء سلسلة حرفية <strong>واحدة</strong> على <strong>عدة</strong> اسطر دون الحاجة لاستخدام اسلوب التهريب (اضافة "\" في نهاية كل سطر). يمكن من خلالها ايضا إنشاء سلاسل حرفية جديدة اعتمادا على مجموعة متقطعة من السلاسل الحرفية المحددة سلفا وذالك من خلال هذه الصيغة الجديدة <strong><code>{ result }$</code></strong>، القيمة الممرة <code>result</code> هي القيمة التي ستظهر مع السلسلة الحرفية الجديدة،  وهي عبارة عن مخرجات لاي تعليمة برمجية اخرى مثل <strong><code>(function, literal object, var...)</code></strong>.  وايضا يمكنك من خلالها تجنب هجمات الحقن (injection attacks). </p>
+
+<pre class="brush: js">// Basic literal string creation
+`In JavaScript '\n' is a line-feed.`
+
+// Multiline strings
+`In JavaScript template strings can run
+ over multiple lines, but double and single
+ quoted strings cannot.`
+
+// String interpolation
+var name = 'Bob', time = 'today';
+`Hello ${name}, how are you ${time}?`
+
+// Construct an HTTP request prefix is used to interpret the replacements and construction
+POST`http://foo.org/bar?a=${a}&amp;b=${b}
+ Content-Type: application/json
+ X-Credentials: ${credentials}
+ { "foo": ${foo},
+ "bar": ${bar}}`(myOnReadyStateChangeHandler);</pre>
+
+<p dir="rtl">من الأفضل استخدام السلاسل الحرفية قدر الامكان، الا اذا كنت في حاجة ماسة لاستخدام الكائن <code>String</code>، وقتها يمكنك استخدامه ايضا. راجع الكائن {{jsxref("String")}} للاطلاع على كافة التفاصيل.</p>
+
+<h3 dir="rtl" id="استخدام_الرموز_الخاصة_مع_السلاسل_النصية">استخدام الرموز الخاصة مع السلاسل النصية</h3>
+
+<p dir="rtl">بالإضافة إلى الرموز العادية، يمكنك أيضا إدراج الرموز الخاصة مع السلاسل الحرفية، كما هو موضح في المثال التالي.</p>
+
+<pre class="brush: js">"one line \n another line"
+</pre>
+
+<p dir="rtl">يبين الجدول التالي، الرموز الخاصة التي يمكنك استخدامها مع السلاسل الحرفية لجافاسكريبت.</p>
+
+<table class="standard-table">
+ <caption>جدول الرموز الخاصة لجافاسكريبت</caption>
+ <thead>
+ <tr>
+ <th scope="col">Character</th>
+ <th scope="col">Meaning</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>0\</code></td>
+ <td>Null Byte  - بايت فارغ</td>
+ </tr>
+ <tr>
+ <td><code>b\</code></td>
+ <td>Backspace  - مسافة للخلف</td>
+ </tr>
+ <tr>
+ <td><code>f\</code></td>
+ <td>Form feed  -  نموذج تغذية</td>
+ </tr>
+ <tr>
+ <td><code>n\</code></td>
+ <td>New line  -  سطر جديد</td>
+ </tr>
+ <tr>
+ <td><code>r\</code></td>
+ <td>Carriage return  -  حرف الإرجاع</td>
+ </tr>
+ <tr>
+ <td><code>t\</code></td>
+ <td>Tab  -  علامة التبويب</td>
+ </tr>
+ <tr>
+ <td><code>v\</code></td>
+ <td>Vertical tab - علامة التبويب العمودي</td>
+ </tr>
+ <tr>
+ <td><code>'\</code></td>
+ <td>single quote  -  علامة اقتباس مفردة</td>
+ </tr>
+ <tr>
+ <td><code>"\</code></td>
+ <td>Double quote  -  علامة اقتباس مزدوجة</td>
+ </tr>
+ <tr>
+ <td><code>\\</code></td>
+ <td>Backslash character  -  حرف الخط المائل العكسي</td>
+ </tr>
+ <tr>
+ <td><code><em>XXX</em>\</code></td>
+ <td dir="rtl"><span style="display: none;"> </span><span style="display: none;"> </span>الحرف مع Latin-1 لتحديد ترميز من خلال الرجوع الى الوراء بثلاثة ارقام ثمانية <em>XXX</em> ما بين 0 و 377. على سبيل المثال, 251\ هو تسلسل ثماني لرمز حقوق النشر.<span style="display: none;"> </span><span style="display: none;"> </span></td>
+ </tr>
+ <tr>
+ </tr>
+ <tr>
+ <td><code>x<em>XX</em>\</code></td>
+ <td dir="rtl">الحرف مع Latin-1 لتحديد ترميز  من خلال ارقام نظام العد السداسي عشر  <em>XX</em> بين 00 و FF. على سبيل المثال , xA9\ هو تسلسل نظام العد السداسي عشر لرمز حقوق النشر.</td>
+ </tr>
+ <tr>
+ </tr>
+ <tr>
+ <td><code>u<em>XXXX</em>\</code></td>
+ <td dir="rtl">الحرف Unicode محدد من خلال اربعة ارقام من نظام العد السداسي عشر  <em>XXXX</em>. على سبيل المثال , u00A9\ هو تسلسل Unicode لرمز حقوق النشر. راجع {{anch("Unicode escape sequences")}}.</td>
+ </tr>
+ <tr>
+ <td><code>u<em>{XXXXX}</em>\</code></td>
+ <td dir="rtl">كود ال Unicode لتهريب النقطة، على سبيل المثال، u{2F804}\ هي تماما مثل  تهريب اليونيكود نفسه  uD87E\uDC04\</td>
+ </tr>
+ </tbody>
+</table>
+
+<h4 dir="rtl" id="تهريب_الرموز_-_Escaping_characters">تهريب الرموز - Escaping characters</h4>
+
+<p dir="rtl">الرموز الخاصة التي لم ترد في الجدول اعلاه، تم تجاهلها، لانها اصبحت  مستنكرة وينبغي تجنبها.</p>
+
+<p dir="rtl">يمكنك إدراج علامة اقتباس داخل سلسلة حرفية شرط ان يسبقها الرمز backslash. وتعرف هذه العملية بتهريب علامة الاقتباس. على سبيل المثال:</p>
+
+<pre class="brush: js">var quote = "He read \"The Cremation of Sam McGee\" by R.W. Service.";
+console.log(quote);
+</pre>
+
+<p dir="rtl">ونتيجة لذالك سنحصل على السلسلة الحرفية التالية:</p>
+
+<pre class="eval">He read "The Cremation of Sam McGee" by R.W. Service.
+</pre>
+
+<p dir="rtl">لتضمين الرمز  backslash نفسه  في سلسلة حرفية، يجب  عليك تهريبه ايضا ب backslash ثانية. وبالتالي سيتحول الى رمز عادي، قابل للقراءة. على سبيل المثال، لتعيين مسار الملف <code>c:\temp</code> الى سلسلة حرفية، استخدم التالي:</p>
+
+<pre class="brush: js">var home = "c:\\temp";
+</pre>
+
+<p dir="rtl">يمكنك ايضا تهريب فواصل الأسطر (line breaks)، وذالك من خلال اضافة backslash في نهاية كل جزء من اجزاء السلسلة الحرفية. الغرض هذه العملية هو الحد من طول التعليمة البرمجية فقط، ولهذا فالسلسلة الحرفية الجديدة، لن تتضمن اي من هذه السلاشات، وكذالك لن تتضمن اية فواصل الأسطر (&lt;line break = &lt;br) المخفية.</p>
+
+<pre class="brush: js">var str = "this string \
+is broken \
+across multiple\
+lines."
+console.log(str); // this string is broken across multiplelines.
+</pre>
+
+<p dir="rtl">على الرغم من ان جافاسكريبت لا تتوفر عل التعبير<strong><code> "heredoc"</code></strong> المستخدم في كثير من لغات البرمجة الاخرى <strong><code>(php مثلا)</code></strong> والذي يمكتك من التعامل مع السلاسل الحرفية بطريقة مميزة. الا انه من من الممكن تحقيق ما يشبهها من خلال التعبير التالي:</p>
+
+<pre class="brush: js">var poem =
+"Roses are red,\n\
+Violets are blue.\n\
+I'm schizophrenic,\n\
+And so am I."
+</pre>
+
+<h2 dir="rtl" id="للمزيد_من_المعلومات">للمزيد من المعلومات</h2>
+
+<p dir="rtl">تم التركيز في هذا الفصل على اساسيات صياغة الاعلانات والانواع. لدراسة المزيد حول JavaScript language constructs. راجع أيضا الفصول التالية في هذا الدليل:</p>
+
+<ul>
+ <li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Control_flow_and_error_handling">Control flow and error handling</a></li>
+ <li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Loops_and_iteration">Loops and iteration</a></li>
+ <li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Functions">Functions</a></li>
+ <li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators">Expressions and operators</a></li>
+</ul>
+
+<p dir="rtl">في الفصل التالي ان شاء الله، سنلقي نظرة على كيفية السيطرة على تدفق البيانات ( control flow constructs ) ومعالجه الأخطاء.</p>
+</div>
+
+<p>{{PreviousNext("Web/JavaScript/Guide/Introduction", "Web/JavaScript/Guide/Control_flow_and_error_handling")}}</p>
diff --git a/files/ar/web/javascript/guide/index.html b/files/ar/web/javascript/guide/index.html
new file mode 100644
index 0000000000..8a2410f634
--- /dev/null
+++ b/files/ar/web/javascript/guide/index.html
@@ -0,0 +1,116 @@
+---
+title: دليل جافا سكريبت
+slug: Web/JavaScript/Guide
+tags:
+ - جافا سكربيت
+ - دليل
+translation_of: Web/JavaScript/Guide
+---
+<div>{{jsSidebar("JavaScript Guide")}}</div>
+
+<p class="summary" dir="rtl"><span id="result_box" lang="ar"><span class="hps">دليل</span> <span class="hps">جافا سكريبت</span> <span class="hps">يظهر لك</span> <span class="hps">كيفية استخدام</span> <span class="hps"><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript">جافا سكريبت </a>و</span><span>يعطيك</span> <span class="hps">لمحة عامة عن</span> <span class="hps">اللغة.</span> <span class="hps">إذا كنت تريد أن</span> <span class="hps">تبدأ</span> <span class="hps">مع</span> <span class="hps">جافا سكريبت</span> <span class="hps">أو البرمجة</span> <span class="hps">بشكل عام</span><span>، راجع</span> <span class="hps">المقالات في</span> <a href="https://developer.mozilla.org/en-US/Learn">منطقة التعليم</a><span class="hps">.</span> <span class="hps">إذا</span> <span class="hps">أردت الحصول على معلومات</span> <span class="hps">شاملة حول</span> <span class="hps">ميزة</span> <span class="hps">اللغة</span><span>،</span> <span class="hps">ألقي نظرة على</span> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference">مرجع جافا سكريبت</a><span>.</span></span></p>
+
+<h2 dir="rtl" id="الفصول"><span class="short_text" id="result_box" lang="ar"><span class="hps">الفصول</span></span></h2>
+
+<p dir="rtl"><span class="short_text" id="result_box" lang="ar"><span class="hps">هذا الدليل</span> مقسم <span class="hps">إلى عدة</span> <span class="hps">فصول:</span></span></p>
+
+<ul class="card-grid">
+ <li dir="rtl"><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Introduction">مقدمة</a>
+
+ <p><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Introduction#Where_to_find_JavaScript_information" lang="ar-AR">حول هذا الدليل</a><br>
+ <a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Introduction#What_is_JavaScript" lang="ar-AR">حول جافا سكريبت</a><br>
+ <a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Introduction#JavaScript_and_Java" lang="ar-AR">جافا سكريبت وجافا</a><br>
+ <a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Introduction#JavaScript_and_the_ECMAScript_Specification" lang="ar-AR">ECMAScript</a><br>
+ <a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Introduction#Getting_started_with_JavaScript" lang="ar-AR">أدوات</a><br>
+ <a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Introduction#Hello_world" lang="ar-AR">مرحبا بالعالم</a></p>
+ </li>
+ <li dir="rtl"><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Grammar_and_types" lang="ar-AR">قواعد اللغة وأنواع البيانات</a>
+ <p><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types#Basics" lang="ar-AR">الجملة الأساسية و التعليقات</a><br>
+ <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types#Declarations">الأعلانات</a><br>
+ <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types#Variable_scope">نطاق متغير</a><br>
+ <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types#Variable_hoisting">رفع متغير</a><br>
+ <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types#Data_structures_and_types">أنواع وهياكل البيانات</a><br>
+ <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types#Literals">الحرفية</a></p>
+ </li>
+ <li><span><a href="/ar/docs/Web/JavaScript/Guide/Control_flow_and_error_handling">بنى التحكم ومعالجة الأخطاء</a></span>
+ <p><code><a href="/en-US/docs/Web/JavaScript/Guide/Control_flow_and_error_handling#if...else_statement">if...else</a></code><br>
+ <code><a href="/en-US/docs/Web/JavaScript/Guide/Control_flow_and_error_handling#switch_statement">switch</a></code><br>
+ <a href="/en-US/docs/Web/JavaScript/Guide/Control_flow_and_error_handling#Exception_handling_statements"><code>try</code>/<code>catch</code>/<code>throw</code></a><br>
+ <a href="/en-US/docs/Web/JavaScript/Guide/Control_flow_and_error_handling#Utilizing_Error_objects">Error objects</a><br>
+ <a href="/en-US/docs/Web/JavaScript/Guide/Control_flow_and_error_handling#Promises">Promises</a></p>
+ </li>
+ <li dir="rtl"><span><a href="/ar/docs/Web/JavaScript/Guide/Loops_and_iteration">الحلقات والتكرار</a></span>
+ <p><code><a href="/en-US/docs/Web/JavaScript/Guide/Loops_and_iteration#for_statement">for</a><br>
+ <a href="/en-US/docs/Web/JavaScript/Guide/Loops_and_iteration#while_statement">while</a><br>
+ <a href="/en-US/docs/Web/JavaScript/Guide/Loops_and_iteration#do...while_statement">do...while</a><br>
+ <a href="/en-US/docs/Web/JavaScript/Guide/Loops_and_iteration#break_statement">break</a>/<a href="/en-US/docs/Web/JavaScript/Guide/Loops_and_iteration#continue_statement">continue</a><br>
+ <a href="/en-US/docs/Web/JavaScript/Guide/Loops_and_iteration#for...in_statement">for..in</a><br>
+ <a href="/en-US/docs/Web/JavaScript/Guide/Loops_and_iteration#for...of_statement">for..of</a></code> </p>
+ </li>
+ <li dir="rtl"><span><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/%D8%A7%D9%84%D8%AF%D9%88%D8%A7%D9%84">الدوال</a></span>
+ <p dir="ltr"><a href="/en-US/docs/Web/JavaScript/Guide/Functions#Defining_functions">Defining functions</a><br>
+ <a href="/en-US/docs/Web/JavaScript/Guide/Functions#Calling_functions">إستدعاء الدوال</a><br>
+ <a href="/en-US/docs/Web/JavaScript/Guide/Functions#Function_scope">نطاق الدالة</a><br>
+ <a href="/en-US/docs/Web/JavaScript/Guide/Functions#Closures">Closures</a><br>
+ <a href="/en-US/docs/Web/JavaScript/Guide/Functions#Using_the_arguments_object">Arguments</a> &amp; <a href="/en-US/docs/Web/JavaScript/Guide/Functions#Function_parameters">parameters</a><br>
+ <a href="/en-US/docs/Web/JavaScript/Guide/Functions#Arrow_functions">Arrow functions</a></p>
+ </li>
+ <li><span><a href="/ar/docs/Web/JavaScript/Guide/Expressions_and_Operators">Expressions and operators</a></span>
+ <p><a href="/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#Assignment_operators">Assignment</a> &amp; <a href="/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#Comparison_operators">Comparisons</a><br>
+ <a href="/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#Arithmetic_operators">Arithmetic operators</a><br>
+ <a href="/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#Bitwise_operators">Bitwise</a> &amp; <a href="/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#Logical_operators">logical operators</a><br>
+ <a href="/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#Conditional_(ternary)_operator">Conditional (ternary) operator</a></p>
+ </li>
+ <li><span><a href="/ar/docs/Web/JavaScript/Guide/Numbers_and_dates">Numbers and dates</a></span><a href="/en-US/docs/Web/JavaScript/Guide/Numbers_and_dates#Numbers"> Number literals</a>
+ <p><a href="/en-US/docs/Web/JavaScript/Guide/Numbers_and_dates#Number_object"><code>Number</code> object</a><br>
+ <a href="/en-US/docs/Web/JavaScript/Guide/Numbers_and_dates#Math_object"><code>Math</code> object</a><br>
+ <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Numbers_and_dates#Date_object"><code>Date</code> object</a></p>
+ </li>
+ <li><span><a href="/ar/docs/Web/JavaScript/Guide/Text_formatting">تنسيق النص</a></span>
+ <p><a href="/en-US/docs/Web/JavaScript/Guide/Text_formatting#String_literals">String literals</a><br>
+ <a href="/en-US/docs/Web/JavaScript/Guide/Text_formatting#String_objects"><code>String</code> object</a><br>
+ <a href="/en-US/docs/Web/JavaScript/Guide/Text_formatting#Multi-line_template_strings">Template strings</a><br>
+ <a href="/en-US/docs/Web/JavaScript/Guide/Text_formatting#Internationalization">Internationalization</a><br>
+ <a href="/en-US/docs/Web/JavaScript/Guide/Regular_Expressions">Regular Expressions</a></p>
+ </li>
+ <li><span><a href="/ar/docs/Web/JavaScript/Guide/Indexed_collections">Indexed collections</a></span>
+ <p><a href="/en-US/docs/Web/JavaScript/Guide/Indexed_collections#Array_object">Arrays</a><br>
+ <a href="/en-US/docs/Web/JavaScript/Guide/Indexed_collections#Array_comprehensions">Array comprehensions</a><br>
+ <a href="/en-US/docs/Web/JavaScript/Guide/Indexed_collections#Typed_Arrays">Typed arrays</a></p>
+ </li>
+ <li><span><a href="/ar/docs/Web/JavaScript/Guide/Keyed_collections">Keyed collections</a></span>
+ <p><code><a href="/en-US/docs/Web/JavaScript/Guide/Keyed_collections#Map_object">Map</a></code><br>
+ <code><a href="/en-US/docs/Web/JavaScript/Guide/Keyed_collections#WeakMap_object">WeakMap</a></code><br>
+ <code><a href="/en-US/docs/Web/JavaScript/Guide/Keyed_collections#Set_object">Set</a></code><br>
+ <code><a href="/en-US/docs/Web/JavaScript/Guide/Keyed_collections#WeakSet_object">WeakSet</a></code></p>
+ </li>
+ <li><span><a href="/ar/docs/Web/JavaScript/Guide/Working_with_Objects">التعامل مع الكائنات</a></span>
+ <p><a href="/en-US/docs/Web/JavaScript/Guide/Working_with_Objects#Objects_and_properties">Objects and properties</a><br>
+ <a href="/en-US/docs/Web/JavaScript/Guide/Working_with_Objects#Creating_new_objects">Creating objects</a><br>
+ <a href="/en-US/docs/Web/JavaScript/Guide/Working_with_Objects#Defining_methods">Defining methods</a><br>
+ <a href="/en-US/docs/Web/JavaScript/Guide/Working_with_Objects#Defining_getters_and_setters">Getter and setter</a></p>
+ </li>
+ <li><span><a href="/ar/docs/Web/JavaScript/Guide/Details_of_the_Object_Model">Details of the object model</a></span>
+ <p><a href="/en-US/docs/Web/JavaScript/Guide/Details_of_the_Object_Model#Class-based_vs._prototype-based_languages">Prototype-based OOP</a><br>
+ <a href="/en-US/docs/Web/JavaScript/Guide/Details_of_the_Object_Model#Creating_the_hierarchy">Creating object hierarchies</a><br>
+ <a href="/en-US/docs/Web/JavaScript/Guide/Details_of_the_Object_Model#Property_inheritance_revisited">Inheritance</a></p>
+ </li>
+</ul>
+
+<ul class="card-grid">
+ <li><span><a href="/ar/docs/Web/JavaScript/Guide/Iterators_and_Generators">Iterators and generators</a></span>
+
+ <p><a href="/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators#Iterators">Iterators</a><br>
+ <a href="/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators#Iterables">Iterables</a><br>
+ <a href="/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators#Generators">Generators</a><br>
+ <a href="/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators#Generator_comprehensions">Generator comprehensions</a></p>
+ </li>
+ <li><span><a href="/ar/docs/Web/JavaScript/Guide/Meta_programming">Meta programming</a></span>
+ <p><code><a href="/en-US/docs/Web/JavaScript/Guide/Meta_programming#Proxies">Proxy</a></code><br>
+ <a href="/en-US/docs/Web/JavaScript/Guide/Meta_programming#Handlers_and_traps">Handlers and traps</a><br>
+ <a href="/en-US/docs/Web/JavaScript/Guide/Meta_programming#Revocable_Proxy">Revocable Proxy</a><br>
+ <code><a href="/en-US/docs/Web/JavaScript/Guide/Meta_programming#Reflection">Reflect</a></code></p>
+ </li>
+</ul>
+
+<p>{{Next("Web/JavaScript/Guide/Introduction")}}</p>
diff --git a/files/ar/web/javascript/guide/introduction/index.html b/files/ar/web/javascript/guide/introduction/index.html
new file mode 100644
index 0000000000..681bb0276a
--- /dev/null
+++ b/files/ar/web/javascript/guide/introduction/index.html
@@ -0,0 +1,159 @@
+---
+title: تقديم
+slug: Web/JavaScript/Guide/Introduction
+tags:
+ - جافا سكربيت
+ - مرشد
+translation_of: Web/JavaScript/Guide/Introduction
+---
+<div>{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide", "Web/JavaScript/Guide/Grammar_and_types")}}</div>
+
+<p class="summary" dir="rtl"><span id="result_box" lang="ar"><span class="hps">يقوم</span> <span class="hps">هذا الفصل بتقديم </span><span class="hps">جافا سكريبت و</span><span>يناقش</span> <span class="hps">بعض</span> <span class="hps">مفاهيمها</span> <span class="hps">الأساسية.</span></span></p>
+
+<h2 dir="rtl" id="ما_يجب_أن_تعرفه_مسبقا"><span class="short_text" id="result_box" lang="ar"><span class="hps">ما يجب أن تعرفه مسبقا</span></span></h2>
+
+<div style="font-size: 15; font-family: 'tahoma';">
+<p dir="rtl"><span id="result_box" lang="ar"><span class="hps">يفترض</span> <span class="hps">أن تكون لديك</span> <span class="hps">خلفية حول المكونات</span><span class="hps"> التالية</span><span>:</span></span></p>
+
+<ul>
+ <li dir="rtl">معرفة عامة بشبكة الأنترنت و شبكة الويب العالمية ({{Glossary("WWW")}}).</li>
+ <li dir="rtl"><span id="result_box" lang="ar"><span class="hps">معرفة جيدة</span> <span class="hps">ب</span><span class="hps">لغة الترميز النص</span> <span class="atn hps">التشعبي </span></span>({{Glossary("HTML")}}).</li>
+ <li dir="rtl">بعض الخبرة في البرمجة. إذا كنت جديدا على البرمجة، يمكنك الأطلاع على أحد الدروس الموجودة على الصفحة الرئيسية حول <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript">جافا سكريبت</a>.</li>
+</ul>
+
+<h2 dir="rtl" id="أين_تجد_المعلومات_عن_الجافا_سكربيت">أين تجد المعلومات عن الجافا سكربيت</h2>
+
+<p dir="rtl">وثائق جافا سكربيت على MDN تشتمل على مايلي:</p>
+
+<ul>
+ <li dir="rtl"><span id="result_box" lang="ar"><a href="https://developer.mozilla.org/en-US/Learn">تعلم الانترنت</a> <span class="hps">يقدم معلومات</span> <span class="hps">للمبتدئين و</span><span>يقدم</span> <span class="hps">المفاهيم</span> <span class="hps">الأساسية للبرمجة</span> <span class="hps">والإنترنت</span></span>.</li>
+ <li dir="rtl"><span id="result_box" lang="ar"><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide">دليل جافا سكريبت </a><span class="atn hps">(</span><span>هذا الدليل)</span> <span class="hps">يقدم لمحة عامة</span> <span class="hps">عن</span> <span class="hps">لغة</span> <span class="hps">جافا سكريبت و</span><span>كائناتها</span><span>.</span></span></li>
+ <li dir="rtl"><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference">مرجع جافا سكربيت </a> <span class="short_text" id="result_box" lang="ar"><span class="hps">يوفر</span> <span class="hps">مادة مرجعية</span> <span class="hps">مفصلة</span> <span class="hps">لل</span><span>جافا سكريبت</span><span>.</span></span></li>
+</ul>
+
+<p dir="rtl"><span id="result_box" lang="ar"><span class="hps">إذا</span> <span class="hps">كنت جديدا على</span> <span class="hps">جافا سكريبت</span><span>، </span></span>أبدء مع المقالات في <a href="https://developer.mozilla.org/en-US/Learn">منطقة التعلم</a> و <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide">دليل جافا سكريبت</a>. حتى تصبح ملما بالأساسيات، ومن ثم يمكنك استخدام <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference">مرجع جافا سكربيت</a> للحصول على مزيد من التفاصيل حول الكائنات الفردية والبيانات.</p>
+
+<h2 dir="rtl" id="ما_هي_جافاسكريبت؟"><span class="short_text" id="result_box" lang="ar"><span class="hps">ما هي</span> جافا<span class="hps">سكريبت؟</span></span></h2>
+
+<p dir="rtl"><span id="result_box" lang="ar"><span class="hps">الجافاسكريبت</span> <span class="hps">هي لغة برمجة كائنية التوجة ومتعددة المنصات</span><span>. هي</span> <span class="hps">لغة</span> <span class="hps">صغيرة وخفيفة الوزن</span><span>.</span> <span class="hps">داخل</span> <span class="hps">بيئة</span> <span class="hps">المضيف (على</span> <span class="hps">سبيل المثال،</span> <span class="hps">متصفح ويب</span><span>)</span><span>،</span></span><span id="result_box" lang="ar"><span> في هذه البيئة</span></span><span lang="ar"><span> يمكنك استخدامها على الكائنات</span></span><span lang="ar"><span class="hps">.</span></span><span lang="ar"><span class="hps"> </span></span></p>
+
+<p dir="rtl">تحتوي جافاسكريبت على مكتبة قياسية من الكائنات، مثل <code>Array</code>، <code>Date</code>، <code>وMath</code>، ومجموعة أساسية من العناصر اللغوية مثل العوامل، بنى التحكم، والتصريحات. جوهر جافا سكريبت هو قابليتها للتعامل مع مجموعة متنوعة من الكائنات التي تكون مكملة مع كائنات إضافية. على سبيل المثال:</p>
+
+<ul>
+ <li dir="rtl">من جانب العميل جافا سكريبت تمتد إلى صميم اللغة الأساسية من خلال تمكين الكائنات من السيطرة على المتصفح وعلى نموذج الكائن (DOM). على سبيل المثال،<span id="result_box" lang="ar"><span> تتيح لك إضافات اللغة من جانب العميل وضع العناصر في النموذج </span></span> HTML <span lang="ar"><span>، والرد على الأحداث التي يتم تشغيلها بواسطة المستخدم (النقرات، وإدخال النموذج، وإجراءات التصفح، وما إلى ذلك).</span></span></li>
+ <li dir="rtl">من جانب الخادم جافا سكريبت تمتد إلى صميم اللغة الأساسية من خلال توفير الأشياء ذات الصلة إلى تشغيل الجافا سكريبت على الخادم. على سبيل المثال، الملحقات من جانب الخادم، تسمح للتطبيق الخاص بك، بالتواصل مع قاعدة البيانات، <span id="result_box" lang="ar"><span>والتعامل مع الملفات والتبديل من تطبيق إلى آخر وهكذا</span></span>.</li>
+</ul>
+
+<h2 dir="rtl" id="JavaScript_and_Java" name="JavaScript_and_Java"><span class="short_text" id="result_box" lang="ar"><span class="hps">جافا سكريبت وجافا</span></span></h2>
+
+<p dir="rtl"><span id="result_box" lang="ar"><span>جافا سكريبت وجافا متشابهتان في بعض النواحي، ولكنها تختلف اختلافا جوهريا عن بعضها البعض في نواح اخرى.</span> <span>لغة جافا سكريبت تبدو وكأنها جافا، لكن لا يتم كتابتها بشكل ثابت، وطباعة جافا سكريبت ضعيفة (في حين أنها قوية في جافا).</span> <span>بناء الجملة في تعبيرات جافا سكريبت متشابهة جدا لجافا، في اصطلاحات التسمية والبنى الشرطية على سبيل المثال، وهذا احد الأسباب التي ادت الى إعادة تسمية لغة</span></span> LiveScript إلى JavaScript.</p>
+
+<p dir="rtl"><span id="result_box" lang="ar"><span>على عكس جافا التي لها نظام المترجم الزمني </span></span> compile-time system <span lang="ar"><span> للاعلان عن الكلاسات، فجافا سكريبت تدعم نظام وقت التشغيل </span></span> runtime system <span lang="ar"><span> ولها بعض أنواع البيانات لتمثيل الأرقام، القيم المنطقية، والسلاسل النصية (و أمور أخرى).</span> <span>تعتمد جافاسكريبت على النموذج الأولي </span></span> prototype-based object model <span lang="ar"><span>لعمل رابط بين الكائنات بينما تستخدم جافا نموذجا أكثر شيوعا يستند إلى الكلاسات </span></span> class-based object model. <span lang="ar"> <span>النماذج-البروتوتايبس تسمح بخلق ديناميكية عالية فيما يخص الوراثة.</span> <span>وبالتالي، فإن الخصائص التي يرثها كائن ما، قد تختلف مع مرور الوقت.</span> </span> <span id="result_box" lang="ar"><span>كما تدعم جافاسكريبت الوظائف دون متطلبات إعلانية خاصة.</span> <span>الوظائف يمكن أن تكون خصائص لكائن،</span></span></p>
+
+<p dir="rtl"><span id="result_box" lang="ar"><span>جافا سكريبت هي لغة "حرة" مقارنة بجافا.</span> لذا ف<span>ليس من الضروري، الاعلان عن نوع المتغيرات او الدوال او حتى الكلاسات.</span> و<span>ليس من الضروري معرفة ما إذا كانت الدالة/الوظيفة عامة أو خاصة أو محمية، ولا توجد واجهات لتنفيذها.</span> </span><span id="result_box" lang="ar"> <span>ولا يتم كتابة نوع المتغيرات والبارامترز والوظائف بشكل صريح.</span></span></p>
+
+<p dir="rtl"><span id="result_box" lang="ar"><span>جافا هي لغة برمجة، تستخدم الكلاسات، مصممة للتشغيل بسرعة وضمان أمن الكتابة.</span> <span>وهذا يعني، على سبيل المثال، أنه لا يمكن تحويل عدد صحيح إلى كائن أو أنه لا يمكنك </span></span> <span id="result_box" lang="ar"><span>الوصول إلى الذاكرة الخاصة </span></span> <span lang="ar"><span> عن طريق تحريف </span></span> Java bytecodes<span lang="ar"><span>.</span> <span>نموذج الكلاسات المستخدم من قبل جافا، يعني أن البرنامج يتكون فقط من الكلاسات والوظائف.</span> <span>هذا النوع من الميراث القائم على الكلاسات، مرتبط بالكتابة القوية، ينتج هياكل مقترنة بقوة وتسلسلات هرمية للكائن.</span> <span>لهذه الأسباب، يمكن أن تظهر جافا كلغة أكثر تعقيدا من جافا سكريبت.</span></span></p>
+
+<p dir="rtl"><span id="result_box" lang="ar"><span>على عكس جافا، فجافاسكريبت سليلة من لغات اخرى أخف وزنا، وديناميكية مثل </span></span> HyperTalk و dBASE. <span lang="ar"> <span>وتستهدف لغات البرمجة النصية هذه، جمهورا أكبر مع بنية أبسط، وخصائص محلية متخصصة، والحد الأدنى من المتطلبات المسبقة لإنشاء الكائنات.</span></span></p>
+
+<table class="standard-table">
+ <caption>
+ <p dir="rtl"><span class="short_text" id="result_box" lang="ar"><span class="hps">جافا سكريبت</span> <span class="hps">مقارنة مع</span> <span class="hps">جافا</span></span></p>
+ </caption>
+ <thead>
+ <tr>
+ <th dir="rtl" scope="col">جافا سكربيت</th>
+ <th dir="rtl" scope="col">جافا</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td dir="rtl"><span id="result_box" lang="ar"><span>تعتمد على رابط البروتوتايب.</span> <span>لا يوجد تمييز بين أنواع الكائنات.</span> <span>تتم الوراثة من خلال آلية البروتوتايب، ويمكن إضافة الخصائص والوظائف إلى أي كائن حيوي</span></span></td>
+ <td dir="rtl">تعتمد على الكلاسات (Class-based). <span id="result_box" lang="ar"><span>وتنقسم الكائنات إلى فئات وحالات، يتم الإرث من خلال التسلسل الهرمي للكلاسات.</span> <span>لا يمكن إضافة الكلاسات والحالات ديناميكيا إلى الخصائص والوظائف.</span></span></td>
+ </tr>
+ <tr>
+ <td><span id="result_box" lang="ar"><span class="hps">لا يتم الاعلان عن</span> <span class="hps">نوع البيانات</span> <span class="atn hps">المتغيرة (</span><span>الكتابة</span> <span class="hps">ديناميكية</span><span>)</span><span>.</span></span></td>
+ <td dir="rtl"><span class="short_text" id="result_box" lang="ar"><span class="hps">يجب تعريف</span> <span class="hps">أنواع</span> <span class="hps">البيانات المتغيرة</span> <span class="atn hps">(</span><span>الكتابة</span> <span class="hps">ثابتة</span><span>)</span><span>.</span></span></td>
+ </tr>
+ <tr>
+ <td><span class="short_text" id="result_box" lang="ar"><span class="hps">لا يمكن الكتابة</span> <span class="hps">تلقائيا</span> <span class="hps">إلى القرص</span> <span class="hps">الثابت.</span></span></td>
+ <td>
+ <div id="gt-src-tools">
+ <div id="gt-src-tools-l">
+ <div id="gt-src-tools">
+ <div> </div>
+
+ <div id="tts_button"><span class="short_text" id="result_box" lang="ar"><span class="hps">يمكن الكتابة</span> <span class="hps">تلقائيا</span> <span class="hps">إلى القرص</span> <span class="hps">الثابت.</span></span></div>
+ </div>
+ </div>
+ </div>
+
+ <div id="gt-input-tool" style="display: inline-block;">
+ <div> </div>
+ </div>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+<p><span id="result_box" lang="ar"><span class="hps">ل</span><span>مزيد من المعلومات حول</span> <span class="hps">الاختلافات بين</span> <span class="hps">جافا سكريبت وجافا</span><span>، انظر</span> <span class="hps">الفصل</span> <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Details_of_the_Object_Model">تفاصيل عن الكائن</a><span>.</span></span></p>
+
+<h2 id="JavaScript_and_the_ECMAScript_Specification" name="JavaScript_and_the_ECMAScript_Specification"><span class="short_text" id="result_box" lang="ar"><span class="hps">جافا سكريبت وال</span><span>مواصفات</span> <span class="hps">ECMAScript</span></span></h2>
+
+<p dir="rtl"> جافا سكريبت موحدة عن طريق <a href="http://www.ecma-international.org/">Ecma International</a> - الجمعية الأوروبية لتوحيد النظم المعلوماتية والاتصالات (ECMA اختصارا لجمعية مصنعي الكمبيوتر الأوروبية تاريخيا) والتي تنص على لغة برمجة موحدة، <span id="result_box" lang="ar"><span>هذا الإصدار القياسي من جافا سكريبت، يسمى</span></span>  ECMAScript. هذا الاصدار، <span id="result_box" lang="ar"><span>يتصرف بشكل متطابق في جميع التطبيقات المتوافقة مع المعايير.</span></span> يمكن للشركات استخدام هذه اللغة القياسية لتطوير طريقة تنفيذ جافا سكريبت. يتم توثيق ECMAScript القياسية مع ECMA-262. انظر رؤية <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/New_in_JavaScript">جديد جافا سكريبت</a> لمعرفة المزيد عن الاصدارات المختلفة من جافا سكريبت وطبعات مختلفة من مواصفات ECMAScript.</p>
+
+<p dir="rtl"><span id="result_box" lang="ar"><span>كما إعتُمِدت</span></span> ECMA-262 <span id="result_box" lang="ar"><span>من قبل </span></span> <a href="http://www.iso.ch/">ISO</a>  <span id="result_box" lang="ar"><span>المنظمة الدولية للتوحيد القياسي ك </span></span>ISO-16262.  كما يمكنك أيضا العثور على المواصفات على <a href="http://www.ecma-international.org/publications/standards/Ecma-262.htm">موقع Ecma International</a>. مواصفات ECMAScript  <span id="result_box" lang="ar"><span>لا تصف نموذج الكائن المستند</span></span>  (DOM)، <span id="result_box" lang="ar"><span>الذي يتم توحيده من قبل</span></span> <a href="http://www.w3.org/">اتحاد شبكة الويب العالمية (W3C)</a>. وDOM يحدد الطريقة التي تعرض بها كائنات المستند HTML في السكريبت الخاص بك. للحصول على فكرة أفضل حول التقنيات المختلفة التي يتم استخدامها عند البرمجة مع جافا سكريبت، راجع مقالة <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/JavaScript_technologies_overview">جافا سكريبت نظرة عامة التكنولوجيات</a>.</p>
+
+<h3 id="JavaScript_Documentation_versus_the_ECMAScript_Specification" name="JavaScript_Documentation_versus_the_ECMAScript_Specification"><span class="short_text" id="result_box" lang="ar"><span class="hps">وثائق</span> <span class="hps">جافا سكريبت</span> <span class="hps">مقابل</span> <span class="hps">المواصفات</span> <span class="hps">ECMAScript</span></span></h3>
+
+<div id="gt-src-tools">
+<div dir="rtl" style="zoom: 1;"><span id="result_box" lang="ar"><span class="hps">مواصفات</span> <span class="hps">ECMAScript</span> <span class="hps">هي</span> <span class="hps">مجموعة من المتطلبات</span> <span class="hps">لتنفيذ</span> <span class="hps">ECMAScript</span><span>.</span> <span class="hps">من المفيد</span> <span class="hps">إذا كنت ترغب في</span> <span class="hps">تنفيذ</span> <span class="hps">ميزات اللغة المتوافقة</span> </span><span lang="ar"> مع <span class="hps">المعايير القياسية في </span><span class="hps">تنفيذ</span> <span class="hps">ECMAScript</span> <span class="hps"> أو</span> <span class="hps">في احدى المحركات</span> <span class="atn hps">(ك</span> <span class="hps">SpiderMonkey</span> <span class="hps">في فايرفوكس</span><span>،</span> <span class="hps">أو</span> <span class="hps">V8</span> <span class="hps">في</span> <span class="hps">كروم)</span><span>.</span></span></div>
+
+<div dir="rtl" style="zoom: 1;"> </div>
+</div>
+
+<p dir="rtl"><span id="result_box" lang="ar"><span>ليس المقصود من مواصفات ال</span></span> ECMAScript هو <span id="result_box" lang="ar"><span>دعم برمجة السكريبت</span></span>. <span id="result_box" lang="ar"><span>توفر وثائق جافا سكريبت معلومات لكتابة النصوص البرمجية.</span></span></p>
+
+<p dir="rtl"><span id="result_box" lang="ar"><span class="hps">يستخدم</span> <span class="hps">مواصفات</span> <span class="hps">ECMAScript</span> </span> <span id="result_box" lang="ar"><span>أحيانا مصطلحات وصياغات قد تبدو غريبة لمطور جافا سكريبت</span></span><span lang="ar"><span>.</span></span> <span id="result_box" lang="ar"><span>على الرغم من أن وصف اللغة يختلف بين</span></span> <span lang="ar"> <span class="hps">ECMAScript</span><span>، </span></span> <span id="result_box" lang="ar"><span>وبين وثائق جافا سكريبت، اللغة نفسها لا تزال هي نفسها.</span> <span>تدعم جافاسكريبت جميع الميزات المميزة في مواصفات</span></span> <span lang="ar"> <span class="hps">ECMAScript</span><span>.</span></span></p>
+
+<p dir="rtl"><span id="result_box" lang="ar"><span>تصف وثائق جافا سكريبت جوانب اللغة التي يمكن استخدامها من قبل مطوري جافا سكريبت.</span></span></p>
+
+<h2 id="الشروع_في_العمل_مع_جافا_سكريبت"><span class="short_text" id="result_box" lang="ar"><span class="hps">الشروع في العمل</span> <span class="hps">مع</span> <span class="hps">جافا سكريبت</span></span></h2>
+
+<p dir="rtl"><span id="result_box" lang="ar"><span class="hps">الشروع في العمل</span> <span class="hps">مع</span> <span class="hps">جافا سكريبت</span> <span class="hps">سهل</span><span>:</span> <span class="hps">كل ما تحتاجه</span> <span class="hps">هو متصفح</span> <span class="hps">ويب</span> <span class="hps">حديث</span><span>.</span> </span> <span id="result_box" lang="ar"> <span>يتضمن هذا الدليل بعض ميزات جافا سكريبت المتوفرة فقط في أحدث إصدارات فايرفوكس، لذا يوصى باستخدام احدث إصدار من فايرفوكس لتجربة الأمثلة المقدمة.</span></span></p>
+
+<p dir="rtl"><span id="result_box" lang="ar"><span>هناك أداتان هما جزءا من فايرفوكس، وهي مفيدة لتجربة واختبار شفرة جافا سكريبت، هما: وحدة تحكم الويب</span></span> Console <span lang="ar"><span> وقائمة جافاسكريبت </span></span> Scratchpad <span lang="ar"><span>.</span></span></p>
+
+<h3 id="وحدة_تحكم_ويب"><span class="short_text" id="result_box" lang="ar"><span class="hps">وحدة تحكم ويب</span></span></h3>
+
+<p><a href="https://developer.mozilla.org/en-US/docs/Tools/Web_Console">وحدة تحكم ويب</a> يعرض لك معلومات عن صفحة الويب التي تم تحميلها حاليا، ويشمل أيضا <a href="https://developer.mozilla.org/en-US/docs/Tools/Web_Console#The_command_line_interpreter">سطر الأوامر</a> الذي يمكنك استخدامه لتنفيذ اكواد الجافا سكربت في الصفحة الحالية.</p>
+
+<p dir="rtl"><span id="result_box" lang="ar"><span class="hps">لفتح</span> <span class="hps">وحدة تحكم الويب</span> <span class="atn hps">(</span></span>Ctrl+Shift+K<span lang="ar"><span class="hps">)</span><span class="atn"> او F12، </span> <span class="hps">في وحدة التحكم،</span> <span class="hps">هناك</span> <span class="hps">سطر الأوامر</span> <span class="hps">الذي يمكنك استخدامه</span> لادخال اكواد <span class="hps">جافا سكريبت،</span> <span class="hps">و</span><span>يظهر</span> <span class="hps">الناتج في</span> <span class="hps">الجزء</span> <span class="hps">أعلاه:</span></span></p>
+
+<p><img alt="" src="https://mdn.mozillademos.org/files/7363/web-console-commandline.png" style="display: block; margin-left: auto; margin-right: auto;"></p>
+
+<h3 id="المسودة"><span class="short_text" id="result_box" lang="ar"><span class="hps">المسودة</span></span></h3>
+
+<p dir="rtl">تعتبر وحدة تحكم الويب كبيرة بالنسبة لتنفيذ سطر واحدة من جافا سكريبت، ولكن على الرغم من أنه يمكن تنفيذ عدة أسطر، الا انها ليست مريحة جدا، خصوصا، في تنفيذ  التعليمات البرمجية الكبيرة نوعا ما والمعقدة، لذالك ننصح باستخدام  المسودة Scratchpad كأداة أفضل.</p>
+
+<p dir="rtl"><span id="result_box" lang="ar"><span class="hps">لفتح</span> <span class="hps">المسودة</span> <span class="atn hps">(</span></span>Shift+F4<span lang="ar"><span class="hps">)</span><span class="atn">، او حدد "</span><span>المسودة</span><span>" من القائمة اختر</span> <span class="hps">"المطور</span><span>"، وهي</span> <span class="hps">ضمن القائمة</span> <span class="hps">في فايرفوكس</span><span>.</span> <span class="hps">ستفتح</span> <span class="hps">في نافذة منفصلة</span>، <span class="hps">يمكنك استخدامها</span> <span class="hps">لكتابة</span> <span class="hps">وتنفيذ</span> <span class="hps">جافا سكريبت</span> <span class="hps">في المتصفح</span><span>.</span> <span class="hps">يمكنك</span> <span class="hps">أيضا حفظ</span> <span class="hps">النصوص</span> <span class="hps">إلى القرص</span> <span class="hps">وتحميلها</span> <span class="hps">من القرص.</span></span></p>
+
+<p><img alt="" src="https://mdn.mozillademos.org/files/7365/scratchpad.png" style="display: block; margin-left: auto; margin-right: auto;"></p>
+
+<h3 id="مرحبا_بالعالم"><span class="short_text" id="result_box" lang="ar"><span class="hps">مرحبا بالعالم</span></span></h3>
+
+<p dir="rtl">لتبدأ بكتابة جافا سكريبت، افتح المسودة واكتب "مرحبا بالعالم". كما يلي:</p>
+
+<pre class="brush: js">function greetMe(yourName) {
+ alert("Hello " + yourName);
+}
+
+greetMe("World");
+</pre>
+
+<p dir="rtl">من قائمة "تنفيذ" واضغط على تنفيذ او  Ctrl + R لمشاهدة ناتج الكود في المتصفح الخاص بك!</p>
+
+<p dir="rtl"><span id="result_box" lang="ar"><span>في الصفحات التالية، سيعرض هذا الدليل بناء الجملة في لغة جافا سكريبت وميزاتها.</span> <span>وسوف تكون ان شاء الله قادرا على كتابة تطبيقات أكثر تعقيدا.</span></span></p>
+</div>
+
+<p>{{PreviousNext("Web/JavaScript/Guide", "Web/JavaScript/Guide/Grammar_and_types")}}</p>
diff --git a/files/ar/web/javascript/guide/loops_and_iteration/index.html b/files/ar/web/javascript/guide/loops_and_iteration/index.html
new file mode 100644
index 0000000000..3bc05c57a7
--- /dev/null
+++ b/files/ar/web/javascript/guide/loops_and_iteration/index.html
@@ -0,0 +1,352 @@
+---
+title: الحلقات والتكرار
+slug: Web/JavaScript/Guide/Loops_and_iteration
+translation_of: Web/JavaScript/Guide/Loops_and_iteration
+---
+<div>{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Control_flow_and_error_handling", "Web/JavaScript/Guide/Functions")}}</div>
+
+<p class="summary" dir="rtl">الحلقات، وسيلة سريعة وسهلة لفعل شيئا ما، مرارا <strong>وتكرارا</strong>. يقدم هذا الفصل من <a href="/en-US/docs/Web/JavaScript/Guide">دليل الجافاسكريب</a>  مختلف عبارات التكرار المتاحة لجافا سكريبت.</p>
+
+<div style="font-size: 15; font-family: 'tahoma';">
+<p dir="rtl">يمكنك التفكير في الحلقة كنسخة من لعبة في الكمبيوتر، حيث ستقوم بتحريك السوبر ماريو X من الخطوات الى الامام، على سبيل المثال، امر التحريك، " تَحرًك ب 5 خطوات إلى الامام". يمكن تطبيق مثل هذه الفكرة باستخدام الحلقة:</p>
+
+<pre class="brush: js">var step;
+for (step = 0; step &lt; 5; step++) {
+ // Runs 5 times, with values of step 0 through 4.
+ console.log('Walking east one step');
+}
+</pre>
+
+<p dir="rtl">هناك أنواع مختلفة من الحلقات، والمهم هو انها تقوم بشئ واحد: وهو <strong>تكرار</strong> بعض الاجراءات عدة مرات. الحلقات بمختلف انواعها، تقدم طرقا مختلفة لتحديد نقطة البداية ونقطة النهاية للحلقة. يمكن استخدام نوع معين من الحلقات، لحل نوع معين من المشاكل.</p>
+
+<p dir="rtl">الحلقات المتوفرة في جافاسكريبت وهي :</p>
+
+<ul>
+ <li>{{anch("for statement")}}</li>
+ <li>{{anch("do...while statement")}}</li>
+ <li>{{anch("while statement")}}</li>
+ <li>{{anch("labeled statement")}}</li>
+ <li>{{anch("break statement")}}</li>
+ <li>{{anch("continue statement")}}</li>
+ <li>{{anch("for...in statement")}}</li>
+ <li>{{anch("for...of statement")}}</li>
+</ul>
+
+<h2 dir="rtl" id="الحلقة_for"><code>الحلقة </code><code>for</code></h2>
+
+<p dir="rtl">الحلقة {{jsxref("statements/for","for loop")}} لاتتوقف عن التكرار حتى يتم تحقق الشرط المحدد ب <code>false</code>. الحلقة <strong><code>for </code></strong>لجافاسكريبت مشابه للحلقة <strong><code>for </code></strong>الخاصة ب Java و C. يوضح الشكل التالي التركيبة الاساسية للحلقة <strong><code>for</code></strong>:</p>
+
+<pre class="syntaxbox">for ([initialExpression]; [condition]; [incrementExpression])
+ statement
+</pre>
+
+<p dir="rtl">عند تنفيذ الحلقة، يحدث ما يلي:</p>
+
+<ol dir="rtl">
+ <li> <strong><code>initialExpression </code></strong>: التعبير المستخدم لتهيئة الحلقة، سيتم تنفيذه، إذا كان موجوداً. يقوم هذا التعبير بتهيئة عداد حلقة واحدة أو أكثر، من الممكن استخدام تعبيرات أكثر تعقيدا  إذا لزم الأمر. يمكن ايضا أن يتم تعريف المتغيرات في هذا التعبير.</li>
+ <li><strong><code>condition </code></strong>: تعبير الشرط الذي تتمحور حوله الحلقة. اذا كانت قيمته تساوي <code>true</code>، ستنفذ الحلقة من جديد، عندما ستصبح قيمته تساوي <code>false</code>، ستنتهي الحلقة، إذا تم حذف تعبير الشرط تماما. سيعتبر الشرط صحيحاً <code>true</code>.</li>
+ <li><strong><code>statement </code></strong>: التعليمة البرمجية التي ستنفذ ما دام الشرط يساوي <code>true</code>. لتنفيذ تعليمات برمجية متعددة، استخد التعليمة بلوك ({ ... }).</li>
+ <li><strong><code>incrementExpression </code></strong>: تحديث التعبير، إذا كان موجودا، ينفذ، ويعود التحكم إلى الخطوة رقم 2.</li>
+</ol>
+
+<h3 dir="rtl" id="مثال"><strong>مثال</strong></h3>
+
+<p dir="rtl">تحتوي الدالة التالية على التعليمة <code><strong>for </strong></code>التي تقوم باحصاء عدد العناصر <code>options </code>المحددة في العنصر {{HTMLElement("select")}}. التعليمة <code><strong>for </strong></code>تعلن عن المتغير <strong><code>i</code></strong> وتقوم بتهيئته ب 0. وتتحقق من ان <strong><code>i</code></strong> اصغر من عدد العناصر في العنصر<code> &lt;select&gt;.</code> ستنفذ التعليمة <code>if</code>  بنجاح، وستزيد قيمة <strong><code>i</code></strong> بواحد ما دامت الحلقة مستمرة بالتكرار.</p>
+
+<pre class="brush: html">&lt;form name="selectForm"&gt;
+  &lt;p&gt;
+    &lt;label for="musicTypes"&gt;Choose some music types, then click the button below:&lt;/label&gt;
+    &lt;select id="musicTypes" name="musicTypes" multiple="multiple"&gt;
+      &lt;option selected="selected"&gt;R&amp;B&lt;/option&gt;
+      &lt;option&gt;Jazz&lt;/option&gt;
+      &lt;option&gt;Blues&lt;/option&gt;
+      &lt;option&gt;New Age&lt;/option&gt;
+      &lt;option&gt;Classical&lt;/option&gt;
+      &lt;option&gt;Opera&lt;/option&gt;
+    &lt;/select&gt;
+  &lt;/p&gt;
+  &lt;p&gt;&lt;input id="btn" type="button" value="How many are selected?" /&gt;&lt;/p&gt;
+&lt;/form&gt;
+
+&lt;script&gt;
+function howMany(selectObject) {
+ var numberSelected = 0;
+ for (var i = 0; i &lt; selectObject.options.length; i++) {
+ if (selectObject.options[i].selected) {
+ numberSelected++;
+ }
+ }
+ return numberSelected;
+}
+
+var btn = document.getElementById('btn');
+btn.addEventListener('click', function() {
+ alert('Number of options selected: ' + howMany(document.selectForm.musicTypes));
+});
+&lt;/script&gt;
+
+</pre>
+
+<h2 dir="rtl" id="الحلقة_do...while"><code>الحلقة </code><code>do...while</code></h2>
+
+<p dir="rtl">الحلقة {{jsxref("statements/do...while", "do...while")}} لاتتوقف عن التكرار حتى يتم تحقق الشرط المحدد ب <code>false</code> . يوضح الشكل التالي التركيبة الاساسية للحلقة <code>do...while</code></p>
+
+<pre class="syntaxbox">do
+ statement
+while (condition);
+</pre>
+
+<p dir="rtl"><strong><code>statement</code></strong>: تنفذ مرة واحدة قبل أن تبدا عملية التحقق من الشرط. عند البدا بعملية التحقق، اذا كان الشرط <strong><code>(condition) </code></strong>يساوي <code>true</code>، تنفذ التعليمة البرمجية (statement) مرة اخرى. بعد انهاء التنفيذ، يتم التحقق مرة اخرى من الشرط. الى ان يصبح الشرط يساوي <code>false</code>، عندها يتوقف التنفيذ ويتم انتقال التحكم الى التعليمة البرمجية التي تلي <strong><code>do...while</code></strong>. لتنفيذ تعليمات برمجية متعددة، استخدم التعليمة بلوك ({ ... }).</p>
+
+<h3 dir="rtl" id="مثال_2"><strong>مثال</strong></h3>
+
+<p dir="rtl">في المثال التالي، الحلقة <strong><code>do</code></strong>، تنفذ مرة واحدة على الاقل وتستمر بالتكرار حتى يصبح <strong><code>i</code></strong> ليس أقل من 5.</p>
+
+<pre class="brush: js">var i = 0;
+do {
+ i += 1;
+ console.log(i);
+} while (i &lt; 5);</pre>
+
+<h2 dir="rtl" id="الحلقة_while"><code>الحلقة </code> <code>while</code></h2>
+
+<p dir="rtl">الحلقة {{jsxref("statements/while","while")}} ستستمر بتنفيذ التعليمة البرمجية المرتبطة بها طالما الشرط المحدد يساوي true. يوضح الشكل التالي التركيبة الاساسية للحلقة <strong><code>while</code></strong></p>
+
+<pre class="syntaxbox">while (condition)
+ statement
+</pre>
+
+<p dir="rtl">عندما سيصبح الشرط يساوي <code>false</code>، ستتوقف التعليمة البرمجية (<code>statement</code>) المرتبطة بالحلقة  عن التنفيذ وسينتقل التحكم الى التعليمة البرمجية التي تلي الحلقة <strong><code>while</code></strong>.</p>
+
+<p dir="rtl">يتم التحقق من شرط الاختبار قبل تنفيذ <strong><code> statement</code></strong>. كلما عاد الشرط ب <code>true</code>، ستنفذ <code>statement </code>ويتم الرجوع الى الشرط للتحقق منه مرة اخرى. عندما سيعود الشرط ب <code>false </code>سيتوقف التنفيذ وسينتقل التحكم الى التعليمة البرمجية التي تلي الحلقة <code>while</code>.  لتنفيذ تعليمات برمجية متعددة، استخدم التعليمة بلوك ({ ... }).</p>
+
+<h3 dir="rtl" id="المثال_الاول"><strong>المثال الاول</strong></h3>
+
+<p dir="rtl">الحلقة <code>while</code> ستستمر بالتكرار طالما <code>n </code>أقل من ثلاثة:</p>
+
+<pre class="brush: js">var n = 0;
+var x = 0;
+while (n &lt; 3) {
+ n++;
+ x += n;
+}
+</pre>
+
+<p dir="rtl">مع كل تكرار، ستقوم الحلقة بالزيادات على n وتضيف قيمته إلى x. لذالك  x و n ستمتلك القيم التالية:</p>
+
+<ul dir="rtl">
+ <li>بعد المرور الأول:    n = 1  و   x = 1</li>
+ <li>بعد المرور الثاني:  n = 2  و   x = 3</li>
+ <li>بعد المرور الثالث:  n = 3  و   x = 6</li>
+</ul>
+
+<p dir="rtl">بعد الانتهاء من المرور الثالث، الشرط <code>( n &lt; 3 </code>) لم يعد يساوي <code>true</code>، لذالك ستنتهي الحلقة.</p>
+
+<h3 dir="rtl" id="المثال_الثاني">المثال الثاني</h3>
+
+<p dir="rtl">لتجنب تكرار الحلقة الى ما لا نهاية. تأكد من أن الشرط في الحلقة، سيصبح في نهاية المطاف ب <code>false</code>، التعليمة البرمجية في الحلقة <code>while </code>التالية، لن تتوقف عن التنفيذ بسبب ان الشرط لن يصبح ب <code>false</code>:</p>
+
+<pre class="brush: js">while (true) {
+ console.log('Hello, world!');
+}</pre>
+
+<div class="warning" dir="rtl">
+<p><strong>تحذير</strong>: استمرار تكرار الحلقة الى ما لا نهاية سيتسبب في توقف المتصفحات عن العمل.</p>
+</div>
+
+<h2 dir="rtl" id="التعليمة_label"><code>التعليمة label </code></h2>
+
+<p dir="rtl">تستخدم التعليمة {{jsxref("statements/label","label")}}  لتوفير معرف <strong><code>(id)</code></strong> للتعليمة البرمجية المراد الرجوع اليها من موقع آخر في البرنامج. على سبيل المثال، يمكنك استخدام <code>label </code>لتحديد حلقة، ثم استخدام التعليمة <code><strong>break</strong> </code>او <code><strong>continue</strong> </code>للإشارة إلى ما إذا كان البرنامج ينبغي أن يوقف الحلقة أو الاستمرار في تنفيذها.</p>
+
+<p dir="rtl">التعبير الخاص بالتعليمة  <code>label </code>يشبه ما يلي:</p>
+
+<pre class="syntaxbox">label :
+ statement
+</pre>
+
+<p dir="rtl">قيمة <strong><code>label  </code></strong>يمكن ان تكون أي معرف جافاسكريبت باستثناء الكلمات المحجوزة. التعليمة البرمجية <strong><code>(statement)</code></strong> التي سيشار اليها من طرف <code>label </code>يمكن ان تكون اي تعليمة برمجية.</p>
+
+<h3 dir="rtl" id="مثال_3"><strong>مثال</strong></h3>
+
+<p dir="rtl">في هذا المثال، <code>label markLoop</code> يعرف الحلقة <code>while</code>.</p>
+
+<pre class="brush: js">markLoop:
+while (theMark == true) {
+ doSomething();
+}</pre>
+
+<div class="note" dir="rtl">
+<p>ملاحظة: لمزيد من التفاصيل حول التعليمة <a href="https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Instructions/label"><code>label</code></a>، راجع صفحة مرجع الجافا سكريبت</p>
+</div>
+
+<h2 dir="rtl" id="التعليمة_break"><code>التعليمة </code> <code>break</code></h2>
+
+<p dir="rtl">تستخدم التعليمة {{jsxref("statements/break","break")}} لانهاء الحلقة، او <strong><code>switch</code></strong>، أو بالتزامن مع االتعليمة <code>label</code>.</p>
+
+<ul dir="rtl">
+ <li>عند استخدام <code>break </code>من دون <code>label </code>ستقوم بانهاء الحلقة  (<strong><code>while ،do-while ،for</code></strong> او <strong><code>switch</code></strong>). وانتقال التحكم الى التعليمة البرمجية التالية.</li>
+ <li>عند استخدام <code>break </code>مع <code>label س</code>يتم انهاء تنفيذ التعليمة البرمجية المحددة من طرف <code>label</code></li>
+</ul>
+
+<p dir="rtl">يمكن التعبير عن  التعليمة <code><strong>break</strong> </code>من خلال طريقتين:</p>
+
+<pre class="syntaxbox">break;
+break <em>label</em>;
+</pre>
+
+<p dir="rtl">تستخدم الطريقة الأولى لانهاء الحلقة المتواجدة بها، او لانهاء <strong><code>switch</code></strong>. الطريقة الثانية لانهاء تنفيذ التعليمات التي تم تحديدها من قبل <code>label</code>.</p>
+
+<h3 dir="rtl" id="المثال_الاول_2"><strong>المثال الاول</strong></h3>
+
+<p dir="rtl">يقوم المثال التالي بالتكرار على عناصر المصفوفة، وبمجرد الوصول الى العنصر المحدد في الشرط وهو <code>theValue </code>سيتم انهاء الحلقة،</p>
+
+<pre class="brush: js">for (var i = 0; i &lt; a.length; i++) {
+ if (a[i] == theValue) {
+ break;
+ }
+}</pre>
+
+<h3 dir="rtl" id="المثال_الثاني_2"><strong>المثال الثاني</strong></h3>
+
+<p dir="rtl">المثال التالي، يبين كيفية استخدام التعليمة <code><strong>break</strong> </code>بكلا الطريقتين:</p>
+
+<pre class="brush: js">var x = 0;
+var z = 0;
+labelCancelLoops: while (true) {
+ console.log('Outer loops: ' + x);
+ x += 1;
+ z = 1;
+ while (true) {
+ console.log('Inner loops: ' + z);
+ z += 1;
+ if (z === 10 &amp;&amp; x === 10) {
+ break labelCancelLoops;
+ } else if (z === 10) {
+ break;
+ }
+ }
+}
+</pre>
+
+<h2 dir="rtl" id="التعليمة_continue"><code>التعليمة </code> <code>continue</code></h2>
+
+<p dir="rtl">يمكن استخدام التعليمة {{jsxref("statements/continue","continue")}} لاستئناف الحلقة <code><strong>while</strong>)</code> <strong><code>do-while</code> <code>،for</code></strong> ، مع <strong><code>labe</code></strong>)، بعد توقفها لغرض معين.</p>
+
+<ul dir="rtl">
+ <li>عند استخدام <code><strong>continue</strong> </code>من دون <code>label</code>، ستقوم بانهاء <strong>التكرار الحالي</strong> للحلقة <code><strong>while</strong>) <strong>do-while</strong></code>، او <strong><code>for</code></strong>)<strong> وتنتقل</strong> الى <strong>التكرار التالي</strong>. على النقيض من التعليمة <code>break</code>، التعليمة <code>continue </code><strong>لا تنهي</strong> تنفيذ الحلقة تماما. عند استخدامها مع الحلقة <code>while </code>فحلقة البرنامج ستعود إلى الشرط. وعند استخدامها مع الحلقة <code>for </code>فحلقة البرنامج ستعود إلى تعليمة الزيادة (increment-expression)</li>
+ <li>عند استخدام <code>continue</code> مع <code>label</code>، سيتم تطبيقها على الحلقة المحددة بواسطة <code>label</code>.</li>
+</ul>
+
+<p dir="rtl">يمكن التعبير عن  التعليمة <code>continue</code> من خلال طريقتين:</p>
+
+<pre class="syntaxbox">continue;
+continue <em>label</em>;
+</pre>
+
+<h3 dir="rtl" id="المثال_الاول_3"><strong>المثال الاول</strong></h3>
+
+<p dir="rtl">في المثال التالي، لدينا الحلقة <code>while </code>مع التعليمة <code>continue </code>التي ستنفذ حينما تصبح <strong><code>i</code></strong> تساوي 3. ولدينا n الذي سيحتوي على القيم التالية:  1, 3, 7 و 12.</p>
+
+<pre class="brush: js">var i = 0;
+var n = 0;
+while (i &lt; 5) {
+ i++;
+ if (i == 3) {
+ continue;
+ }
+ n += i;
+}
+</pre>
+
+<h3 dir="rtl" id="المثال_الثاني_3"><strong>المثال الثاني</strong></h3>
+
+<p dir="rtl">التعليمة <code>label checkiandj</code> تحتوي على التعليمة <code>label checkj</code>. عند مصادفة <code>continue </code>سيقوم البرنامج بانهاء التكرار الحالي ل <code>checkj </code>ويبدأ التكرار من جديد. وفي كل مرة يتم مصادفة <code>continue</code>، تستمر <code>checkj </code>بالتكرار حتى يعود الشرط ب <code>false</code>. عندما سيتم العودة ب <code>false</code>،  ما تبقى من التعليمة <code>checkiandj </code>سيكتمل، و <code>checkiandj </code>ستستمر بالتكرار حتى يعود الشرط ب <code>false</code>. عندما سيتم العودة ب <code>false</code>، سينتقل البرنامج الى التعليمة البرمجية التي تلي <code>checkiandj</code>.</p>
+
+<pre class="brush: js">var i = 0;
+var j = 10;
+checkiandj:
+ while (i &lt; 4) {
+ console.log(i);
+ i += 1;
+ checkj:
+ while (j &gt; 4) {
+ console.log(j);
+ j -= 1;
+ if ((j % 2) == 0) {
+ continue checkj;
+ }
+ console.log(j + ' is odd.');
+ }
+ console.log('i = ' + i);
+ console.log('j = ' + j);
+ }</pre>
+
+<p class="summary" dir="rtl">عموما: التعليمة <strong><code>break</code> </strong>تقوم بانهاء الحلقة نهائيا عندما يتم تحقق الشرط المحدد، فيما تقوم التعليمة <strong><code>continue</code> بتوقيف الحلقة للتحقق من</strong> الشرط المحدد، وعندما يتم تنفيذ الشرط، يتم استئناف الحلقة.</p>
+
+<h2 dir="rtl" id="التعليمة_for...in"><code>التعليمة </code> <code>for...in</code></h2>
+
+<p dir="rtl">تستخدم الحلقة {{jsxref("statements/for...in","for...in")}} للتكرار على جميع خصائص الكائن القابلة للتكرار <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Enumerability_and_ownership_of_properties">enumerable properties</a>.  مقابل كل خاصية مميزة، ستنفذ الجافا سكريبت تعليمات برمجية محددة. يوضح الشكل التالي التركيبة الاساسية للحلقة <strong><code>for...in</code></strong></p>
+
+<pre class="syntaxbox">for (variable in object) {
+ statements
+}
+</pre>
+
+<h3 dir="rtl" id="مثال_4"><strong>مثال</strong></h3>
+
+<p dir="rtl">الدالة التالية تتضمن كائن واسم الكائن كبارامترات لها. تقوم بالتكرار على كل خصائص الكائن وترجع سلسلة نصية بأسماء الخصائص والقيم الخاصة بها.</p>
+
+<pre class="brush: js">function dump_props(obj, obj_name) {
+ var result = '';
+ for (var i in obj) {
+ result += obj_name + '.' + i + ' = ' + obj[i] + '&lt;br&gt;';
+ }
+ result += '&lt;hr&gt;';
+ return result;
+}</pre>
+
+<p dir="rtl">بالنسبة للكائن <code>car</code> مع الخصائص <code>make</code> و <code>model</code>، الناتج سيكون على الشكل التالي:</p>
+
+<pre class="brush: js">car.make = Ford
+car.model = Mustang
+</pre>
+
+<h3 dir="rtl" id="for...in_و_المصفوفات">for...in و<strong> المصفوفات</strong></h3>
+
+<p dir="rtl">على الرغم من كونه مغريا استخدام الحلقة <strong><code>for...in</code></strong> للتكرار على عناصر المصفوفة {{jsxref("Array")}}  الا انها، يمكن أن تقوم بسلوك غير متوقع. في الواقع، الحلقة <strong><code>for...in</code></strong> ستقوم بإرجاع اسماء الخصائص المعرفة من قبل المستخدم بالإضافة إلى الفهارس الرقمية. فمثلا، إذا قمت بالتعديل على Array object، كإضافة خصائص او وظائف جديدة. فستقوم الحلقة <strong><code>for...in</code></strong> بالتكرار على هذه الخصائص او الوظائف بالإضافة إلى عناصر المصفوفة، وبالتالي فمن الأفضل استخدام الحلقة التقليدية {{jsxref("statements/for","for")}} لارجاع الفهارس الرقمية بشكل صحيح عند التكرار على المصفوفة.  يبين المثال التالي كيفية حصول ذالك.</p>
+
+<pre class="brush: js">var myArray = [0, 1, 2, , , 5];
+myArray.foo = "hello";
+
+for (var i in myArray) {
+ console.log(i); // Outputs 0, 1, 2, 5, hello.
+}
+
+for (var i = 0; i &lt; myArray.length; ++i) {
+ console.log(i); // Outputs 0, 1, 2, 3, 4, 5
+}</pre>
+
+<h2 dir="rtl" id="الحلقة_for...of"><code>الحلقة </code> <code>for...of</code></h2>
+
+<p dir="rtl">التعليمة {{jsxref("statements/for...of","for...of")}} نوع جديد من الحلقات تم إضافتها الى الإصدار السادس  من جافا سكربت ، وتستخدم للتكرار على العناصر الموجودة في أي مجموعة أو <a href="/en-US/docs/Web/JavaScript/Guide/iterable">iterable objects</a> (مثل {{jsxref("Array")}}, {{jsxref("Map")}}, {{jsxref("Set")}} والكائن {{jsxref("functions/arguments","arguments")}} الخ.), كما أن هذا الأسلوب يمكننا من تنفيذ تعليمة برمجية معينة على كل عنصر تم جلبه على حدة للتعديل على أي من خصائصه. يوضح الشكل التالي التركيبة الاساسية للحلقة<strong><code> for...of</code></strong></p>
+
+<pre class="syntaxbox">for (<em>variable</em> of <em>object</em>) {
+ <em>statement
+</em>}</pre>
+
+<p dir="rtl">المثال التالي، يوضح الفرق بين الحلقة <code><strong>for...of</strong></code> والحلقة  {{jsxref("statements/for...in","for...in")}} الحلقة <strong><code>for...in</code></strong> تقوم بارجاع اسماء الخصائص فيما الحلقة <code>for...of</code> تقوم بارجاع قيم الخصائص:</p>
+
+<pre class="brush:js">let arr = [3, 5, 7];
+arr.foo = 'hello';
+
+for (let i in arr) {
+ console.log(i); // logs "0", "1", "2", "foo"
+}
+
+for (let i of arr) {
+ console.log(i); // logs 3, 5, 7
+}
+</pre>
+</div>
+
+<p>{{PreviousNext("Web/JavaScript/Guide/Control_flow_and_error_handling", "Web/JavaScript/Guide/Functions")}}</p>
diff --git a/files/ar/web/javascript/guide/regular_expressions/index.html b/files/ar/web/javascript/guide/regular_expressions/index.html
new file mode 100644
index 0000000000..96928196f8
--- /dev/null
+++ b/files/ar/web/javascript/guide/regular_expressions/index.html
@@ -0,0 +1,813 @@
+---
+title: التعبيرات القياسية
+slug: Web/JavaScript/Guide/Regular_Expressions
+translation_of: Web/JavaScript/Guide/Regular_Expressions
+---
+<div>{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Text_formatting", "Web/JavaScript/Guide/Indexed_collections")}}</div>
+
+<p class="summary" dir="rtl">التعبيرات القياسية (Regular Expressions)، هي أنماط (patterns) تُستخدم لمطابقة مجموعة من الأحرف في السلاسل النصية. التعبيرات القياسية في جافاسكربت كائنات أيضا. تُستخدم هذه الأنماط مع الوظائف {{jsxref("RegExp.exec", "exec")}} و{{jsxref("RegExp.test", "test")}} للكائن {{jsxref("RegExp")}}، ومع الوظائف {{jsxref("String.match", "match")}}، و {{jsxref("String.replace", "replace")}}، و{{jsxref("String.search", "search")}} و {{jsxref("String.split", "split")}} للكائن {{jsxref("String")}}. يتناول هذا الفصل  تعبيرات جافاسكربت القياسية.</p>
+
+<div id="mdnDiv" style="font-size: 16px;">
+<h2 id="انشاء_تعبير_قياسي_او_ريجكس" style="font-family: tahoma;">انشاء تعبير قياسي او ريجكس</h2>
+
+<p style="font-family: tahoma;">يمكنك انشاء ريجكس من خلال احدى الطرق التالية:</p>
+
+<p dir="rtl" style="font-family: tahoma;">الطريقة الاولى، باستخدام التعبير القياسى الحرفي regular expression literal، ويتضمن الباترن pattern بين سلاشين، كما يلي:</p>
+
+<pre class="brush: js line-numbers language-js" dir="rtl" style="font-family: tahoma;"><code class="language-js"><span class="keyword token">var</span> re <span class="operator token">=</span> <span class="regex token">/ab+c/</span><span class="punctuation token">;</span></code></pre>
+
+<p dir="rtl" style="font-family: tahoma;">يقوم ال Regular expression literals بتجهيز التعبير القياسي عند تحميل السكريبت. شرط ان يظل التعبير القياسي ثابتا، في هذه الحالة، استخدام هذا الشكل المختصر يمكن أن يحسن من الأداء.</p>
+
+<p dir="rtl" style="font-family: tahoma;">الطريقة الثانية، من خلال استدعاء <code>constructor</code> الكائن <code>RegExp</code>، كما يلي:</p>
+
+<pre class="brush: js line-numbers language-js" dir="rtl" style="font-family: tahoma;"><code class="language-js"><span class="keyword token">var</span> re <span class="operator token">=</span> <span class="keyword token">new</span> <span class="class-name token">RegExp</span><span class="punctuation token">(</span><span class="string token">'ab+c'</span><span class="punctuation token">)</span><span class="punctuation token">;</span></code></pre>
+
+<p dir="rtl" style="font-family: tahoma;">استخدام ال constructor، يقلل من وقت تشغيل الريجكس. إسْتخدِم ال  constructor عندما تريد ان يكون الريجكس قابلا للتغيير، او في حالة عدم علمك بالريجكس الذي ستحصل عليه من طرف اخر. كحقل المدخلات مثلا.</p>
+
+<h2 dir="rtl" id="انشاء_باترن_الريجكس" style="font-family: tahoma;">انشاء باترن الريجكس</h2>
+
+<p dir="rtl" style="font-family: tahoma;">يتكون الباترن البسيط اما من رموز عادية، مثل <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/abc/</code>، او خليط من الرموز العادية والرموز الخاصة، مثل <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/ab*c/</code> او <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/Chapter (\d+)\.\d*/</code>. يحتوي هذا الباترن على اقواس هلالية، هذه الاقواس ستقوم بدور ذاكرة الجهاز، بحيث ستقوم بتخزين قيمة المطابقة الناتجة عن هذا الجزء من الباترن وفهرستها ليتم استدعاؤها لاحقا. للمزيد من التفاصيل حول <a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#Using_parenthesized_substring_matches">مطابقة السلسلة النصية الجزئية بين قوسين</a>.</p>
+
+<h3 class="highlight-spanned" dir="rtl" id="استخدام_الباتر_البسيط" style="font-family: tahoma;"><span class="highlight-span">استخدام الباتر البسيط</span></h3>
+
+<p dir="rtl" style="font-family: tahoma;">تتكون الباترنز البسيطة، من رموز صريحة ومباشرة، تصف فيها ما تريد مقارنته مباشرة. مثلا، الباترن <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/abc/</code> سيطابق مجموعة من الرموز في سلسلة نصية، شرط تواجد هذه الرموز جنبا الى جنب بشكل مرتب. لذالك، ستنجح المطابقة في هذه السلسلة النصية <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"Hi, do you know your abc's?"</code>  وكذالك في السلسلة النصية التالية <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"The latest airplane designs evolved from slabcraft."</code>، نجحت المطابقة في كلتا الحالتين لان السلسلة الفرعية <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'abc'</code> هي المطلوبة. وهذا لايتطابق مع هذه السلسلة النصية <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'Grab crab'</code> لانها تحتوي على سلسلة نصية غير تلك المطلوبة  <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'ab c'</code>.</p>
+
+<h3 class="highlight-spanned" dir="rtl" id="استخدام_الرموز_الخاصة" style="font-family: tahoma;"><span class="highlight-span">استخدام الرموز الخاصة</span></h3>
+
+<p dir="rtl" style="font-family: tahoma;">عندما يتطلب الامر عملية بحث، أكثر من مطابقة صريحة ومباشرة، مثل البحث عن واحد او اكثر من ال <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'b'</code>، او البحث عن مسافة فارغة، عندها سيتوجب على الباترن ان يحتوي على الرموز الخاصة. مثلا، الباترن <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/ab*c/</code> سيطابق مجموعة من الرموز، حيث ستكون <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'a'</code> متبوعة بصفر او اكثر من ال <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'b'</code>، الرمز الخاص نجمة <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">*</code> يرصد وجود العنصر المطلوب صفر او اكثر من المرات، متبوعا مباشرة ب <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'c'</code>. بعد فحص السلسلة النصية <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"cbbabbbbcdebc,"</code> قام الباترن بمطابقة السلسلة الجزئية <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'abbbbc'</code>.</p>
+
+<p style="font-family: tahoma;">يحتوي الجدول التالي على قائمة مكتملة من رموز الريجكس الخاصة وشرحها.</p>
+
+<table class="standard-table" style="font-family: tahoma;">
+ <caption>
+ <p>الرموز الخاصة بالريجكس.</p>
+ </caption>
+ <thead>
+ <tr>
+ <th dir="rtl" scope="col">الرمز</th>
+ <th dir="rtl" scope="col">شرح الاستخدام</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td dir="rtl"><code><strong><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-backslash" id="special-backslash" name="special-backslash">\</a></strong></code></td>
+ <td>
+ <p dir="rtl"> </p>
+
+ <p dir="rtl">مطابقات وفقا للقواعد التالية:<br>
+ <br>
+ الباكسلاش الذي يسبق الرمز العادي يشير الى ان الرمز التالي هو رمز من الرموز الخاصة ولا ينبغي تفسيره حرفيا. مثلا <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'b'</code> من دون باكسلاش<code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;"> \ </code>، ستطابق <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'b'</code> بحروف صغيرة. لكن <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">\b</code> في حد داتها لا تطابق اي حرف، لانها من الرموز الخاصة وتعني حصر او تحديد حدود للرموز المطلوبة <a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-word-boundary" title="#special-word-boundary">word boundary character</a>.<br>
+ <br>
+ الباكسلاش الذي يسبق الرموز الخاصة، يشير الى ان الرمز التالي هو ليس من الرموز الخاصة وينبغي تفسيره حرفيا. مثلا، الباترن <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/a*/</code> يحتوي على احد الرموز الخاصة <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">*</code> وهو لمطابقة صفر او اكثر من a، بعد اضافة الباكسلاش له، كما في  الباترن <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/a\*/</code> تم الغاء رمزيتة، وبالتالي اصبح الباترن  <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/a\*/</code> يطابق السلسلة الحرفية <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'a*'</code>.<br>
+ <br>
+ لا تنس تهريب الباكسلاش نفسه، بينما تستخدم الكونستراكتر <code>RegExp( "\\s", "g" )</code>، لانه يعمل ايضا، كمهرب للرموز الخاصة في السلسلة النصية.</p>
+
+ <p dir="rtl"> </p>
+ </td>
+ </tr>
+ <tr>
+ <td><code><strong><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-caret" id="special-caret" name="special-caret">^</a></strong></code></td>
+ <td>
+ <p dir="rtl"> </p>
+
+ <p dir="rtl">مطابقة بداية المدخلات. ادا كان البند <code>multiline</code> ب <code>true</code>، اي ان <strong><code>m</code></strong> موجودة في الباترن <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/^a/gm</code> سيبدا البحث عن المطابقة في بداية اي سطر جديد.<br>
+ <br>
+ مثلا الباترن  <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/^a/gm</code>  سيطابق اثنان من <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'a'</code>، في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"a special char\nacter"</code>، لاحظ وجود السطر الجديد <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">\n</code> في السلسلة النصية.<br>
+ <br>
+ الرمز <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">^</code> سيصبح له معنى اخر عندما يستخدم مع المجموعة. <a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-negated-character-set" title="#special-negated-character-set">توجه الى مجموعة الرموز</a> لمعرفة المزيد من التفاصيل.</p>
+
+ <p dir="rtl"> </p>
+ </td>
+ </tr>
+ <tr>
+ <td><strong><code><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-dollar" id="special-dollar" name="special-dollar">$</a></code></strong></td>
+ <td>
+ <p dir="rtl"> </p>
+
+ <p dir="rtl">مطابقة نهاية المدخلات. ادا كان البند <code>multiline</code>  ب <code>true</code>، اي ان <strong><code>m</code></strong> موجودة في الباترن <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/r$/gm</code> سيبدا البحث عن المطابقة في نهاية اي سطر جديد.<br>
+ <br>
+ مثلا الباترن <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/r$/gm</code> سيطابق اثنان من <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'r'</code>، في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"a special char\nacter"</code>، لاحظ وجود السطر الجديد <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">\n</code> في السلسلة النصية.</p>
+ </td>
+ </tr>
+ <tr>
+ <td><strong><code><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-asterisk" id="special-asterisk" name="special-asterisk">*</a></code></strong></td>
+ <td>
+ <p dir="rtl"> </p>
+
+ <p dir="rtl">مطابقة التعبير الذي سيسبق الرمز <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">*</code> صفر او اكثر من المرات، وهو مكافئ ل <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">{0,}</code>.</p>
+
+ <p dir="rtl">مثلا، <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/bo*/</code> سيطابق <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'boooo'</code> في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"A ghost booooed"</code> و <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'b'</code> في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"A bird warbled"</code> لكن لا شئ بالنسبة ل <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"A goat grunted"</code>.</p>
+
+ <p dir="rtl"> </p>
+ </td>
+ </tr>
+ <tr>
+ <td><strong><code><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-plus" id="special-plus" name="special-plus">+</a></code></strong></td>
+ <td>
+ <p dir="rtl"> </p>
+
+ <p dir="rtl">مطابقة التعبير الذي سيسبق الرمز <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">+</code> مرة واحدة على الاقل او اكثر من المرات، وهو مكافئ ل <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">{1,}</code>.</p>
+
+ <p dir="rtl">مثلا، <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/a+/</code> ستطابق <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'a'</code> في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"candy"</code> ومجموعة ال  <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'a'</code> في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"caaaaaaandy"</code> لكن لا شئ بالنسبة ل <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"cndy"</code>.</p>
+
+ <p dir="rtl"> </p>
+ </td>
+ </tr>
+ <tr>
+ <td><strong><code><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-questionmark" id="special-questionmark" name="special-questionmark">?</a></code></strong></td>
+ <td dir="rtl">
+ <p> </p>
+
+ <p>مطابقة التعبير الذي سيسبق الرمز <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">?</code> صفر او واحد من المرات، وهو مكافئ ل <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">{0,1}</code>.<br>
+ <br>
+ مثلا، الباترن <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/e?le?/</code> سيطابق <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'el'</code> في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"angel"</code> و <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'le'</code> في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"angle"</code> وكذالك <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'l'</code> في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"also"</code>.<br>
+ <br>
+ اذا استخدم الرمز <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">?</code> مباشرة بعد احد هذه المحددات <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">*</code>، <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">+</code>، <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">?</code>، او <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">{}</code>، سيؤثر على سلوكها الافتراضي، فيجعلها<strong> غير</strong> <strong>طماعة</strong> <code>non-greedy</code> او<strong> غير</strong> <strong>جشعة</strong> (تطابق عدد محدود من الاحرف) بخلاف سلوكها الافتراضي، وهو التصرف <strong>بجشع</strong> (تطابق اكثر عدد ممكن من الاحرف)، مثلا، باستخدام الباترن الجشع، <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/\d+/</code> ستطابق كل السلسلة <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"123"</code> في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"123abc"</code> . اما باستخدام الباترن الغير جشع، <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/\d+?/</code> وعلى نفس السلسلة ستطابق <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"1"</code> فقط.<br>
+ <br>
+ مثال اكثر دقة حول <code>non-greedy</code> و <code>greedy</code>، فرضا، نريد مطابقة تاجات الاتش تي ام ال، باستخدام الباترن الجشع <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;"> /&lt;(.+)&gt;/g</code> سيتم مطابقة كل السلسلة النصية <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"&lt;div&gt;fCh&lt;p&gt;elema&lt;/p&gt;lCh&lt;/div&gt;"</code>، اما باستخدام الباترن الغير شجع <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;"> /&lt;(.+?)&gt;/g</code> فسيتم مطابقة التاجات ومحتواها فقط. بمعنى، ان العملية ستسير بالشكل التالي: مع بداية البحث، عندما سيجد التاج الاول <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'&lt;div&gt;'</code> سييكتفي به ولا يطمع في ما يليه، ثم ينتقل مباشرة نحو الهدف الثاني <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'&lt;p&gt;'</code> فيطابقه ويكتفي به دون ان يطمع في ما يليه، وهكذا. مع العلم ان الباترن عبارة عن البحث <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">(.+?)</code> في كل شئ، لكن من دون طمع.<br>
+ الرمز <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">?</code> يصبح له معنى اخر مع <em><code>lookahead assertions</code></em>، النظر الى الامام <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">x(?=y)</code> ومنع النظر الى الامام <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">x(?!y)</code> سيتم شرحها في هذا الجدول.</p>
+
+ <p> </p>
+ </td>
+ </tr>
+ <tr>
+ <td><strong><code><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-dot" id="special-dot" name="special-dot">.</a></code></strong></td>
+ <td>
+ <p> </p>
+
+ <p>النقطة الكسرية تطابق اي شئ، ما عدا السطر الجديد</p>
+
+ <p dir="rtl">مثلا، <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/.n/</code> ستطابق <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'an'</code> و <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'on'</code> في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"nay, an apple is on the tree"</code>, لكن ليس <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'nay'</code>.</p>
+
+ <p dir="rtl"> </p>
+ </td>
+ </tr>
+ <tr>
+ <td><strong><code><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-capturing-parentheses" id="special-capturing-parentheses" name="special-capturing-parentheses">(x)</a></code></strong></td>
+ <td>
+ <p dir="rtl"> </p>
+
+ <p dir="rtl">مطابقة <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'x'</code> وانشاء فهرسة جزئية. كما يبين المثال التالى. اقواس المجموعة المفهرسة تسمى <code><em>capturing parentheses</em></code>.<br>
+ <br>
+ مثلا،<code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">'(foo)'</code> و <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">'(bar)'</code> في الباترن <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/(foo) (bar) \1 \2/</code> تطابق وتفهرس الكلمة الاولى والكلمة الثانية في السلسلة الحرفية <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"foo bar foo bar"</code>. والفهرسة الرقمية <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">\1</code> و <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">\2</code>  تولد الكلمة الثالثة والكلمة الرابعة بناءا على الاقواس المحيطة بكل منهما. تذكر ان هذه الفهرسة الرقمية تستخدم داخل الباترن فقط. فيما تستخدم المتغيرات السحررية <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">$1</code>, <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">$2</code>, ..., <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">$n</code> خارج الباترن، وتستخدم في عملية الاستبدال فقط، مثلا، <code>'bar foo'.replace(/(...) (...)/, '$2 $1')</code>.  <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">$&amp;</code> يطابق هذا المتغير السحري <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">$&amp;</code> السلسلة النصية بالكامل، او بمعنى اصح، ينقل ناتج الباترن بالكامل.</p>
+
+ <p dir="rtl"> </p>
+ </td>
+ </tr>
+ <tr>
+ <td dir="rtl"><strong><code><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-non-capturing-parentheses" id="special-non-capturing-parentheses" name="special-non-capturing-parentheses">(x:?)</a></code></strong></td>
+ <td dir="rtl">
+ <p> </p>
+
+ <p>مطابقة ال <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'x'</code> لكن دون انشاء جزئية مفهرسة، اقواس المجموعة هنا تسمى <code><em>non-capturing parentheses</em></code></p>
+
+ <p>انشاء جزئية مفهرسة وعدم استخدامها، يبطئ من سرعة محرك الريجكس، لانه يتسبب له في عمل زائد، يمكنك جعل محرك الريجكس اسرع قليلا باستخدام <code><em>non-capturing</em></code>.</p>
+
+ <p>علامة الاستفهام والنقطتين بعد قوس الافتتاح هما من الرموز الخاصة، استخدامهما جنبا الى جنب يخبر محرك الريجكس بان هذه المجموعة لا ينبغي ان تعامل كجزئية مفهرسة. وبالتالي لا يمكن، استدعاء المطابقة من خلال الفهرسة الرقمية<code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">\1...</code> او عناصر المصفوفة <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">[1]...</code> او اعادة استخدام المطابقة من خلال المتغيرات السحرية <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">$1...$9</code>.</p>
+
+ <p> </p>
+ </td>
+ </tr>
+ <tr>
+ <td><strong><code><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-lookahead" id="special-lookahead" name="special-lookahead">=</a>?</code></strong></td>
+ <td>
+ <p dir="rtl"> </p>
+
+ <p dir="rtl">مطابقة ال <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'x'</code> فقط اذا كانت <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'x'</code> متبوعة ب <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'y'</code>. وهذا يسمى النظر الى الامام<code> <em>lookahead</em></code>.</p>
+
+ <p dir="rtl">مثلا، <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/Jack(?=Sprat)/</code> سيطابق <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'Jack'</code> فقط اذا كان متبوعا ب <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'Sprat'</code>. وكذالك بالنسبة ل <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/Jack(?=Sprat|Frost)/</code> سيطابق <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'Jack'</code> فقط اذا كان متبوعا ب <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'Sprat'</code> او <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'Frost'</code>. ومع ذالك، لا <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'Sprat'</code> ولا <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'Frost'</code> جزء من ناتج المطابقة.</p>
+
+ <p dir="rtl"> </p>
+ </td>
+ </tr>
+ <tr>
+ <td><strong><code>!?</code></strong></td>
+ <td>
+ <p dir="rtl"> </p>
+
+ <p dir="rtl">مطابقة ال <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'x'</code> فقط اذا كانت <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'x'</code> غير متبوعة ب <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'y'</code>. وهذا يسمى منع او ابطال النظر الى الامام <code><em>negated lookahead</em></code>.</p>
+
+ <p dir="rtl">مثلا، <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/\d+(?!\.)/</code> سيطابق عدد فقط اذا كان غير متبوعا بفاصلة كسرية. الريجكس <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/\d+(?!\.)/.exec("3.141")</code> سيطابق <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'141'</code> لكن لن يطابق <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'3.141'</code>.</p>
+
+ <p dir="rtl"> </p>
+ </td>
+ </tr>
+ <tr>
+ <td><strong><code><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-or" id="special-or" name="special-or">x|y</a></code></strong></td>
+ <td>
+ <p dir="rtl"> </p>
+
+ <p dir="rtl">مطابقة <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'x'</code> أو <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'y'</code>.</p>
+
+ <p dir="rtl">مثلا، <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/green|red/</code> سيطابق <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'green'</code> في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"green apple"</code> و <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'red'</code> في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"red apple."</code>.</p>
+
+ <p dir="rtl"> </p>
+ </td>
+ </tr>
+ <tr>
+ <td><strong><code><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-quantifier" id="special-quantifier" name="special-quantifier">{n}</a></code></strong></td>
+ <td dir="rtl">
+ <p> </p>
+
+ <p>مطابقة n تحديدا، بناءا على التعبير الذي سيسبقه. n يجب ان يكون عددا صحيحا.<br>
+ <br>
+ مثلا، <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/a{2}/</code> لن يطابق <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'a'</code>في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"candy,"</code> لكنه سيطابق جميع ال a في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"caandy,"</code> كما سيطابق اثنان من ال a الاولى في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"caaandy."</code>.</p>
+
+ <p> </p>
+ </td>
+ </tr>
+ <tr>
+ <td><strong><code><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-quantifier" id="special-quantifier" name="special-quantifier">{n,}</a></code></strong></td>
+ <td>
+ <p dir="rtl"> </p>
+
+ <p dir="rtl">مطابقة n او اكثر، بناءا على التعبير الذي سيسبقه. n يجب ان يكون عددا صحيحا.</p>
+
+ <p dir="rtl">مثلا، <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/a{2,}/</code> سيطابق <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"aa"</code> ، <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"aaaa"</code> و <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"aaaaa"</code> لكن ليس <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"a"</code>.</p>
+
+ <p dir="rtl"> </p>
+ </td>
+ </tr>
+ <tr>
+ <td><strong><code><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-quantifier-range" id="special-quantifier-range" name="special-quantifier-range">{n,m}</a></code></strong></td>
+ <td>
+ <p dir="rtl"> </p>
+
+ <p dir="rtl">حيث ان <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">n</code> و <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">m</code> من الاعداد الصحيحة الموجبة، و <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">n &lt;= m</code>. فستكون المطابقة من <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">n</code> الى <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">m</code>، بناءا على التعبير الذي سيسبقها.</p>
+
+ <p dir="rtl">مثلا، <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/a{1,3}/</code> لن يطابق شئ في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"cndy"</code> لكنه سيطابق <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'a'</code> في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"candy,"</code> وكذاك اثنان من ال <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'a'</code> الاولى في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"caandy,"</code> وايضا الثلاثة <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"a"</code> الاولى في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"caaaaaaandy"</code>. لاحظ عند مطابقة <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"caaaaaaandy"</code> تم مطابقة <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"aaa"</code> فقط، بالرغم من احتواء السلسة النصية على اكثر من ذالك.</p>
+
+ <p dir="rtl"> </p>
+ </td>
+ </tr>
+ <tr>
+ <td><strong><code><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-character-set" id="special-character-set" name="special-character-set">[xyz]</a></code></strong></td>
+ <td dir="rtl">
+ <p> </p>
+
+ <p>المجموعة، او مجموعة الرموز، هذا النوع من الباترن يطابق اي رموز داخل الاقواس المعقوفة، بما فيها المهربات المتتالية <a href="https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Values,_variables,_and_literals#Unicode_escape_sequences" title="https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Values,_variables,_and_literals#Unicode_escape_sequences">escape sequences</a>. الرموز الخاصة مثل النقطة (<code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">.</code>) والنجمة (<code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">*</code>) تصبح رموز عادية شانها شان اي حرف في سلسلة نصية، لذالك فهي لا تحتاج لباكسلاش. يمكنك تحديد منظم الرموز وفصله بشرطة، كما يبين المثال التالي:<br>
+ <br>
+ الباترن<code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;"> [a-d]</code> سيطابق نفس ما سيطابقه الباترن <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">[abcd]</code> سيطابقان <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'b'</code> في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"brisket"</code> و <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'c'</code> في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"city"</code>. وكذالك بالنسبة للباترن <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/[a-z.]+/</code> و <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/[\w.]+/</code> بامكانهما مطابقة كامل السلسلة النصية <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"test.i.ng"</code>.</p>
+
+ <p> </p>
+ </td>
+ </tr>
+ <tr>
+ <td><strong><code><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-negated-character-set" id="special-negated-character-set" name="special-negated-character-set">[xyz^</a><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-negated-character-set" name="special-negated-character-set">]</a></code></strong></td>
+ <td>
+ <p dir="rtl"> </p>
+
+ <p dir="rtl">منع مجموعة من الرموز او رموز معينة. سيتم مطابقة اي شئ ما عد ما ورد داخل الاقواس المعقوفة، يمكنك تحديد منظم الرموز وفصله بشرطة، جميع ما يمكن استخدامه في المجموعة او مجموعة الرموز العادية يمكن استخدامه هنا.</p>
+
+ <p dir="rtl">مثلا، الباترن <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">[^abc]</code> هو نفسه <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">[^a-c]</code>. سيطابقان <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'r'</code> في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"brisket"</code> و <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'h'</code> في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"chop."</code></p>
+
+ <p dir="rtl"> </p>
+ </td>
+ </tr>
+ <tr>
+ <td><strong><code><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-backspace" id="special-backspace" name="special-backspace">[b\</a><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-backspace" name="special-backspace">]</a></code></strong></td>
+ <td dir="rtl">
+ <p> </p>
+
+ <p>سيطابق backspace (U+0008). اذا كنت ترغب بمطابقة الرمز النصي: رجوع الى الخلف literal backspace character. فمن الضروري استخدام الاقواس المعقوفة، حتى لا تتعارض مع <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">\b</code>.</p>
+
+ <p> </p>
+ </td>
+ </tr>
+ <tr>
+ <td><strong><code><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-word-boundary" id="special-word-boundary" name="special-word-boundary">b\</a></code></strong></td>
+ <td>
+ <p dir="rtl"> </p>
+
+ <p dir="rtl">مطابقة حدود الكلمة <em><code>word boundary</code></em>.</p>
+
+ <p dir="rtl"><code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">\b</code>، ستطابق الكلمة التي لايسبقها ولا يليها اي من، ما ورد في هذه المجموعة <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">[A-Za-z0-9_]</code> او في مثيلتها <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">\w</code>، بمعنى ادق، ستقبل بوجود المسافة الفارغة والرموز النصية الخاصة مثل <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"&amp;=)é'?*-"</code> ، اي، كل ما يمكن ان ينتج عن هذه المجموعة <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">[^A-Za-z0-9_]</code> او عن مثيلتها <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">\W</code>، اما من قبل او من بعد المطابقة، او من كلا الجانبين، او ان تكون في بداية السلسلة او نهايتها. لاحظ ان ال <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">\b</code> ليست جزءا من المطابقة. بل للدلالة فقط. وايضا لا تتعارض مع <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">[\b]</code>.</p>
+
+ <p dir="rtl">امثلة مختلفة:<br>
+ <br>
+ <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/\bm/</code> ستطابق <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'m'</code> في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"moon"</code>.<br>
+ <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/oo\b/</code> لن تطابق <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'oo'</code> في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"moon"</code> لان <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'oo'</code> متبوعة بالكلمة الرمزية <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'n'</code>.<br>
+ <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/oon\b/</code> ستطابق <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'oon'</code> في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"moon"</code>، لان <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'oon'</code> هو نهاية السلسلة النصية، وبالتالي ليست متبوعة باية كلمة رمزية.<br>
+ <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/\w\b\w/</code> لن يطابق اي شئ، لان <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">\w</code> لايمكنها ابدا ان تكون متبوعة ب <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">\b</code> و <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">\w</code>.</p>
+
+ <div class="note" dir="rtl">
+ <p><strong>ملاحظة:</strong> محرك الريجكس في الجافاسكريبت حدد بالتدقيق <a class="external external-icon" href="http://www.ecma-international.org/ecma-262/5.1/#sec-15.10.2.6" rel="noopener">مجموعة الرموز</a> على ان تكون <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"كلمات"</code> رمزية. أي حرف ليس في تلك المجموعة يعتبر كلمة مكسورة. هذه المجموعة من الأحرف محدودة إلى حد ما: وهي تتألف فقط من الأبجدية الرومانية في كلتا الحروف الصغيرة والحروف الكبيرة، والاعداد العشرية، والرمز underscore. الحروف المعلمة مثل <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"é"</code> او <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"ü"</code> ، لسوء الحظ عوملت ككلمات مكسورة.</p>
+
+ <p> </p>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <td><strong><code><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-non-word-boundary" id="special-non-word-boundary" name="special-non-word-boundary">B\</a></code></strong></td>
+ <td>
+ <p dir="rtl"> </p>
+
+ <p dir="rtl">ال <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">non-word boundary</code><code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">\B</code>. عكس ما يمكن لل <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">\b</code> ان تقوم به.</p>
+
+ <p dir="rtl">مثلا، <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/\B../</code> ستطابق <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'oo'</code> في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"noonday"</code>، <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/y\B./</code> ستطابق <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'ye'</code> في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"possibly yesterday"</code>.</p>
+
+ <p dir="rtl"> </p>
+ </td>
+ </tr>
+ <tr>
+ <td><strong><code><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-control" id="special-control" name="special-control">cX\</a></code></strong></td>
+ <td>
+ <p dir="rtl"> </p>
+
+ <p dir="rtl">حيث ان <em>X</em> هو منظم الرموز من A الى Z. يطابق رمز عنصر التحكم في سلسلة نصية. مثلا،</p>
+
+ <p dir="rtl">مثلا، <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/\cM/</code> سيطابق control-M (U+000D) في السلسلة النصية.</p>
+
+ <p dir="rtl"> </p>
+ </td>
+ </tr>
+ <tr>
+ <td><strong><code><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-digit" id="special-digit" name="special-digit">d\</a></code></strong></td>
+ <td>
+ <p dir="rtl"> </p>
+
+ <p dir="rtl">مطابقة الاعداد. ويكافئ الباترن <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">[0-9]</code>.</p>
+
+ <p dir="rtl">مثلا، <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/\d/</code> او <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/[0-9]/</code> ستطابق <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'2'</code> في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"B2 is the suite number."</code>.</p>
+
+ <p dir="rtl"> </p>
+ </td>
+ </tr>
+ <tr>
+ <td><strong><code><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-non-digit" id="special-non-digit" name="special-non-digit">D\</a></code></strong></td>
+ <td>
+ <p> </p>
+
+ <p>مطابقة كل شئ ما عدا الاعداد. ويكافئ الباترن <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">[^0-9]</code>.</p>
+
+ <p dir="rtl">مثلا، <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/\D/</code> او <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/[^0-9]/</code> سيطابق <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'B'</code> في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"B2 is the suite number."</code>.</p>
+
+ <p dir="rtl"> </p>
+ </td>
+ </tr>
+ <tr>
+ <td><code><strong><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-form-feed" id="special-form-feed" name="special-form-feed">f\</a></strong></code></td>
+ <td>سيطابق نموذج التلقيم form feed (U+000C).</td>
+ </tr>
+ <tr>
+ <td><strong><code><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-line-feed" id="special-line-feed" name="special-line-feed">n\</a></code></strong></td>
+ <td>سيطابق سطر التلقيم line feed (U+000A).</td>
+ </tr>
+ <tr>
+ <td><strong><code><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-carriage-return" id="special-carriage-return" name="special-carriage-return">r\</a></code></strong></td>
+ <td>
+ <p>سيطابق carriage return (U+000D).</p>
+ </td>
+ </tr>
+ <tr>
+ <td><strong><code><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-white-space" id="special-white-space" name="special-white-space">s\</a></code></strong></td>
+ <td>
+ <p> </p>
+
+ <p>مطابقة رمز المسافة الفارغة، بما في ذالك المسافة، التاب، نمودج التلقيم، سطر التلقيم، ويكافئ <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">[ \f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]</code>.</p>
+
+ <p>مثلا، <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/\s\w*/</code> سيطابق <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">' bar'</code> في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"foo bar."</code></p>
+
+ <p> </p>
+ </td>
+ </tr>
+ <tr>
+ <td><strong><code><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-non-white-space" id="special-non-white-space" name="special-non-white-space">S\</a></code></strong></td>
+ <td>
+ <p> </p>
+
+ <p>مطابقة اي شئ ما عدا رمز المسافة الفارغة، ويكافئ <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">[^ \f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]</code>.</p>
+
+ <p>مثلا، <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/\S*/</code> سيطابق <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'foo'</code> في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"foo bar."</code></p>
+
+ <p> </p>
+ </td>
+ </tr>
+ <tr>
+ <td><strong><code><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-tab" id="special-tab" name="special-tab">t\</a></code></strong></td>
+ <td>سيطابق tab (U+0009).</td>
+ </tr>
+ <tr>
+ <td><strong><code><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-vertical-tab" id="special-vertical-tab" name="special-vertical-tab">v\</a></code></strong></td>
+ <td>
+ <p>سيطابق vertical tab (U+000B).</p>
+ </td>
+ </tr>
+ <tr>
+ <td><strong><code><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-word" id="special-word" name="special-word">w\</a></code></strong></td>
+ <td>
+ <p> </p>
+
+ <p>مطابقة الحروف الابجدية بما في ذالك ال underscore. ويكافي <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">[A-Za-z0-9_]</code>.</p>
+
+ <p>مثلا، <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/\w/</code> سيطابق <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'a'</code>في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"apple,"</code> و <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'5'</code> في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"$5.28,"</code> و <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'3'</code> في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"3D."</code></p>
+ </td>
+ </tr>
+ <tr>
+ <td><strong><code><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-non-word" id="special-non-word" name="special-non-word">W\</a></code></strong></td>
+ <td>
+ <p> </p>
+
+ <p>مطابقة اي شئ غير الحروف الابجدية والاندرسكور، ويكافئ <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">[^A-Za-z0-9_]</code>.</p>
+
+ <p>مثلا، <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/\W/</code> او <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/[^A-Za-z0-9_]/</code> سيطابق <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'%'</code> في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"50%."</code>.</p>
+
+ <p> </p>
+ </td>
+ </tr>
+ <tr>
+ <td><strong><code><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-backreference" id="special-backreference" name="special-backreference">n\</a></code></strong></td>
+ <td>
+ <p> </p>
+
+ <p>حيث ان <em>n</em> عدد صحيح موجب، سيشير الى المجموعة المفهرسة <em>capturing parentheses</em> .</p>
+
+ <p>مثلا، <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/apple(,)\sorange\1/</code> سيطابق <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'apple, orange,'</code> في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"apple, orange, cherry, peach."</code>.</p>
+
+ <p> </p>
+ </td>
+ </tr>
+ <tr>
+ <td><strong><code><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-null" id="special-null" name="special-null">0\</a></code></strong></td>
+ <td>
+ <p> </p>
+
+ <p>مطابقة الرمز NULL (U+0000). لا تتبع هذا برقم آخر، بسبب ان <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">\0&lt;digits&gt;</code> هو <a href="https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Values,_variables,_and_literals#Unicode_escape_sequences" title="https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Values,_variables,_and_literals#Unicode_escape_sequences">تسلسل التهريب الثماني</a> استخدم <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">\x00</code> بدلا منه.</p>
+
+ <p> </p>
+ </td>
+ </tr>
+ <tr>
+ <td><strong><code><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-hex-escape" id="special-hex-escape" name="special-hex-escape">xhh\</a></code></strong></td>
+ <td>مطابقة الرمز مع الكود hh (two hexadecimal digits).</td>
+ </tr>
+ <tr>
+ <td><strong><code><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-unicode-escape" id="special-unicode-escape" name="special-unicode-escape">uhhhh\</a></code></strong></td>
+ <td>مطابقة الرمز مع الكود hhhh (four hexadecimal digits).</td>
+ </tr>
+ <tr>
+ <td><a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#special-unicode-escape-es6" id="special-unicode-escape-es6" name="special-unicode-escape-es6"><strong><code>u{hhhh</code></strong><code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">}</code></a></td>
+ <td>( فقط عندما يستخدم u flag ) سيطابق الرمز مع ال Unicode بالقيمة hhhh (hexadecimal digits).</td>
+ </tr>
+ </tbody>
+</table>
+
+<p dir="rtl" style="font-family: tahoma;">  لتهريب تعابير الريجكس في المدخلات النصية، يمكنك<span id="result_box" lang="ar"><span>  استخدام دالة الاستبدال التالية:</span></span></p>
+
+<pre class="brush: js line-numbers language-js" dir="rtl" style="font-family: tahoma;"><code class="language-js"><span class="keyword token">function</span> <span class="function token">escapeRegExp</span><span class="punctuation token">(</span>string<span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ <span class="keyword token">return</span> string<span class="punctuation token">.</span><span class="function token">replace</span><span class="punctuation token">(</span><span class="regex token">/[.*+?^${}()|[\]\\]/g</span><span class="punctuation token">,</span> <span class="string token">'\\$&amp;'</span><span class="punctuation token">)</span><span class="punctuation token">;</span> <span class="comment token">// $&amp; means the whole matched string</span>
+<span class="punctuation token">}</span></code></pre>
+
+<p dir="rtl" style="font-family: tahoma;">يستخدم البند <strong><code>g</code></strong> بعد الباترن، لاجراء بحث عام، ينظر في كل السلسلة النصية ويعود بكل المطابقات. تم شرحه بالتفصيل ادناه. <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#Advanced_searching_with_flags">البحث المتقدم باستخدام البنود</a>.</p>
+
+<h3 class="highlight-spanned" dir="rtl" id="استخدام_الاقواس" style="font-family: tahoma;"><span class="highlight-span">استخدام الاقواس</span></h3>
+
+<p dir="rtl" style="font-family: tahoma;">الاقواس المحيطة باي جزء من الباترن، تجعل هذا الجزء قابل للتخزين والفهرسة. بمجرد ما يتم تخزينه وفهرسته، يصبح قابلا لاعادة الاستخدام من اطراف اخرى، كما تم شرحه في<a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Regular_Expressions#Using_parenthesized_substring_matches"> استخدام مطابقة الاقواس الجزئية</a>.</p>
+
+<p dir="rtl"><font face="tahoma">مثلا، الباترن </font><code dir="ltr" style="font-family: consolas; color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; background: none 0% 0% repeat scroll transparent;">/Chapter (\d+)\.\d*/</code><font face="tahoma"> يطابق بدقة، الرموز </font><code dir="ltr" style="font-family: consolas; color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; background: none 0% 0% repeat scroll transparent;">'Chapter '</code><font face="tahoma"> متبوعة بواحد او اكثر من الارقام (</font><code dir="ltr" style="font-family: consolas; color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; background: none 0% 0% repeat scroll transparent;">\d</code><font face="tahoma"> تشير الى اي رقم و </font><code dir="ltr" style="font-family: consolas; color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; background: none 0% 0% repeat scroll transparent;">+</code><font face="tahoma"> تشير الى واحد او اكثر من المرات، بالاضافة الى الاقواس المستخدمة خصيصا </font><font face="consolas, Liberation Mono, courier, monospace"><span style="background-color: rgba(220, 220, 220, 0.5);"><strong>لتخزين وفهرسة ما سينتج عنه</strong></span></font><font face="tahoma"> )، متبوعا بنقطة او فاصلة عشرية التي هي نفسها من الرموز الخاصة، يسبقها الباكسلاش </font><strong style="font-family: tahoma;">\</strong><font face="tahoma"> الذي بدوه يخبر الباترن بان يعاملها كنقطة عادية، متبوعا باي رقم يكرر صفر او اكثر من المرات (</font><code dir="ltr" style="font-family: consolas; color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; background: none 0% 0% repeat scroll transparent;">\d</code><font face="tahoma"> تشير الى اي رقم والنجمة </font><code dir="ltr" style="font-family: consolas; color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; background: none 0% 0% repeat scroll transparent;">*</code><font face="tahoma"> تشير الى صفر او اكثر من المرات).</font></p>
+
+<p dir="rtl" style="font-family: tahoma;">هذا الباترن سيطابق <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"Chapter 4.3"</code> في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"Open Chapter 4.3, paragraph 6"</code>، وايضا سيقوم بتخزين وفهرسة الجزئية <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'4'</code>. بينما الباترن لا يطابق شئ في <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"Chapter 3 and 4"</code> بسبب ان السلسلة الحرفية لاتحتوي على النقطة بعد الرقم <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'3'</code>.</p>
+
+<p dir="rtl" style="font-family: tahoma;">لمطابقة سلسلة فرعية من دون التسبب في فهرسة الجزء المتطابق (راجع non-capturing)، ضمن الاقواس ابدا الباترن ب <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">?:</code>. مثلا <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">(?:\d+)</code> ستطابق واحد او اكثر من الارقام من دون ان تفهرس الرموز المتطابقة.</p>
+
+<h2 id="العمل_مع_الريجكس" style="font-family: tahoma;">العمل مع الريجكس</h2>
+
+<p dir="rtl" style="font-family: tahoma;">تستخدم التعابير القياسية مع اثنين من الاوبجكت. الاوبجكت الاول هو <strong><code>RegExp</code></strong> ويحتوي على الوظيفتين <strong><code>test</code></strong> و <strong><code>exec</code></strong> والاوبجكت الثاني وهو <strong><code>String</code></strong> ويحتوي على الوظائف التالية: <strong><code>match</code></strong>، <strong><code>replace</code></strong>، <strong><code>search</code></strong>، و <code><strong>split</strong></code>.  تم شرح هذه الوظائف بالتفصيل في <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference" title="en-US/docs/JavaScript/Reference">JavaScript reference</a>.</p>
+
+<table class="standard-table" style="font-family: tahoma;">
+ <caption>
+ <p>الوظائف المملوكة للكائن RegExp</p>
+ </caption>
+ <thead>
+ <tr>
+ <th scope="col">الوظيفة</th>
+ <th scope="col">وصفها</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><a class="new" href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec" rel="nofollow" title="The documentation about this has not yet been written; please consider contributing!"><code>exec</code></a></td>
+ <td dir="rtl"> تقوم هذه الوظيفة بتنفيذ بحث لمطابقة سلسلة نصية. وتعود بمصفوفة تحتوي على نتيجة البحث، او تعود ب null في حالة عدم المطابقة.</td>
+ </tr>
+ <tr>
+ <td><a class="new" href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test" rel="nofollow" title="The documentation about this has not yet been written; please consider contributing!"><code>test</code></a></td>
+ <td dir="rtl"> تقوم هذه الوظيفة بعمل فحص لمطابقة سلسلة نصية. وتعود اما ب true او false.</td>
+ </tr>
+ <tr>
+ <td><a class="new" href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Reference/Global_Objects/String/match" rel="nofollow" title="The documentation about this has not yet been written; please consider contributing!"><code>match</code></a></td>
+ <td dir="rtl"> تقوم هذه الوظيفة بتنفيذ بحث لمطابقة سلسلة نصية. وتعود بمصفوفة تحتوي على نتيجة البحث، او تعود ب null في حالة عدم المطابقة. (نفس ما تقوم به الوظيفة exec).</td>
+ </tr>
+ <tr>
+ <td><a class="new" href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Reference/Global_Objects/String/search" rel="nofollow" title="The documentation about this has not yet been written; please consider contributing!"><code>search</code></a></td>
+ <td dir="rtl"> تقوم هذه الوظيفة بعمل فحص لمطابقة سلسلة نصية. وتعود برقم المكان الذي يتواجد فيه ما تمت مطابقته. او ب -1 في حالة لم يتم العثور على المطلوب.</td>
+ </tr>
+ <tr>
+ <td><a class="new" href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Reference/Global_Objects/String/replace" rel="nofollow" title="The documentation about this has not yet been written; please consider contributing!"><code>replace</code></a></td>
+ <td dir="rtl"> تقوم هذه الوظيفة بتنفيذ بحث لمطابقة سلسلة نصية. ويحل محل السلسلة الجزئية المتطابقة، السلسلة الجزئية البديلة.</td>
+ </tr>
+ <tr>
+ <td><a class="new" href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Reference/Global_Objects/String/split" rel="nofollow" title="The documentation about this has not yet been written; please consider contributing!"><code>split</code></a></td>
+ <td dir="rtl"> هذه الوظيفة تستخدم الريجكس او سلسلة نصية ثابتة لتقسيم السلسلة الى مصفوفة من السلاسل الجزئية.</td>
+ </tr>
+ </tbody>
+</table>
+
+<p dir="rtl" style="font-family: tahoma;">عندما تريد معرفة ما اذا كان الباترن موجود في سلسلة نصية ام لا، استخدم اما الوظيفة <strong><code>test</code></strong> او الوظيفة <strong><code>search</code></strong> ، اما لمعرفة المزيد من المعلومات (ولكن أبطأ قليلا في التنفيذ)، استخدم اما الوظيفة <strong><code>exec</code></strong> او الوظيفة <strong><code>match</code></strong> اذا استخدمت <strong><code>exec</code></strong> او <strong><code>match</code></strong> ونجحت المطابقة، فان هاتان الوظيفتان ستعود بمصفوفة، وفي نفس الوقت ستقوم بتحديث خصائص الريجكس المرتبطة به وكذلك خصائص الريجكس <strong><code>RegExp</code></strong>. اذا فشلت المطابقة, ستعود الوظيفة <strong><code>exec</code></strong> ب <strong><code>null</code></strong> ( <span class="short_text" id="result_box" lang="ar"><span>التي تفرض</span></span> <span lang="ar"><span>:</span></span> <code><strong>false</strong></code>).</p>
+
+<p dir="rtl" style="font-family: tahoma;">في المثال التالي، السكريبت يستخدم الوظيفة <strong><code>exec</code></strong> للبحث عن مطابقة في السلسلة النصية:</p>
+
+<pre class="brush: js line-numbers language-js" dir="rtl" style="font-family: tahoma;"><code class="language-js"><span class="keyword token">var</span> myRe <span class="operator token">=</span> <span class="regex token">/d(b+)d/g</span><span class="punctuation token">;</span>
+<span class="keyword token">var</span> myArray <span class="operator token">=</span> myRe<span class="punctuation token">.</span><span class="function token">exec</span><span class="punctuation token">(</span><span class="string token">'cdbbdbsbz'</span><span class="punctuation token">)</span><span class="punctuation token">;</span></code></pre>
+
+<p dir="rtl" style="font-family: tahoma;">إذا كنت لا تحتاج إلى الوصول إلى خصائص الريجكس، هناك طريقة بديلة لإنشاء <code>myArray</code>، كالتلي:</p>
+
+<pre class="brush: js line-numbers language-js" dir="rtl" style="font-family: tahoma;"><code class="language-js"><span class="keyword token">var</span> myArray <span class="operator token">=</span> <span class="regex token">/d(b+)d/g</span><span class="punctuation token">.</span><span class="function token">exec</span><span class="punctuation token">(</span><span class="string token">'cdbbdbsbz'</span><span class="punctuation token">)</span><span class="punctuation token">;</span> <span class="comment token">// similar to "cdbbdbsbz".match(/d(b+)d/g); however,</span>
+ <span class="comment token">// the latter outputs Array [ "dbbd" ], while</span>
+ <span class="comment token">// /d(b+)d/g.exec('cdbbdbsbz') outputs Array [ "dbbd", "bb" ].</span>
+ <span class="comment token">// See below for further info (CTRL+F "The behavior associated with the".)</span></code></pre>
+
+<p dir="rtl" style="font-family: tahoma;">إذا كنت ترغب في بناء ريجكس من سلسلة نصية، هناك بديل آخر، كالتالي:</p>
+
+<pre class="brush: js line-numbers language-js" dir="rtl" style="font-family: tahoma;"><code class="language-js"><span class="keyword token">var</span> myRe <span class="operator token">=</span> <span class="keyword token">new</span> <span class="class-name token">RegExp</span><span class="punctuation token">(</span><span class="string token">'d(b+)d'</span><span class="punctuation token">,</span> <span class="string token">'g'</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+<span class="keyword token">var</span> myArray <span class="operator token">=</span> myRe<span class="punctuation token">.</span><span class="function token">exec</span><span class="punctuation token">(</span><span class="string token">'cdbbdbsbz'</span><span class="punctuation token">)</span><span class="punctuation token">;</span></code></pre>
+
+<p dir="rtl" style="font-family: tahoma;">مع هذا السكريبت، تنجح المطابقة، ويتم ارجاع مصفوفة وتحديث الخصائص معروض في الجدول التالي.</p>
+
+<table class="standard-table" id="jumbIt" style="font-family: tahoma;">
+ <caption>
+ <p>نتائج تنفيذ الريجكس</p>
+ </caption>
+ <thead>
+ <tr>
+ <th scope="col">الكائن</th>
+ <th scope="col">الخاصية او الفهرس</th>
+ <th scope="col">الوصف</th>
+ <th scope="col">في هذا المثال</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td rowspan="4"><code>myArray</code></td>
+ <td> </td>
+ <td dir="rtl">السلسلة النصية التي جرى مطابقتها وجميع السلاسل النصية الجزئية المفهرسة.</td>
+ <td><code>['dbbd', 'bb', index: 1, input: 'cdbbdbsbz']</code></td>
+ </tr>
+ <tr>
+ <td><code>index</code></td>
+ <td>فهرس بداية المُطابَقة في السلسلة النصية، والفهرسة تبتدئ من 0.</td>
+ <td><code>1</code></td>
+ </tr>
+ <tr>
+ <td><code>input</code></td>
+ <td>السلسلة النصية الأصلية.</td>
+ <td><code>"cdbbdbsbz"</code></td>
+ </tr>
+ <tr>
+ <td><code>[0]</code></td>
+ <td>الرموز الاخيرة التي جرى مطابقتها</td>
+ <td><code>"dbbd"</code></td>
+ </tr>
+ <tr>
+ <td rowspan="2"><code>myRe</code></td>
+ <td><code>lastIndex</code></td>
+ <td dir="rtl">الفهرس الذي ستبدأ عنده عملية البحث عن المطابقة التالية. وإذا لم يتم ضبط البند "<code>g</code>" فستبقى قيمته مساويةً للصفر. للمزيد حول <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#Advanced_searching_with_flags">البحث المتقدم باستخدام البنود</a>.</td>
+ <td><code>5</code></td>
+ </tr>
+ <tr>
+ <td><code>source</code></td>
+ <td dir="rtl">نص الباترن. تم تحديثه في الوقت الذي تم فيه إنشاء الريجكس، وليس وقت تنفيذه.</td>
+ <td><code>"d(b+)d"</code></td>
+ </tr>
+ </tbody>
+</table>
+
+<p dir="rtl" style="font-family: tahoma;">كما شاهدنا في المثال الثاني، تستطيع استخدام ريجكس منشا من خلال معد الاوبجكت <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"object initializer"</code>، من دون اسناده الى متغير. اذا قمت بعمل ذالك، كل ما سيحدث هو ظهور ريجكس جديد. لهذا السبب، لا يمكن الوصول الى خصائص الريجكس. يوضح المثال التالي كيفية الوصول الى خصائص الكائن بالطريقة الصحيحة:</p>
+
+<pre class="brush: js line-numbers language-js" dir="rtl" style="font-family: tahoma;"><code class="language-js"><span class="keyword token">var</span> myRe <span class="operator token">=</span> <span class="regex token">/d(b+)d/g</span><span class="punctuation token">;</span>
+<span class="keyword token">var</span> myArray <span class="operator token">=</span> myRe<span class="punctuation token">.</span><span class="function token">exec</span><span class="punctuation token">(</span><span class="string token">'cdbbdbsbz'</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+console<span class="punctuation token">.</span><span class="function token">log</span><span class="punctuation token">(</span><span class="string token">'The value of lastIndex is '</span> <span class="operator token">+</span> myRe<span class="punctuation token">.</span>lastIndex<span class="punctuation token">)</span><span class="punctuation token">;</span>
+
+<span class="comment token">// "The value of lastIndex is 5"</span></code></pre>
+
+<p style="font-family: tahoma;">بينما يوضح المثال التالي كيفية الوصول الى خصائص الكائن بالطريقة الخاطئة:</p>
+
+<pre class="brush: js line-numbers language-js" dir="rtl" style="font-family: tahoma;"><code class="language-js"><span class="keyword token">var</span> myArray <span class="operator token">=</span> <span class="regex token">/d(b+)d/g</span><span class="punctuation token">.</span><span class="function token">exec</span><span class="punctuation token">(</span><span class="string token">'cdbbdbsbz'</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+console<span class="punctuation token">.</span><span class="function token">log</span><span class="punctuation token">(</span><span class="string token">'The value of lastIndex is '</span> <span class="operator token">+</span> <span class="regex token">/d(b+)d/g</span><span class="punctuation token">.</span>lastIndex<span class="punctuation token">)</span><span class="punctuation token">;</span>
+
+<span class="comment token">// "The value of lastIndex is 0"</span></code></pre>
+
+<p dir="rtl" style="font-family: tahoma;">حاصل الباترن <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/d(b+)d/g</code> في كلتا التعليمات البرمجية، عبارة عن كائنان مختلفان، لذالك هما مختلفان في قيمة الخاصية <code>lastIndex</code> اذا كنت ترغب في الوصول الى خصائص الريجكس المنشا من طرف معد او مهيئ الاوبجكت، يلزمك اولا اسناده لمتغير.</p>
+
+<h3 class="highlight-spanned" id="Using_parenthesized_substring_matches_2" style="font-family: tahoma;"><span class="highlight-span"><a id="Using_parenthesized_substring_matches" name="Using_parenthesized_substring_matches">Using parenthesized substring matches</a></span></h3>
+
+<p dir="rtl" style="font-family: tahoma;">بمجرد تضمين جزء من الباترن داخل الاقواس الهلالية، سيصبح جزءا مفهرسا قابل لاعادة الاستخدام، مثلا،  الباترن <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">/a(b)c/</code> سيطابق <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'abc'</code> في  <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">"abcd"</code> ويفهرس المطابقة الجزئية <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">(b)</code> برقم <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">1</code>، ناتج المطابقة الجزئية <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">(b)</code> هو السلسلة الحرفية الجزئية <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'b'</code>. لاستدعاء هذا الجزء المفهرس خارج الباترن، استخدم عناصر المصفوفة <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">[1]...</code>. ولاعادة استخدامها داخل الباترن استخدم الفهرسة الرقمية <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">\1 ...</code>.<br>
+ - كيفية استدعائها خارج الباترن:</p>
+
+<pre class="brush: js line-numbers language-js" dir="rtl" style="font-family: tahoma;"><code class="language-js"><span class="keyword token">var</span> myRe <span class="operator token">=</span> <span class="regex token">/a(b)c/</span><span class="punctuation token">;</span>
+<span class="keyword token">var</span> myArray <span class="operator token">=</span> myRe<span class="punctuation token">.</span><span class="function token">exec</span><span class="punctuation token">(</span><span class="string token">'abcb'</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+console<span class="punctuation token">.</span><span class="function token">log</span><span class="punctuation token">(</span><span class="string token">'The result of submatch N1: '</span> <span class="operator token">+</span> myArray<span class="punctuation token">[</span><span class="number token">1</span><span class="punctuation token">]</span> <span class="punctuation token">)</span><span class="punctuation token">;</span>
+
+<span class="comment token">// log: The result of submatch N1: b</span></code></pre>
+
+<p dir="rtl" style="font-family: tahoma;">يمكنك استخدام عدد لا متناهي من هذه الاجزاء المفهرسة، تبتدئ الفهرسة من واحد، عائد المصفوفة سيتضمن جميع الاجزاء المفهرسة في الباترن.<br>
+ كيفية اعادة استخدامها داخل الباترن:</p>
+
+<pre class="brush: js line-numbers language-js" dir="rtl" style="font-family: tahoma;"><code class="language-js"><span class="keyword token">var</span> myRe <span class="operator token">=</span> <span class="regex token">/a(b)c\s\1/g</span><span class="punctuation token">;</span>
+<span class="keyword token">var</span> myArray <span class="operator token">=</span> myRe<span class="punctuation token">.</span><span class="function token">exec</span><span class="punctuation token">(</span><span class="string token">'abc b'</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+console<span class="punctuation token">.</span><span class="function token">log</span><span class="punctuation token">(</span><span class="string token">'The result of submatch N1: '</span> <span class="operator token">+</span> myArray<span class="punctuation token">[</span><span class="number token">1</span><span class="punctuation token">]</span> <span class="punctuation token">)</span><span class="punctuation token">;</span>
+
+<span class="comment token">// log: The result of submatch N1: b</span></code></pre>
+
+<p dir="rtl" style="font-family: tahoma;">يستخدم السكريبت التالي الوظيفة <a class="new" href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Reference/Global_Objects/String/replace" rel="nofollow" title="The documentation about this has not yet been written; please consider contributing!"><code>()replace</code></a> لعكس الكلمتين John و Smith في السلسلة النصية <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">'John Smith'</code>. ويستخدم في نص الاستبدال، المتغيرات السحرية <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">$1</code> و <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-family: consolas; font-weight: bold; background: transparent none repeat scroll 0% 0%;">$2</code> لاستدعاء المطابقة الجزئية المفهرسة الاولى والثانية. مثال:</p>
+
+<pre class="brush: js line-numbers language-js" dir="rtl" style="font-family: tahoma;"><code class="language-js"><span class="keyword token">var</span> re <span class="operator token">=</span> <span class="regex token">/(\w+)\s(\w+)/</span><span class="punctuation token">;</span>
+<span class="keyword token">var</span> str <span class="operator token">=</span> <span class="string token">'John Smith'</span><span class="punctuation token">;</span>
+<span class="keyword token">var</span> newstr <span class="operator token">=</span> str<span class="punctuation token">.</span><span class="function token">replace</span><span class="punctuation token">(</span>re<span class="punctuation token">,</span> <span class="string token">'$2, $1'</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+console<span class="punctuation token">.</span><span class="function token">log</span><span class="punctuation token">(</span>newstr<span class="punctuation token">)</span><span class="punctuation token">;</span>
+
+<span class="comment token">// "Smith, John"</span></code></pre>
+
+<div class="note" style="font-family: tahoma;">
+<p dir="rtl">ملاحظة: يسمح باستخدام المتغيرات السحرية، 9 مرات فقط، في العملية الواحدة.</p>
+</div>
+
+<h3 class="highlight-spanned" dir="rtl" id="البحث_المتقدم_باستخدام_البنود" style="font-family: tahoma;"><span class="highlight-span"><a name="Advanced_searching_with_flags">البحث المتقدم باستخدام البنود</a></span></h3>
+
+<p dir="rtl" style="font-family: tahoma;">التعبيرات القياسية في الجافاسكريبت لها خمسة بنود ، وجودها اختياريا، تسمح لنا بعمل بحثا عاما او بحثا دون مراعات لحالة الاحرف. يمكن استخدامها اما منفردة او مجتمعة وكذالك في اي ترتيب، حسب الطلب، وهي جزء من الريجكس.</p>
+
+<table class="standard-table" style="font-family: tahoma;">
+ <caption>
+ <p>بنود الريجكس</p>
+ </caption>
+ <thead>
+ <tr>
+ <th scope="col">Flag</th>
+ <th scope="col">Description</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><strong><code>g</code></strong></td>
+ <td dir="rtl">بحث عام، عدم وجوده = النتيجة الاولى فقط.</td>
+ </tr>
+ <tr>
+ <td><strong><code>i</code></strong></td>
+ <td dir="rtl">عدم مراعاة حالة الاحرف، سواء كانت صغيرة او كبيرة.</td>
+ </tr>
+ <tr>
+ <td><strong><code>m</code></strong></td>
+ <td dir="rtl">البحث في السطور المتعدد = كامل النص.</td>
+ </tr>
+ <tr>
+ <td><strong><code>u</code></strong></td>
+ <td dir="rtl">سلسلة يونيكود، أي معاملة الباترن على أنه سلسلة من رموز يونيكود (Unicode code points).</td>
+ </tr>
+ <tr>
+ <td><strong><code>y</code></strong></td>
+ <td dir="rtl">المطابقة ستبدأ من الفهرس المُشار إليه بالخاصية <code>lastIndex</code> لكائن التعابير النمطية في السلسلة الهدف، ولن تتم محاولة مطابقة ما قبل هذا الفهرس. للمزيد من المعلومات <a class="new" href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Reference/Global_Objects/RegExp/sticky" rel="nofollow" title="The documentation about this has not yet been written; please consider contributing!"><code>sticky</code></a></td>
+ </tr>
+ </tbody>
+</table>
+
+<p dir="rtl" style="font-family: tahoma;">لتضمين بند مع الريجكس استخدم التعبير التالي:</p>
+
+<pre class="brush: js line-numbers language-js" dir="rtl" style="font-family: tahoma;"><code class="language-js"><span class="keyword token">var</span> re <span class="operator token">=</span> <span class="operator token">/</span>pattern<span class="operator token">/</span>flags<span class="punctuation token">;</span></code></pre>
+
+<p dir="rtl" style="font-family: tahoma;">او</p>
+
+<pre class="brush: js line-numbers language-js" dir="rtl" style="font-family: tahoma;"><code class="language-js"><span class="keyword token">var</span> re <span class="operator token">=</span> <span class="keyword token">new</span> <span class="class-name token">RegExp</span><span class="punctuation token">(</span><span class="string token">'pattern'</span><span class="punctuation token">,</span> <span class="string token">'flags'</span><span class="punctuation token">)</span><span class="punctuation token">;</span></code></pre>
+
+<p dir="rtl" style="font-family: tahoma;"><span id="result_box" lang="ar"><span>البنود، جزء لا يتجزأ من الريجكس.</span> <span>لا يمكن إزالتها أو إضافتها لاحقا.</span></span></p>
+
+<p dir="rtl" style="font-family: tahoma;">مثلا، <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">re = /\w+\s/g</code> يقوم بانشاء ريجكس يبحث على واحد او اكثر من الرموز متبوعة بمسافة واحدة، يقوم بتنفيذ هذا الاجراء على السلسلة الحرفية (كاملة = <code>g</code>):</p>
+
+<pre class="brush: js line-numbers language-js" dir="rtl" style="font-family: tahoma;"><code class="language-js"><span class="keyword token">var</span> re <span class="operator token">=</span> <span class="regex token">/\w+\s/g</span><span class="punctuation token">;</span>
+<span class="keyword token">var</span> str <span class="operator token">=</span> <span class="string token">'fee fi fo fum'</span><span class="punctuation token">;</span>
+<span class="keyword token">var</span> myArray <span class="operator token">=</span> str<span class="punctuation token">.</span><span class="function token">match</span><span class="punctuation token">(</span>re<span class="punctuation token">)</span><span class="punctuation token">;</span>
+console<span class="punctuation token">.</span><span class="function token">log</span><span class="punctuation token">(</span>myArray<span class="punctuation token">)</span><span class="punctuation token">;</span>
+
+<span class="comment token">// ["fee ", "fi ", "fo "]</span></code></pre>
+
+<p dir="rtl" style="font-family: tahoma;">يمكنك استبدال هذا السطر:</p>
+
+<pre class="brush: js line-numbers language-js" dir="rtl" style="font-family: tahoma;"><code class="language-js"><span class="keyword token">var</span> re <span class="operator token">=</span> <span class="regex token">/\w+\s/g</span><span class="punctuation token">;</span></code></pre>
+
+<p dir="rtl" style="font-family: tahoma;">ب:</p>
+
+<pre class="brush: js line-numbers language-js" dir="rtl" style="font-family: tahoma;"><code class="language-js"><span class="keyword token">var</span> re <span class="operator token">=</span> <span class="keyword token">new</span> <span class="class-name token">RegExp</span><span class="punctuation token">(</span><span class="string token">'\\w+\\s'</span><span class="punctuation token">,</span> <span class="string token">'g'</span><span class="punctuation token">)</span><span class="punctuation token">;</span></code></pre>
+
+<p dir="rtl" style="font-family: tahoma;">وستحصل على نفس النتيجة.</p>
+
+<p dir="rtl" style="font-family: tahoma;">يستخدم  البند <strong><code>m</code></strong> لاخبار محرك الريجكس، بان المدخلات النصية، المتعددة السطور، يجب ان تعامل كسطور متعددة. اذا تم استخدام البند <strong><code>m</code></strong> فسيتطابق الرمزان الخاصان <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">^</code> و <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">$</code> ، <span id="result_box" lang="ar"><span>مع بداية أو نهاية كل سطر من المدخلات،</span></span> بدلا من المدخل بالكامل. مثال:</p>
+
+<pre class="brush: js line-numbers language-js" dir="rtl" style="font-family: tahoma;"><code class="language-js"><span class="keyword token">var</span> re <span class="operator token">=</span> <span class="regex token">/^Multi\s*line$/gm</span><span class="punctuation token">;</span>
+<span class="keyword token">var</span> str <span class="operator token">=</span> <span class="string token">'Multi line\n or \nMultiline'</span><span class="punctuation token">;</span>
+<span class="keyword token">var</span> myArray <span class="operator token">=</span> str<span class="punctuation token">.</span><span class="function token">match</span><span class="punctuation token">(</span> re <span class="punctuation token">)</span><span class="punctuation token">;</span>
+
+console<span class="punctuation token">.</span><span class="function token">log</span><span class="punctuation token">(</span> myArray <span class="punctuation token">)</span><span class="punctuation token">;</span>
+<span class="comment token">// log: [ "Multi line", "Multiline" ]</span></code></pre>
+
+<p dir="rtl" style="font-family: tahoma;"> </p>
+
+<h2 id="امثلة" style="font-family: tahoma;">امثلة</h2>
+
+<p style="font-family: tahoma;">تبين الامثلة التالية بعض استخدامات الريجكس</p>
+
+<h3 class="highlight-spanned" dir="rtl" id="اعادة_صياغة_المدخلات_النصية." style="font-family: tahoma;"><span class="highlight-span">اعادة صياغة المدخلات النصية.</span></h3>
+
+<p dir="rtl" style="font-family: tahoma;">يوضح المثال التالي كيف يمكن للريجكس ان يتلاعب في بنية السلسلة النصية، وايضا كيفية استخدام <strong><code>()string.split</code></strong> و <strong><code>()string.replace</code></strong>. سيقوم السكريبت التالي بتنظيف واعادة صياغة السلسلة النصية، التي تحتوي على اسماء مفصولة بمسافات فارغة، تابات، وبالظبط فاصلة منقوطة واحدة. واخيرا سيقوم بعكس هذه الاسماء وترتيبها من a الى z.</p>
+
+<pre class="brush: js line-numbers language-js" dir="rtl" style="font-family: tahoma;"><code class="language-js"><span class="comment token">// The name string contains multiple spaces and tabs,</span>
+<span class="comment token">// and may have multiple spaces between first and last names.</span>
+<span class="keyword token">var</span> names <span class="operator token">=</span> <span class="string token">'Orange Trump ;Fred Barney; Helen Rigby ; Bill Abel ; Chris Hand '</span><span class="punctuation token">;</span>
+
+<span class="keyword token">var</span> output <span class="operator token">=</span> <span class="punctuation token">[</span><span class="string token">'---------- Original String\n'</span><span class="punctuation token">,</span> names <span class="operator token">+</span> <span class="string token">'\n'</span><span class="punctuation token">]</span><span class="punctuation token">;</span>
+
+<span class="comment token">// Prepare two regular expression patterns and array storage.</span>
+<span class="comment token">// Split the string into array elements.</span>
+
+<span class="comment token">// pattern: possible white space then semicolon then possible white space</span>
+<span class="keyword token">var</span> pattern <span class="operator token">=</span> <span class="regex token">/\s*;\s*/</span><span class="punctuation token">;</span>
+
+<span class="comment token">// Break the string into pieces separated by the pattern above and</span>
+<span class="comment token">// store the pieces in an array called nameList</span>
+<span class="keyword token">var</span> nameList <span class="operator token">=</span> names<span class="punctuation token">.</span><span class="function token">split</span><span class="punctuation token">(</span>pattern<span class="punctuation token">)</span><span class="punctuation token">;</span>
+
+<span class="comment token">// new pattern: one or more characters then spaces then characters.</span>
+<span class="comment token">// Use parentheses to "memorize" portions of the pattern.</span>
+<span class="comment token">// The memorized portions are referred to later.</span>
+pattern <span class="operator token">=</span> <span class="regex token">/(\w+)\s+(\w+)/</span><span class="punctuation token">;</span>
+
+<span class="comment token">// Below is the new array for holding names being processed.</span>
+<span class="keyword token">var</span> bySurnameList <span class="operator token">=</span> <span class="punctuation token">[</span><span class="punctuation token">]</span><span class="punctuation token">;</span>
+
+<span class="comment token">// Display the name array and populate the new array</span>
+<span class="comment token">// with comma-separated names, last first.</span>
+<span class="comment token">//</span>
+<span class="comment token">// The replace method removes anything matching the pattern</span>
+<span class="comment token">// and replaces it with the memorized string—the second memorized portion</span>
+<span class="comment token">// followed by a comma, a space and the first memorized portion.</span>
+<span class="comment token">//</span>
+<span class="comment token">// The variables $1 and $2 refer to the portions</span>
+<span class="comment token">// memorized while matching the pattern.</span>
+
+output<span class="punctuation token">.</span><span class="function token">push</span><span class="punctuation token">(</span><span class="string token">'---------- After Split by Regular Expression'</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+
+<span class="keyword token">var</span> i<span class="punctuation token">,</span> len<span class="punctuation token">;</span>
+<span class="keyword token">for</span> <span class="punctuation token">(</span>i <span class="operator token">=</span> <span class="number token">0</span><span class="punctuation token">,</span> len <span class="operator token">=</span> nameList<span class="punctuation token">.</span>length<span class="punctuation token">;</span> i <span class="operator token">&lt;</span> len<span class="punctuation token">;</span> i<span class="operator token">++</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ output<span class="punctuation token">.</span><span class="function token">push</span><span class="punctuation token">(</span>nameList<span class="punctuation token">[</span>i<span class="punctuation token">]</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+ bySurnameList<span class="punctuation token">[</span>i<span class="punctuation token">]</span> <span class="operator token">=</span> nameList<span class="punctuation token">[</span>i<span class="punctuation token">]</span><span class="punctuation token">.</span><span class="function token">replace</span><span class="punctuation token">(</span>pattern<span class="punctuation token">,</span> <span class="string token">'$2, $1'</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+<span class="punctuation token">}</span>
+
+<span class="comment token">// Display the new array.</span>
+output<span class="punctuation token">.</span><span class="function token">push</span><span class="punctuation token">(</span><span class="string token">'---------- Names Reversed'</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+<span class="keyword token">for</span> <span class="punctuation token">(</span>i <span class="operator token">=</span> <span class="number token">0</span><span class="punctuation token">,</span> len <span class="operator token">=</span> bySurnameList<span class="punctuation token">.</span>length<span class="punctuation token">;</span> i <span class="operator token">&lt;</span> len<span class="punctuation token">;</span> i<span class="operator token">++</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ output<span class="punctuation token">.</span><span class="function token">push</span><span class="punctuation token">(</span>bySurnameList<span class="punctuation token">[</span>i<span class="punctuation token">]</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+<span class="punctuation token">}</span>
+
+<span class="comment token">// Sort by last name, then display the sorted array.</span>
+bySurnameList<span class="punctuation token">.</span><span class="function token">sort</span><span class="punctuation token">(</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+output<span class="punctuation token">.</span><span class="function token">push</span><span class="punctuation token">(</span><span class="string token">'---------- Sorted'</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+<span class="keyword token">for</span> <span class="punctuation token">(</span>i <span class="operator token">=</span> <span class="number token">0</span><span class="punctuation token">,</span> len <span class="operator token">=</span> bySurnameList<span class="punctuation token">.</span>length<span class="punctuation token">;</span> i <span class="operator token">&lt;</span> len<span class="punctuation token">;</span> i<span class="operator token">++</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ output<span class="punctuation token">.</span><span class="function token">push</span><span class="punctuation token">(</span>bySurnameList<span class="punctuation token">[</span>i<span class="punctuation token">]</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+<span class="punctuation token">}</span>
+
+output<span class="punctuation token">.</span><span class="function token">push</span><span class="punctuation token">(</span><span class="string token">'---------- End'</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+
+console<span class="punctuation token">.</span><span class="function token">log</span><span class="punctuation token">(</span>output<span class="punctuation token">.</span><span class="function token">join</span><span class="punctuation token">(</span><span class="string token">'\n'</span><span class="punctuation token">)</span><span class="punctuation token">)</span><span class="punctuation token">;</span></code></pre>
+
+<h3 class="highlight-spanned" id="استخدام_الرموز_الخاصة_للتحقق_من_صحة_المدخلات." style="font-family: tahoma;"><span class="highlight-span">استخدام الرموز الخاصة للتحقق من صحة المدخلات.</span></h3>
+
+<p dir="rtl" style="font-family: tahoma;">في المثال التالي، يتوقع من المستخدم ادخال رقم الهاتف. عندما سينقر المستخدم على زر "الفحص" سيقوم السكريبت بفحص صحة الرقم. اذا كان الرقم صحيحا، سيقوم السكريبت باظهار رسالة تشكر المستخدم وتظهر الرقم المدخل. اذا كان الرقم غير صحيح، سيقوم السكريبت باخبار المستخدم بان الرقم المدخل غير صحيح.</p>
+
+<p dir="rtl" style="font-family: tahoma;">بعد <em>non-capturing parentheses</em> <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">(?:</code> سينظر الريجكس الى الثلاثة ارقام <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">\d{3}</code> او <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">|</code> الى القوس اليساري <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">\(</code> متبوعا بثلاثة ارقام<code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;"> \d{3}</code> متبوعة بقوس الاغلاق <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">\)</code>, (نهاية <em>non-capturing parenthesis</em> <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">)</code>)، متبوعة بشرطة واحدة تليها الباكسلاش او النقطة الكسرية، اذا وجدت قم بفهرستها <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">([-\/\.])</code>، متبوعة بثلاث ارقام <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">\d{3}</code>، متبوعة باستدعاء الجزء المفهرس <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">\1</code>, متبوعا باربعة ارقام <code dir="ltr" style="color: rgb(0, 0, 0); font-size: 17px; font-weight: bold; font-family: consolas; background: transparent none repeat scroll 0% 0%;">\d{4}</code>.</p>
+
+<p dir="rtl" style="font-family: tahoma;"><span id="result_box" lang="ar"><span>يتم تنشيط حدث التغيير عندما يقوم المستخدم بالضغط على إنتر وملأ القيمة </span></span><code>RegExp.input</code><span lang="ar"><span>.</span></span></p>
+
+<pre class="brush: html line-numbers language-html" dir="rtl" style="font-family: tahoma;"><code class="language-html"><span class="doctype token">&lt;!DOCTYPE html&gt;</span>
+<span class="tag token"><span class="tag token"><span class="punctuation token">&lt;</span>html</span><span class="punctuation token">&gt;</span></span>
+ <span class="tag token"><span class="tag token"><span class="punctuation token">&lt;</span>head</span><span class="punctuation token">&gt;</span></span>
+ <span class="tag token"><span class="tag token"><span class="punctuation token">&lt;</span>meta</span> <span class="attr-name token">http-equiv</span><span class="attr-value token"><span class="punctuation token">=</span><span class="punctuation token">"</span>Content-Type<span class="punctuation token">"</span></span> <span class="attr-name token">content</span><span class="attr-value token"><span class="punctuation token">=</span><span class="punctuation token">"</span>text/html; charset<span class="punctuation token">=</span>ISO-8859-1<span class="punctuation token">"</span></span><span class="punctuation token">&gt;</span></span>
+ <span class="tag token"><span class="tag token"><span class="punctuation token">&lt;</span>meta</span> <span class="attr-name token">http-equiv</span><span class="attr-value token"><span class="punctuation token">=</span><span class="punctuation token">"</span>Content-Script-Type<span class="punctuation token">"</span></span> <span class="attr-name token">content</span><span class="attr-value token"><span class="punctuation token">=</span><span class="punctuation token">"</span>text/javascript<span class="punctuation token">"</span></span><span class="punctuation token">&gt;</span></span>
+ <span class="tag token"><span class="tag token"><span class="punctuation token">&lt;</span>script</span> <span class="attr-name token">type</span><span class="attr-value token"><span class="punctuation token">=</span><span class="punctuation token">"</span>text/javascript<span class="punctuation token">"</span></span><span class="punctuation token">&gt;</span></span><span class="language-javascript script token">
+ <span class="keyword token">var</span> re <span class="operator token">=</span> <span class="regex token">/(?:\d{3}|\(\d{3}\))([-\/\.])\d{3}\1\d{4}/</span><span class="punctuation token">;</span>
+ <span class="keyword token">function</span> <span class="function token">testInfo</span><span class="punctuation token">(</span>phoneInput<span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ <span class="keyword token">var</span> OK <span class="operator token">=</span> re<span class="punctuation token">.</span><span class="function token">exec</span><span class="punctuation token">(</span>phoneInput<span class="punctuation token">.</span>value<span class="punctuation token">)</span><span class="punctuation token">;</span>
+ <span class="keyword token">if</span> <span class="punctuation token">(</span><span class="operator token">!</span>OK<span class="punctuation token">)</span>
+ window<span class="punctuation token">.</span><span class="function token">alert</span><span class="punctuation token">(</span>phoneInput<span class="punctuation token">.</span>value <span class="operator token">+</span> <span class="string token">' isn\'t a phone number with area code!'</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+ <span class="keyword token">else</span>
+ window<span class="punctuation token">.</span><span class="function token">alert</span><span class="punctuation token">(</span><span class="string token">'Thanks, your phone number is '</span> <span class="operator token">+</span> OK<span class="punctuation token">[</span><span class="number token">0</span><span class="punctuation token">]</span><span class="punctuation token">)</span><span class="punctuation token">;</span>
+ <span class="punctuation token">}</span>
+ </span><span class="tag token"><span class="tag token"><span class="punctuation token">&lt;/</span>script</span><span class="punctuation token">&gt;</span></span>
+ <span class="tag token"><span class="tag token"><span class="punctuation token">&lt;/</span>head</span><span class="punctuation token">&gt;</span></span>
+ <span class="tag token"><span class="tag token"><span class="punctuation token">&lt;</span>body</span><span class="punctuation token">&gt;</span></span>
+ <span class="tag token"><span class="tag token"><span class="punctuation token">&lt;</span>p</span><span class="punctuation token">&gt;</span></span>Enter your phone number (with area code) and then click "Check".
+ <span class="tag token"><span class="tag token"><span class="punctuation token">&lt;</span>br</span><span class="punctuation token">&gt;</span></span>The expected format is like ###-###-####.<span class="tag token"><span class="tag token"><span class="punctuation token">&lt;/</span>p</span><span class="punctuation token">&gt;</span></span>
+ <span class="tag token"><span class="tag token"><span class="punctuation token">&lt;</span>form</span> <span class="attr-name token">action</span><span class="attr-value token"><span class="punctuation token">=</span><span class="punctuation token">"</span>#<span class="punctuation token">"</span></span><span class="punctuation token">&gt;</span></span>
+ <span class="tag token"><span class="tag token"><span class="punctuation token">&lt;</span>input</span> <span class="attr-name token">id</span><span class="attr-value token"><span class="punctuation token">=</span><span class="punctuation token">"</span>phone<span class="punctuation token">"</span></span><span class="punctuation token">&gt;</span></span><span class="tag token"><span class="tag token"><span class="punctuation token">&lt;</span>button</span> <span class="attr-name token">onclick</span><span class="attr-value token"><span class="punctuation token">=</span><span class="punctuation token">"</span>testInfo(document.getElementById(<span class="punctuation token">'</span>phone<span class="punctuation token">'</span>));<span class="punctuation token">"</span></span><span class="punctuation token">&gt;</span></span>Check<span class="tag token"><span class="tag token"><span class="punctuation token">&lt;/</span>button</span><span class="punctuation token">&gt;</span></span>
+ <span class="tag token"><span class="tag token"><span class="punctuation token">&lt;/</span>form</span><span class="punctuation token">&gt;</span></span>
+ <span class="tag token"><span class="tag token"><span class="punctuation token">&lt;/</span>body</span><span class="punctuation token">&gt;</span></span>
+<span class="tag token"><span class="tag token"><span class="punctuation token">&lt;/</span>html</span><span class="punctuation token">&gt;</span></span></code></pre>
+</div>
+
+<p>{{PreviousNext("Web/JavaScript/Guide/Text_formatting", "Web/JavaScript/Guide/Indexed_collections")}}</p>
diff --git a/files/ar/web/javascript/guide/working_with_objects/index.html b/files/ar/web/javascript/guide/working_with_objects/index.html
new file mode 100644
index 0000000000..83f3390467
--- /dev/null
+++ b/files/ar/web/javascript/guide/working_with_objects/index.html
@@ -0,0 +1,516 @@
+---
+title: العمل مع الكائنات
+slug: Web/JavaScript/Guide/Working_with_Objects
+translation_of: Web/JavaScript/Guide/Working_with_Objects
+---
+<div>{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Regular_Expressions", "Web/JavaScript/Guide/Details_of_the_Object_Model")}}</div>
+
+<p class="summary" dir="rtl">تم تصميم جافا سكريبت على نموذج بسيط يستند إلى الكائنات. الكائن هو عبارة عن مجموعة من الخصائص، كل خاصية لها اسم وقيمة key/value يمكن أن تكون قيمة هذه الخاصية عبارة عن دالة، وفي هذه الحالة يمكن ان تسمى بالوظيفة « method ». بالإضافة إلى الكائنات الأصلية التي توفرها بيئة المتصفحات، يمكنك انشاء كائنات خاصة بك. يصف هذا الفصل كيفية استخدام الكائنات، والخصائص والدوال او الوظائف، وايضا كيفية إنشاء الكائنات الخاصة بك.</p>
+
+<h2 dir="rtl" id="نظرة_عامة_حول_الكائنات">نظرة عامة حول الكائنات</h2>
+
+<div style="font-size: 15px; font-family: 'tahoma';">
+<p dir="rtl">الكائنات في جافا سكريبت: كما هو الحال في العديد من لغات البرمجة الأخرى، يمكن مقارنة الكائنات بالحياة الحقيقية. ويمكن تشبيه مفهوم الكائنات في جافا سكريبت بالأشياء الملموسة في واقع الحياة.</p>
+
+<p dir="rtl">في الجافاسكريبت، الكائن هو كيان مستقل بخصائصه وانواعه، يمكن مقارنته بكوب، على سبيل المثال.الكوب هو كائن له خصائصه، الكوب له لون، له شكل، له وزن، صنع بمواد معينة، واشياء اخرى. بنفس الطريقة، كائنات الجافا سكريبت لها ايضا خصائصها التي تميزها.</p>
+
+<h2 dir="rtl" id="الكائنات_والخصائص">الكائنات والخصائص</h2>
+
+<p dir="rtl">كائنات الجافاسكريبت لها خصائص مرتبطة بها. يمكن تشبيه خاصية الكائن بمتغير مرتبط به. خصائص الكائن هي في الأساس نفس متغيرات جافا سكريبت العادية. خصائص الكائن تحدد مميزات الكائن، يمكنك الوصول إلى خصائص الكائن من خلال نقطة التدوين :</p>
+
+<pre class="brush: js">objectName.propertyName
+</pre>
+
+<p dir="rtl">ككل متغيرات جافاسكريبت،  اسم الكائن واسم الخاصية حساسة تجاه الاحرف (case sensitive). يمكنك تعيين خاصية ومنحها قيمة اولية. على سبيل المثال، لنقم بانشاء كائن باسم myCar وتعين خصائص له بالاسماء التالية : make, model و year كما في المثال التالي :</p>
+
+<pre class="brush: js">var myCar = new Object();
+myCar.make = 'Ford';
+myCar.model = 'Mustang';
+myCar.year = 1969;
+</pre>
+
+<p>خصائص الكائن الغير معرفة هي {{jsxref("undefined")}} (وليست {{jsxref("null")}}).</p>
+
+<pre class="brush: js">myCar.color; // undefined</pre>
+
+<p dir="rtl">يمكن الوصول الى خصائص الكائنات عن طريق الاقواس المربعة بدلا من نقطة التدوين، في بعض الاحيان يكون من الضروري استخدام الاقواس المربعة للوصول الى خصائص الكائن (لمزيد من المعلومات شاهد <a href="/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors">property accessors</a>).  في بعض الاحيان تسمى الكائننات بمصفوفات مترابطة (associative arrays)، نظرا للشبه الكبير بينهما، حيث يمكن استخدام اسم الخاصية للوصول إلى قيمتها، الامر الذي تعتمده ايضا المصفوفات الترابطية. على سبيل المثال  يمكن الوصول إلى خصائص الكائن myCar على النحو التالي:</p>
+
+<pre class="brush: js">myCar['make'] = 'Ford';
+myCar['model'] = 'Mustang';
+myCar['year'] = 1969;
+</pre>
+
+<p dir="rtl">اسم خاصية الكائن يمكن ان يكون اي نوع من انواع النصوص الصحيحة لجافاسكريبت او اي شئ يمكن تحويله الى سلسلة نصية، بما في ذالك النص الفارغ، والنصوص التي تحتوي على رموز او اسماء محجوزة لجافاسكريبت والغير مسموح بها كمعرفات سواء بالنسبة لخصائص الكائن او للمتغيرات العادية على سبيل المثال، اسم خاصية يحتوي على مسافة او اسمين موصولين بواصلة (-) او الاسم الذي يبتدئ برقم. كل هذه الاشياء يمكن الوصول اليها عن طريق الاقواس المربعة فقط. هذه الاقواس فعالة جدا خصوصا مع اسماء الخصائص التي يتم تعينها بشكل ديناميكي (عندما لا يتم تحديد اسم الخاصية الا عند وقت التشغيل ). انظر الامثلة ادناه :</p>
+
+<pre class="brush: js">// four variables are created and assigned in a single go,
+// separated by commas
+var myObj = new Object(),
+ str = 'myString',
+ rand = Math.random(),
+ obj = new Object();
+
+myObj.type = 'Dot syntax';
+myObj['date created'] = 'String with space';
+myObj[str] = 'String value';
+myObj[rand] = 'Random Number';
+myObj[obj] = 'Object';
+myObj[''] = 'Even an empty string';
+
+console.log(myObj);
+</pre>
+
+<p dir="rtl">يرجى ملاحظة أن كافة المفاتيح في الاقواس المربعة تم تحويلها إلى سلسلة نصية (string type)، لان الكائنات في جافاسكريبت تتطلب بان يكون نوع المفتاح سلسلة نصية فقط، على سبيل المثال، في المثال اعلاه، عندما تم اضافة المفتاح rand الى ال myObj، الجافاسكريبت استدعت الوظيفة ()obj.toString بشكل اوتوماتيكي، واستخدمت ناتج السلسلة النصية كمفتاح جديد.  <br>
+ مع العلم ان ("typeof rand === "number ).</p>
+
+<p dir="rtl">يمكنك أيضا الوصول إلى الخصائص باستخدام قيمة نصية تم تخزينها في متغير :</p>
+
+<pre class="brush: js">var propertyName = 'make';
+myCar[propertyName] = 'Ford';
+
+propertyName = 'model';
+myCar[propertyName] = 'Mustang';
+</pre>
+
+<p dir="rtl">يمكنك استخدام <code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/for...in">for...in</a></code> لعمل تكرار على خصائص الكائن القابلة للتصفح ( لمزيد من المعلومات حول <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty">enumerable properties</a> ). لتوضيح ما نعنيه : تقوم الدالة التالية باظهار خصائص الكائن، عندما سيمرر لها الكائن واسم الكائن كبارامترات :</p>
+
+<pre class="brush: js">function showProps(obj, objName) {
+ var result = '';
+ for (var i in obj) {
+ // obj.hasOwnProperty() is used to filter out properties from the object's prototype chain
+ if (obj.hasOwnProperty(i)) {
+ result += objName + '.' + i + ' = ' + obj[i] + '\n';
+ }
+ }
+ return result;
+}
+</pre>
+
+<p dir="rtl">وهكذا، باستدعاء الدالة على هذا النحو showProps(myCar, "myCar") سينتج عنها النتائج التالية :</p>
+
+<pre class="brush: js">myCar.make = Ford
+myCar.model = Mustang
+myCar.year = 1969</pre>
+
+<h2 dir="rtl" id="تصفح_خصائص_الكائن">تصفح خصائص الكائن</h2>
+
+<p dir="rtl">ابتداءا من <a href="/en-US/docs/Web/JavaScript/New_in_JavaScript/ECMAScript_5_support_in_Mozilla" title="en-US/docs/JavaScript/ECMAScript 5 support in Mozilla">ECMAScript 5</a>، هناك ثلاثة طرق لتصفح/المرور على خصائص الكائن :</p>
+
+<ul dir="rtl">
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/for...in" title="en-US/docs/JavaScript/Reference/Statements/for...in">for...in</a></code> loops<br>
+ هذه الوظيفة تمر على جميع خصائص الكائن القابلة للتصفح  و ال prototype chain.</li>
+ <li>{{jsxref("Object.keys", "Object.keys(o)")}}<br>
+ تعود هذه الوظيفة بمصفوفة بجميع اسماء مفاتيح الخصائص القابلة للتصفح في الكائن o، باستثناء الموجودة في ال prototype chain.</li>
+ <li>{{jsxref("Object.getOwnPropertyNames", "Object.getOwnPropertyNames(o)")}}<br>
+ تعود هذه الوظيفة بمصفوفة بجميع اسماء الخصائص الموجودة في الكائن o، سواء القابلة للتصفح ام لا.</li>
+</ul>
+
+<p dir="rtl">قبل ECMAScript 5، لم يكن هناك أية طريقة لتصفح كافة خصائص الكائن. الا انه، يمكن تحقيق ذلك باستخدام الدالة التالية:</p>
+
+<pre class="brush: js">function listAllProperties(o) {
+ var objectToInspect;
+ var result = [];
+
+ for(objectToInspect = o; objectToInspect !== null; objectToInspect = Object.getPrototypeOf(objectToInspect)) {
+ result = result.concat(Object.getOwnPropertyNames(objectToInspect));
+ }
+
+ return result;
+}
+</pre>
+
+<p dir="rtl">يمكن لهذه  الدالةان تكون مفيدة في الكشف عن الخصائص "المخفية" (الخصائص الموجودة في ال prototype chain والتي لا يمكن الوصول إليها من خلال الكائن، بسبب وجود خاصية اخرى لها نفس الاسم في ال prototype chain. لجدولة الخصائص الظاهرة فقط، عليك إزالة التكرار في المصفوفة.</p>
+
+<h2 dir="rtl" id="إنشاء_كائنات_جديدة">إنشاء كائنات جديدة</h2>
+
+<p dir="rtl">جافا سكريبت لديها العديد من الكائنات المحددة مسبقاً. وبالإضافة إلى ذلك، يمكنك إنشاء كائنات خاصة بك. يمكنك إنشاء كائن باستخدام <a href="/ar/docs/Web/JavaScript/Reference/Operators/Object_initializer">مهيئ الكائن</a> (من المهم مراجعة هذا الموضوع حتي يمكنك فهم هذه الجزئية. كما انصح وبشدة مراجعة الفصل الخاص ب <a href="https://developer.mozilla.org/ar/docs/Learn/JavaScript/Objects/Basics">اساسيات الكائن في جافاسكريبت</a> ).</p>
+
+<p dir="rtl">كما يمكنك ايضا انشاء كائن بواسطة <a href="https://developer.mozilla.org/ar/docs/Learn/JavaScript/Objects/Object-oriented_JS">منشئ الوظيفة</a> ( constructor function ) ومن ثم انشاء مثيل/نسخة له، من خلال الكلمة المحجوزة new.</p>
+
+<h3 dir="rtl" id="استخدام_object_initializers"><a id="استخدام object initializers" name="استخدام object initializers">استخدام object initializers</a></h3>
+
+<p dir="rtl">بالإضافة إلى إنشاء كائنات باستخدام constructor function، يمكنك إنشاء كائنات باستخدام <a href="/ar/docs/Web/JavaScript/Reference/Operators/Object_initializer">مهيئ الكائن</a>. هذا النوع من الكائنات  يشار إليه في بعض الأحيان ب object literal notation . وهو يتسق مع المصطلحات المستخدمة من قبل ++C.</p>
+
+<p dir="rtl">التعبير عن كائن باستخدام object initializers:</p>
+
+<pre class="brush: js">var obj = { property_1: value_1, // property_# may be an identifier...
+ 2: value_2, // or a number...
+ // ...,
+ 'property n': value_n }; // or a string
+</pre>
+
+<p dir="rtl">حيث ان obj هو اسم الكائن الجديد، وكل property_i هو معرف الخاصية، يمكن ان يكون (اما اسما أو رقما أو سلسلة نصية)،في حين ان كل value_i هي تعليمة برمجية سيتم تعيينها كقيمه إلى الخاصية property_i يمكن (تعينها مباشرة او عن طريق اسنادها الى متغير خارجي).</p>
+
+<p dir="rtl">تعريف ال obj هو اختياري، اذا لم تكن تريد الرجوع الى هذا الكائن فى اماكن اخرى، فلا حاجة لتعريفه إلى متغير. لاحظ انك ستحتاج الى احاطة object literal بين قوسين. حتى يعمل بشكل سليم. مثال:</p>
+
+<pre class="brush: js">var value_1 = 600,
+value_2 = 400;
+({
+ property_1: value_1,
+ 2: value_2,
+ "property n": "Measurement",
+ init: function(){
+ console.log( this["property n"] +": "+ this.property_1 + "x" + this[2]);
+ }
+}).init(); // Measurement: 600x400
+
+</pre>
+
+<p dir="rtl">مهيئات الكائن، هي تعليمات برمجية، وكل مهئ سيخلق كائن جديد في التعليمة البرمجية التي سيتم تنفيذها. مهيآت الكائنات المتطابقة تنشئ كائنات مميزة والتي لا يمكن مقارنتها ببعضها البعض. يتم إنشاء الكائنات بنفس طريقة انشاء كائن جديد ()new Object، الكائنات المنشاة من خلال ال object literal هي مثيلات الكائن Object.</p>
+
+<p dir="rtl">تقوم التعليمة البرمجية التالية، بانشاء كائن وتعيينه للمتغير x في حالة ما اذا كان الشرط صحيح:</p>
+
+<pre class="brush: js">if (cond) var x = {greeting: 'hi there'};
+</pre>
+
+<p dir="rtl">ينشئ المثال التالي، الكائن myHonda مع ثلاث خصائص. لاحظ أن الخاصية engine هي أيضا كائن له خصائصه.</p>
+
+<pre class="brush: js">var myHonda = {color: 'red', wheels: 4, engine: {cylinders: 4, size: 2.2}};
+</pre>
+
+<p dir="rtl">يمكنك أيضا استخدام مهيئات الكائن لإنشاء المصفوفات. شاهد <a href="/en-US/docs/Web/JavaScript/Guide/Grammar_and_types#Array_literals">array literals</a>.</p>
+
+<h3 dir="rtl" id="استخدام_ال_constructor_function">استخدام ال constructor function</h3>
+
+<p dir="rtl">كبديل، يمكنك إنشاء كائن مع هاتين الخطوتين:</p>
+
+<ol dir="rtl">
+ <li>تعريف نوع الكائن بانشاء constructor function. هناك عرف متفق عليه، وهو كتابة الحرف الاول من اسم الكائن بحروف كبيرة Capital.  بهدف تمييزه عن باقي الاسماء.</li>
+ <li>انشاء مثيل/نسخة للكائن بواسطة الكلمة المحجوزة new.</li>
+</ol>
+
+<p dir="rtl">لتحديد نوع الكائن، سنقوم بإنشاء دالة لتحديد اسم لهذا الكائن وخصائصه، ووظائفه، على سبيل المثال، فرضا انك تريد انشاء كائن للسيارات. سيتوجب عليك تسميته ب Car، وايضا يجب ان يمتلك خصائص مثل  make، model, و year.   للقيام بذلك، سيتوجب عليك انشاء الدالة التالية:</p>
+
+<pre class="brush: js">function Car(make, model, year) {
+ this.make = make;
+ this.model = model;
+ this.year = year;
+}
+</pre>
+
+<p dir="rtl">لاحظ اننا استخدمنا this لتعيين قيم لخصائص الكائن استناداً إلى القيم التي سيتم تمريرها إلى بارامترات الدالة.</p>
+
+<p dir="rtl">الآن يمكنك إنشاء كائن باسم mycar على النحو التالي:</p>
+
+<pre class="brush: js">var mycar = new Car('Eagle', 'Talon TSi', 1993);
+</pre>
+
+<p dir="rtl">تقوم هذه التعليمة البرمجية بانشاء mycar، واسناد القيم المحددة لخصائصه. وبالتالي قيمة  mycar.make هي قيمة نصية "Eagle"، و mycar.year قيمة رقمية 1993، وهلم جرا.</p>
+
+<p dir="rtl">يمكنك إنشاء اي عدد من الكائنات من النوع Car واستدعاؤها عن طريق الكلمة المحجوزة new. مثال:</p>
+
+<pre class="brush: js">var kenscar = new Car('Nissan', '300ZX', 1992);
+var vpgscar = new Car('Mazda', 'Miata', 1990);
+</pre>
+
+<p dir="rtl">يمكن للكائن ان يحتوي على خاصية تكون هي نفسها كائن اخر، على سبيل المثال، فرضا انك تريد انشاء كائن تحت الاسم person كما يلي:</p>
+
+<pre class="brush: js">function Person(name, age, sex) {
+ this.name = name;
+ this.age = age;
+ this.sex = sex;
+}
+</pre>
+
+<p dir="rtl">ومن ثم إنشاء مثيلين/نسختين للكائن person كما يلي:</p>
+
+<pre class="brush: js">var rand = new Person('Rand McKinnon', 33, 'M');
+var ken = new Person('Ken Jones', 39, 'M');
+</pre>
+
+<p dir="rtl">ثم، يمكنك إعادة تعريف ال Car لتضمين الخاصية owner التي ستمتلك الكائن person كما يلي:</p>
+
+<pre class="brush: js">function Car(make, model, year, owner) {
+ this.make = make;
+ this.model = model;
+ this.year = year;
+ this.owner = owner;
+}
+</pre>
+
+<p dir="rtl">بعد ذلك يمكنك إنشاء مثيلات/نسخ للكائنات الجديدة، باستخدام ما يلي:</p>
+
+<pre class="brush: js">var car1 = new Car('Eagle', 'Talon TSi', 1993, rand);
+var car2 = new Car('Nissan', '300ZX', 1992, ken);
+</pre>
+
+<p dir="rtl">لاحظ أنه بدلاً من تمرير سلسلة نصية أو قيمة رقمية عند إنشاء الكائنات الجديدة، في البيانات الواردة أعلاه تم تمرير الكائنان rand و ken كبرامترات خاصة بال owner. إذا كنت ترغب في معرفة الاسم الخاص ب car2، يمكنك الوصول إلى الخاصية بالطريقة التالية:</p>
+
+<pre class="brush: js">car2.owner.name
+</pre>
+
+<p dir="rtl">يمكنك  إضافة خاصية جديدة لكائن منشأ مسبقاً. على سبيل المثال، كما في التعليمة البرمجية التالية:</p>
+
+<pre class="brush: js">car1.color = 'black';
+</pre>
+
+<p dir="rtl">قمنا باضافة الخاصية color لل car1، وقمنا بتعيين القيمة "black." لها، ومع ذالك فهذا لن يجعلها متاحة لجميع الكائنات من النوع Car. لإضافة خاصية جديدة لكافة الكائنات من نفس النوع Car، يتوجب عليك اضافة هذه الخاصية لل constructor. الخاص بالكائن Car.</p>
+
+<h3 dir="rtl" id="استخدام_الوظيفة_Object.create">استخدام الوظيفة Object.create</h3>
+
+<p dir="rtl">يمكن أيضا إنشاء كائنات باستخدام الوظيفة {{jsxref("()Object.create")}} هذه الوظيفة يمكن أن تكون مفيدة للغاية، لأنها تتيح لك أن تختار ال prototype object للكائن الذي تريد إنشاء، دون الحاجة إلى تعريف ال constructor function (بواسطة new).</p>
+
+<pre class="brush: js">// Animal properties and method encapsulation
+var Animal = {
+ type: 'Invertebrates', // Default value of properties
+ displayType: function() { // Method which will display type of Animal
+ console.log(this.type);
+ }
+};
+
+// Create new animal type called animal1
+var animal1 = Object.create(Animal);
+animal1.displayType(); // Output:Invertebrates
+
+// Create new animal type called Fishes
+var fish = Object.create(Animal);
+fish.type = 'Fishes';
+fish.displayType(); // Output:Fishes</pre>
+
+<h2 dir="rtl" id="الوراثة">الوراثة</h2>
+
+<p dir="rtl">في جافا سكريبت جميع الكائنات ترث من كائن واحد على الأقل. الكائن الذي ترث منه يسمى prototype، والخصائص الموروثة يمكن العثور عليها في ال prototype object لل constructor. شاهد <a href="/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain">Inheritance and the prototype chain</a>  لمزيد من المعلومات.</p>
+
+<h2 dir="rtl" id="فهرسة_خصائص_الكائن">فهرسة خصائص الكائن</h2>
+
+<p dir="rtl">يمكنك الاشارة/الوصول إلى خاصية الكائن إما عن طريق الاسم الخاص بها أو عن طريق المؤشر الترتيبي لها (index). إذا قمت في البداية بتعريف خاصية باسمها، سيتوجب عليك دائما الاشارة اليها باسمها، وكذالك اذا قمت في البداية بتعريف خاصية بمؤشرها الترتيبي، ايضا سيتوجب عليك الاشارة اليها بمؤشرها الترتيبي.</p>
+
+<p dir="rtl">ينطبق هذا الشرط عند إنشاء الكائن وخصائصه داخل ال constructor (كما فعلنا سابقا مع  الكائن من النوع Car) وكذالك عند تحديد خصائص فردية بشكل واضح (على سبيل المثال، "myCar.color = "red). اذا قمت في البداية بتعريف خاصية بمؤشرها الترتيبي، مثل "myCar[5] = "25 mpg، وتريد بعد ذالك الوصول اليها سيتوجب عليك استخدام المؤشر الترتيبي على هذا النحو  myCar[5].</p>
+
+<p dir="rtl">والاستثناء لهذه القاعدة هي كائنات ال HTML، مثل forms array. يمكنك الاشارة دائما إلى الكائنات في هذه المصفوفات إما عن طريق مؤشرهم الترتيبي (حسب وجودها في الوثيقة) او عن طريق اسمائها (إذا كانت معرفة). فمثلا، اذا كان الوسم الثاني &lt;FORM&gt; في الوثيقة له السمة (attribute ) باسم "myForm"، يمكنك الاشارة الى هذا الفورم ب document.forms[1] او ب document.forms["myForm"] او ب document.forms.myForm.</p>
+
+<h2 dir="rtl" id="التحكم_في_خصائص_الكائن">التحكم في خصائص الكائن</h2>
+
+<p dir="rtl">يمكنك إضافة خاصية إلى كائن محدد سابقا باستخدام الخاصية prototype. هذا النمط سيجعل هذه الخاصية متاحة لكافة الكائنات من النوع المحدد، بدلاً من تحديدها لمثيل واحد فقط. التعليمة البرمجية التالية تضيف الخاصية color الى جميع الكائنات من نوع Car، وبعد ذالك تقوم بتعيين القيمة الجديدة للخاصية color الخاصة بالكائن car1.</p>
+
+<pre class="brush: js">Car.prototype.color = null;
+car1.color = 'black';
+</pre>
+
+<p dir="rtl">شاهد  <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/prototype" title="en-US/docs/JavaScript/Reference/Global Objects/Function/prototype"><code>prototype</code> property</a>  لل Function object وايضا <a href="/en-US/docs/Web/JavaScript/Reference">JavaScript reference</a> لمزيد من المعلومات.</p>
+
+<h2 dir="rtl" id="تعريف_الوظائف">تعريف الوظائف</h2>
+
+<p dir="rtl">الوظيفة هي دالة مرتبطة مع الكائن، أو، ببساطة،  هي خاصية في الكائن قيمتها دالة، يتم تعريف الوظيفة بنفس الطريقة التي يتم بها تعريف الدالة العادية، باستثناء ان هذه الاخيرة يجب أن يتم تعيينها كخاصية لكائن. شاهد ايضا <a href="/en-US/docs/Web/JavaScript/Reference/Functions/Method_definitions">method definitions</a> لمزيد من المعلومات، وكمثال على ما تم ذكره:</p>
+
+<pre class="brush: js">objectName.methodname = function_name;
+
+var myObj = {
+ myMethod: function(params) {
+ // ...do something
+  }
+
+  // OR THIS WORKS TOO
+
+  myOtherMethod(params) {
+  // ...do something else
+ }
+};
+</pre>
+
+<p dir="rtl">حيث ان ال objectName كائن موجود، وال methodname هو الاسم المعين إلى الوظيفة، و function_name هو اسم الدالة.</p>
+
+<p dir="rtl">ثم يمكنك استدعاء الوظيفة في سياق الكائن كما يلي:</p>
+
+<pre class="brush: js">object.methodname(params);
+</pre>
+
+<p dir="rtl">يمكنك تعريف وظائف الكائن باستدعاء وظيفة معرفة في constructor الكائن. على سبيل المثال، يمكنك القيام بتعريف الدالة التي من شأنها تهيئة وعرض خصائص الكائن Car المعرف مسبقا، على سبيل المثال:</p>
+
+<pre class="brush: js">function displayCar() {
+ var result = 'A Beautiful ' + this.year + ' ' + this.make
+ + ' ' + this.model;
+ pretty_print(result);
+}
+</pre>
+
+<p dir="rtl">يمكنك استخدام الدالة pretty_print لاظهار الناتج على شكل نص افقي، تذكر ايضا على ان الكلمة المحجوزة this ستشير الى السياق الذي تنتمي اليه الدالة نفسها وفي هذه الحالة هو ال constructur Car</p>
+
+<p dir="rtl"> يمكننا بعد ذالك تعيين هذه الدالة كوظيفة في ال constructeur Car على النحو التالي:</p>
+
+<pre class="brush: js">this.displayCar = displayCar;
+</pre>
+
+<p dir="rtl">التعليمة البرمجية النهائية:</p>
+
+<pre class="brush: js">function Car(make, model, year, owner) {
+ this.make = make;
+ this.model = model;
+ this.year = year;
+ this.owner = owner;
+ this.displayCar = displayCar;
+}
+</pre>
+
+<p dir="rtl">الان يمكنك استدعاء الوظيفة displayCar لكلا الكائنين على النحو التالي:</p>
+
+<pre class="brush: js">car1.displayCar();
+car2.displayCar();
+</pre>
+
+<h2 dir="rtl" id="استخدام_this_كمرجع_للكائنات">استخدام this كمرجع للكائنات</h2>
+
+<p dir="rtl">جافاسكريبت لديها الكلمة المحجوزة لها <code><a href="/en-US/docs/Web/JavaScript/Reference/Operators/this">this</a></code>، يمكنك استخدامها مع الوظائف للرجوع/الاشارة إلى الكائن الحالي. على سبيل المثال، لنفترض ان لديك دالة تسمى validate تقوم بالتحقق من صحة المدخلات:</p>
+
+<pre class="brush: js">function validate(obj, lowval, hival) {
+ if ((obj.value &lt; lowval) || (obj.value &gt; hival)) {
+ alert('Invalid Value!');
+ }
+}
+</pre>
+
+<p dir="rtl">يمكن استدعاء هذه الدالة  عن طريق معالج الحدث onchange، وستشير الكلمة المحجوزة this الى العنصر المتواجدة به (تنفيذ الدالة على هذا العنصر). كما في المثال التالي:</p>
+
+<pre class="brush: html">&lt;input type="text" name="age" size="3"
+ onChange="validate(this, 18, 99)"&gt;
+</pre>
+
+<p dir="rtl">بشكل عام this تشير الى الكائن الذي يطلب الوظيفة.</p>
+
+<p dir="rtl">يمكن ايضا استخدام this مع معالج الحدث بشكل مباشر، كما في المثال التالي:</p>
+
+<pre class="brush: html">&lt;form name="myForm"&gt;
+&lt;p&gt;&lt;label&gt;Form name:&lt;input type="text" name="text1" value="Beluga"&gt;&lt;/label&gt;
+&lt;p&gt;&lt;input name="button1" type="button" value="Show Form Name"
+ onclick="this.form.text1.value = this.form.name"&gt;
+&lt;/p&gt;
+&lt;/form&gt;</pre>
+
+<h2 id="Defining_getters_and_setters">Defining getters and setters</h2>
+
+<p dir="rtl"> <a href="/en-US/docs/Web/JavaScript/Reference/Functions/get">getter</a> هي الوظيفة التي تقوم بجلب قيمة خاصية معينة. <a href="/en-US/docs/Web/JavaScript/Reference/Functions/set">setter</a> هي الوظيفة التي تقوم بتعيين قيمة لخاصية معينة. يمكنك تعيينها سواء للكائنات الاساسية المعرفة مسبقا أو الى الكائنات المعرف من قبل المستخدم والتي تدعم إضافة خصائص جديدة. وتستخدم مع ال object literal.</p>
+
+<p dir="rtl">يبين المثال التالي كيفية انشاء getters و setters من طرف المستخدم :</p>
+
+<pre class="brush: js">var o = {
+ a: 7,
+ get b() {
+ return this.a + 1;
+ },
+ set c(x) {
+ this.a = x / 2;
+ }
+};
+
+console.log(o.a); // 7
+console.log(o.b); // 8
+o.c = 50;
+console.log(o.a); // 25
+</pre>
+
+<p dir="rtl">خصائص الكائن هي :</p>
+
+<ul dir="rtl">
+ <li><code>o.a</code> — a number</li>
+ <li><code>o.b</code> — a getter سيعود ب <code>o.a</code> زائد 1</li>
+ <li><code>o.c</code> — a setter سيقوم بتعيين القيمة <code>o.a</code> بنصف القيمة الاتية من <code>o.c</code></li>
+</ul>
+
+<p dir="rtl">يمكنك استخدام  getters و setters مع الوظائف المنشاة مسبقا، لتحقيق ذالك يمكننا استخدام الوظيفة <code><a href="/en-US/docs/JavaScript/Reference/Global_Objects/Object/defineProperty" title="en-US/docs/Core JavaScript 1.5 Reference/Global
+Objects/Object/defineProperty">Object.defineProperty</a></code> او الوظيفة القديمة <code><a href="/en-US/docs/JavaScript/Reference/Global_Objects/Object/defineGetter" title="en-US/docs/Core JavaScript 1.5 Reference/Global
+Objects/Object/defineGetter">Object.prototype.__defineGetter__</a></code></p>
+
+<p dir="rtl">يبين الكود التالي كيف ان  getters و setters بامكانها ان ترث ال  {{jsxref("Date")}} prototype لاضافة الخاصية year الى جميع ال instances الخاص بالكائن Date المنشا مسبقا، ولهذا سنقوم باستخدام بعض الوظائف الخاصة ب Date ك getFullYear و setFullYear :</p>
+
+<pre class="brush: js">var d = Date.prototype;
+Object.defineProperty(d, 'year', {
+ get: function() { return this.getFullYear(); },
+  set: function(y) { this.setFullYear(y); }
+});
+</pre>
+
+<p dir="rtl">تبين التعليمة البرمجية التالية كيفية استخدام الخاصية year الجديدة التي تم انشاؤها عن طريق getters و setters:</p>
+
+<pre class="brush: js">var now = new Date();
+console.log(now.year); // 2000
+now.year = 2001; // 987617605170
+console.log(now);
+// Wed Apr 18 11:13:25 GMT-0700 (Pacific Daylight Time) 2001
+</pre>
+
+<p dir="rtl">بصفة عامة،  getters و setters يمكن ان تكون:</p>
+
+<ul dir="rtl">
+ <li>معرفة باستخدام <a href="#استخدام object initializers">object initializers</a>,  او</li>
+ <li>ان تضاف في وقت لاحق إلى أي كائن في أي وقت باستخدام   getters او setters.</li>
+</ul>
+
+<p dir="rtl">عندما سنقوم بانشاء getters و setters باستخدام ال استخدام <a href="#استخدام object initializers">object initializers</a> كل ما عليك القيام به هو البذء بانشاء الوظيفة getter اولا ومن تم تعريفها ب get وتليها الوظيفة setter وتعريفها ب set، وبالطبع، الوظيفة getter لا تحتاج الى اي باراميتر، فيما ستحتاج الوظيفة setter لبراميتر واحد وهو القيمة الجديدة ل set. فعلى سبيل المثال:</p>
+
+<pre class="brush: js">var o = {
+ a: 7,
+ get b() { return this.a + 1; },
+ set c(x) { this.a = x / 2; }
+};
+</pre>
+
+<p dir="rtl">getters او setters. يمكن أيضا أن تضاف إلى كائن ما في أي وقت بعد انشائه باستخدام الوظيفة Object.defineProperties، البراميتر الأول لهذه الوظيفة هو الكائن الذي تريد انشاء ال getter او setter له. البراميتر الثاني عبارة عن كائن يمثل الخصائص التي ستضاف الى الكائن الهدف ويتكون من مفتاح الخاصية، وهو اسم ال  getter او ال setter، وقيمة الخاصية، وهي عبارة عن كائن لتعريف وظائف ال  getter او ال setter. لدينا هنا نفس المثال السابق يبين بجلاء ما تحدثنا عنه:</p>
+
+<pre class="brush: js">var o = { a: 0 };
+
+Object.defineProperties(o, {
+    'b': { get: function() { return this.a + 1; } },
+    'c': { set: function(x) { this.a = x / 2; } }
+});
+
+o.c = 10; // Runs the setter, which assigns 10 / 2 (5) to the 'a' property
+console.log(o.b); // Runs the getter, which yields a + 1 or 6
+</pre>
+
+<p dir="rtl">اي من هذه الاساليب هي الانسب ؟<br>
+ <span class="short_text" id="result_box" lang="ar"><span>إذا ذهبت</span> <span>بالفعل ل</span><span>مهيئ</span> <span>الكائن</span> <span>عند تعريف</span> <span>ال</span></span> prototype فانت بحاجة الى الاسلوب الاول هذا الاسلوب محكم وبسيط. ومع ذالك، اذا كنت تنوي اضافة  getters و setters لاحقا بسبب انك لا تريد انشاء prototype او كائن معين سيكون افضل خيار هو الخيار الثاني. الخيار الثاني ربما يكون أفضل ويمثل الطابع الدينامي للجافا سكريبت، ولكن  يمكن ان يجعل الكود صعب القراءة والفهم.</p>
+
+<h2 dir="rtl" id="حذف_الخصائص">حذف الخصائص</h2>
+
+<p dir="rtl">يمكنك حذف الخصائص الغير موروثة باستخدام الكلمة المحجوزة <code><a href="/en-US/docs/Web/JavaScript/Reference/Operators/delete">delete</a></code> التعليمة البرمجية التالية توضح كيف يتم ذالك:</p>
+
+<pre class="brush: js">// Creates a new object, myobj, with two properties, a and b.
+var myobj = new Object;
+myobj.a = 5;
+myobj.b = 12;
+
+// Removes the a property, leaving myobj with only the b property.
+delete myobj.a;
+console.log ('a' in myobj); // yields "false"
+</pre>
+
+<p dir="rtl">يمكنك ايضا استخدام delete لحذف متغير عام، شرط ان لا يكون هذا المتغير معرف بواسطة الكلمة المحجوزة var.</p>
+
+<pre class="brush: js">g = 17;
+delete g;
+</pre>
+
+<h2 dir="rtl" id="مقارنة_الكائنات">مقارنة الكائنات</h2>
+
+<p dir="rtl">في جافا سكريبت، الكائنات تعمل كمرجع. لا يمكن المساوات بين كائنين مختلفين، حتى وان كان لديهما نفس القيم لنفس الخصائص. سيكون هناك تكافؤ فقط إذا تم مقارنة كائن بحد ذاته.</p>
+
+<pre class="brush: js">// Two variables, two distinct objects with the same properties
+var fruit = {name: 'apple'};
+var fruitbear = {name: 'apple'};
+
+fruit == fruitbear; // return false
+fruit === fruitbear; // return false</pre>
+
+<pre class="brush: js">// Two variables, a single object
+var fruit = {name: 'apple'};
+var fruitbear = fruit; // assign fruit object reference to fruitbear
+
+// here fruit and fruitbear are pointing to same object
+fruit == fruitbear; // return true
+fruit === fruitbear; // return true
+</pre>
+
+<pre class="brush: js">fruit.name = 'grape';
+console.log(fruitbear); // yields { name: "grape" } instead of { name: "apple" }
+</pre>
+
+<p dir="rtl">لمزيد من المعلومات حول عوامل المقارنة، شاهد <a href="/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators">Comparison operators</a>.</p>
+</div>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li>To dive deeper, read about the <a href="/en-US/docs/Web/JavaScript/Guide/Details_of_the_Object_Model">details of javaScript's objects model</a>.</li>
+ <li>To learn about ECMAScript 2015 classes (a new way to create objects), read the <a href="/en-US/docs/Web/JavaScript/Reference/Classes">JavaScript classes</a> chapter.</li>
+</ul>
+
+<p>{{PreviousNext("Web/JavaScript/Guide/Regular_Expressions", "Web/JavaScript/Guide/Details_of_the_Object_Model")}}</p>
diff --git a/files/ar/web/javascript/guide/الدوال/index.html b/files/ar/web/javascript/guide/الدوال/index.html
new file mode 100644
index 0000000000..af934b397d
--- /dev/null
+++ b/files/ar/web/javascript/guide/الدوال/index.html
@@ -0,0 +1,698 @@
+---
+title: الدوال
+slug: Web/JavaScript/Guide/الدوال
+tags:
+ - الدوال
+ - جافا سكريبت
+ - دليل
+translation_of: Web/JavaScript/Guide/Functions
+---
+<div>{{jsSidebar("JavaScript Guide")}} {{PreviousNext("Web/JavaScript/Guide/Loops_and_iteration", "Web/JavaScript/Guide/Expressions_and_Operators")}}</div>
+
+<p class="summary" dir="rtl">الدوال هي واحدة من اللبنات الأساسية في جافاسكريبت. الدالة، هي عبارة عن مجموعة من التعليمات البرمجية التي تؤدي وظيفة معينة. حتى تتمكن من إستخدام الدالة، عليك أولا تعريفها في مكان ما من النطاق الذي تود إستدعائها منه.</p>
+
+<div style="font-size: 15; font-family: 'tahoma';">
+<p dir="rtl">يمكنك القاء نظرة في <a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Reference/%D8%A7%D9%84%D8%AF%D9%88%D8%A7%D9%84">مرجع مفصل عن دوال الجافاسكريبت</a> حتى تتعرف على تفاصيل اكثر.</p>
+
+<h2 dir="rtl" id="انشاء_الدوال">انشاء الدوال</h2>
+
+<h3 dir="rtl" id="الاعلان_عن_الدوال_-_الصيغة_الافتراضية_-_Function_declarations">الاعلان عن الدوال - الصيغة الافتراضية - Function declarations</h3>
+
+<p dir="rtl"><strong>تعريف الدالة</strong>: تتكون الدالة من الكلمة المحجوزة <a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Reference/Statements/function">function</a>، متبوعة بـ :</p>
+
+<ul dir="rtl">
+ <li><strong>إسم الدالة</strong>.</li>
+ <li>قائمة <strong>بارامترات</strong> الدالة، محصورة بين قوسين ويفصل بينها بفواصل.</li>
+ <li>تعليمات الجافاسكريبت التي تُعرف الدالة، داخل <strong>الأقواس </strong>المتعرجة {}.</li>
+</ul>
+
+<p dir="rtl">على سبيل المثال، الكود التالي يعرف دالة بسيطة تسمى <code>square</code> :</p>
+
+<pre class="brush: js">function square(number) {
+ return number * number;
+}
+</pre>
+
+<p dir="rtl">الدالة <code>square</code> تمتلك بارامتر واحد، هو <code>number</code>. وتعليمة برمجية واحدة تقوم بإرجاع بارامتر الدالة <code>number</code> مضروباً في نفسه. والتعليمة <a href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Reference/Statements/return">return </a>تحدد القيمة التي سترجعها الدالة.</p>
+
+<pre class="brush: js">return number * number;
+</pre>
+
+<p dir="rtl">يتم تمرير البارامترات الاولية <a class="glossaryLink" href="https://developer.mozilla.org/ar/docs/Web/JavaScript/Guide/Grammar_and_types#%D9%87%D9%8A%D8%A7%D9%83%D9%84_%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA_%D9%88%D8%A7%D9%84%D8%A3%D9%86%D9%88%D8%A7%D8%B9_-_Data_structures_and_types" title="primitives: A primitive (primitive value, primitive data type) is data that is not an object and has no methods. In JavaScript, there are 6 primitive data types: string, number, boolean, null, undefined, symbol (new in ECMAScript 2015).">primitives</a> <code>(</code>كالسلاسل الحرفية، الاعداد...الخ<code>)</code> الى الدالة، بوسيلة تسمى، <strong>الاستدعاء بالقيمة</strong>، <a class="external external-icon" href="https://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_value"> call by value </a> وهي، ان يتم تحليل <strong><code>argument</code></strong> الدالة، والقيمة الناتجة سَتُرسل <strong>نسخة</strong> منها فقط إلى المتغير المستقبل (بارامتر الدالة)، بعد ذالك تقوم الدالة بتخزين هذه القيمة في الذاكرة، ثم، إذا كانت الدالة قادرة على تعيين القيم للبارامترات الخاصة بها، تبدا بالعمل على هذه النسخة فقط، دون <strong>تغيير</strong> اي شئ في قيمة المتغير الاصلي.</p>
+
+<p dir="rtl">في المثال التالي، لدينا المتغير <code>value</code> سنقوم بتمريره إلى الدالة square. ثم ضمن الدالة square سيتم إنشاء نسخة جديدة، وهكذا، حتى وان قمنا بتغيير القيمة داخل الدالة، فلن يؤثر هذا على قيمة المتغير الأصلي الذي تم تعريفه خارج الدالة. لان هذا التغيير لن يكون مرئيا خارج الدالة:</p>
+
+<pre class="brush: js">function square(number) { // parameter = recipient
+ return number * number;
+}
+var value = 10;
+square(value); // argument = Sender
+document.write(value); // log: 10
+</pre>
+
+<p dir="rtl">على عكس المثال السابق، اذا قمت بتمرير كائن (مثلا، قيمة غير اولية ك {{jsxref("Array")}} او كائن معرف من قبل المستخدم) كبارامتر، وقامت الدالة بتغيير خصائص الكائن، سيكون هذا التغيير مرئيا خارج الدالة:</p>
+
+<pre class="brush: js">function myFunc(theObject) {
+ theObject.make = "Toyota";
+}
+
+var mycar = {make: "Honda", model: "Accord", year: 1998};
+var x, y;
+
+x = mycar.make; // x gets the value "Honda"
+
+myFunc(mycar);
+y = mycar.make; // y gets the value "Toyota"
+ // (the make property was changed by the function)
+</pre>
+
+<h3 dir="rtl" id="الاعلان_عن_الدوال_بصيغة_ال_Function_expressions">الاعلان عن الدوال بصيغة ال Function expressions</h3>
+
+<p dir="rtl">في حين ان الدالة اعلاه تم الاعلان عنها بصيغة  <strong><code>function declaration</code></strong>، يمكن ايضا انشاء الدوال بصيغة ال <strong><code>function expression</code></strong>. كما يمكن ايضا للدوال ان تكون بصيغة ال <code><strong>anonymous</strong></code> (دوال مجهولة الاسم). على سبيل المثال، الدالة <code>square</code> يمكن تعريفها ايضا بصيغة ال <strong><code>function expression</code></strong> على النحو التالى:</p>
+
+<pre class="brush: js">var square = function(number) { return number * number };
+var x = square(4) // x gets the value 16</pre>
+
+<p dir="rtl">يمكن تعيين اسم للدوال بصيغة ال <code>function expression</code>، لجعل الدالة تعيد استدعاء ذاتها (الاستدعاء الداتي)، أو استخدامه في المنقح <a href="/en-US/docs/Web/JavaScript/Reference/Statements/debugger">debugger</a>. او لتعقب اخطاء الدالة من خلال <a class="external external-icon" href="https://en.wikipedia.org/wiki/Stack_trace"> stack traces</a>.</p>
+
+<pre class="brush: js">var factorial = function fac(n) { return n&lt;2 ? 1 : n*fac(n-1) };
+
+console.log(factorial(3));
+</pre>
+
+<p dir="rtl">يمكنك تمرير دالة كبارامتر لدالة اخرى. يظهر المثال التالي الدالة <code>map</code> تستخدم دالة اخرى كبارامتر اول لها :</p>
+
+<pre class="brush: js">function map(f,a) {
+ var result = [], // Create a new Array
+ i;
+ for (i = 0; i != a.length; i++)
+ result[i] = f(a[i]);
+ return result;
+}
+</pre>
+
+<p dir="rtl">طريقة استخدامها مع الصيغة <strong><code>function expression:</code></strong></p>
+
+<pre class="brush: js">var multiply = function(x) { return x * x * x; };
+map(multiply, [0, 1, 2, 5, 10]);
+</pre>
+
+<p dir="rtl">طريقة استخدامها مع الصيغة <code><strong>anonymous function</strong></code> مباشرة:</p>
+
+<pre class="brush: js">map(function(x) {return x * x * x}, [0, 1, 2, 5, 10]);
+</pre>
+
+<p><code>returns [0, 1, 8, 125, 1000].</code></p>
+
+<p dir="rtl">في الجافاسكريبت يمكن الاعلان عن دالة اعتمادا على شرط. على سبيل المثال، ستقوم التعليمة البرمجية التالية بالاعلان عن الدالة <code>myFunc</code> شرط ان يكون  <code>num</code> يساوي 0:</p>
+
+<pre class="brush: js">var myFunc;
+if (num === 0){
+ myFunc = function(theObject) {
+ theObject.make = "Toyota"
+ }
+}</pre>
+
+<p dir="rtl">بالإضافة إلى انشاء الدوال كما هو موضح اعلاه، يمكنك ايضا استخدام الصيغة {{jsxref("Function")}} <strong><code>constructor</code></strong> لانشاء دوال من خلال السلاسل النصية، تنفذ وقت التشغيل، تماما كما في  {{jsxref("eval", "()eval")}}.</p>
+
+<p dir="rtl">هناك فرق بين الدوال (<strong><code>functions</code></strong>) والوظائف (<strong><code>methods</code></strong>)، الدوال هي ما نناقشه في هذا الفصل، والوظائف هي تلك المرتبطة بالكائنات (قيمة لخاصية في الكائن)، اقرأ المزيد حول الكائنات والوظائف <a href="/ar/docs/Web/JavaScript/Guide/Working_with_Objects" title="en-US/docs/JavaScript/Guide/Working with Objects">العمل مع الكائنات <sub>[عربي]</sub></a>.</p>
+
+<h2 dir="rtl" id="إستدعاء_الدوال">إستدعاء الدوال</h2>
+
+<p dir="rtl">تعريف الدالة يعني ببساطة إعطاء إسم لها وتحديد ماستقوم به عندما يتم إستدعائها. أما إستدعاء الدالة فيقوم فعليا بتنفيذ الإجراءات مع البرامترات المحددة. على سبيل المثال، إذا قمت بتعريف الدالة square، فستقوم بإستدعائها كما يلي :</p>
+
+<pre class="brush: js">square(5);
+</pre>
+
+<p dir="rtl">تقوم التعليمة البرمجية اعلاه باستدعاء الدالة مع البارامتر 5. ثم تقوم بتنفيذ التعليمات البرمجية المرتبطة بها وترجع القيمة 25.</p>
+
+<p dir="rtl">الدوال يجب ان تنتمي للنطاق الذي استدعيت فيه، ولان الدوال بصيغة <strong><code>function declaration</code></strong> ترفع اعلى النطاق، فمن الممكن أن تعرف في وقت لاحق، كما في المثال التالي:</p>
+
+<pre class="brush: js">console.log(square(5));
+/* ... */
+function square(n) { return n*n }
+</pre>
+
+<p dir="rtl">نطاق الدالة هو اما الدالة التي تم الإعلان عنها، أو البرنامج بأكمله إذا تم الاعلان عنها في المستوى العلوي.</p>
+
+<div class="note">
+<p dir="rtl"><strong>ملاحظة:</strong> سيعمل هذا فقط عندما يتم تعريف الدالة باستخدام الصيغة (مثل <code>{}</code><code>()function funcName</code>). اما التعليمة البرمجية التالية فسوف لن تعمل، وهذا يعني ان الية الرفع (hoisting) بالنسبة للدوال تعمل فقط مع الدوال ذات الصيغة function declaration ولا تعمل مع الدوال ذات الصيغة function expression.</p>
+</div>
+
+<pre class="brush: js example-bad">console.log(square); // square is hoisted with an initial value undefined.
+console.log(square(5)); // TypeError: square is not a function
+var square = function(n) {
+ return n * n;
+}
+</pre>
+
+<p dir="rtl"><code>arguments</code> الدالة لا تقتصر على الاعداد او السلاسل الحرفية فقط، يمكنك تمرير الكائنات ايضا. في القسم الخاص بالعمل مع الكائنات <a href="/ar/docs/Web/JavaScript/Guide/Working_with_Objects#استخدام_this_كمرجع_للكائنات" title="https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Working_with_Objects#Objects_and_Properties">العمل مع الكائنات</a><a href="/ar/docs/Web/JavaScript/Guide/Working_with_Objects" title="en-US/docs/JavaScript/Guide/Working with Objects"><sub>[عربي]</sub></a> توجد دالة باسم <code>()</code><code>showProps</code> توضح كيفية تمرير <strong>كائن</strong> ك <code>argument</code> للدالة.</p>
+
+<p dir="rtl">يمكن للدالة أن تقوم بإستدعاء ذاتها. على سبيل المثال، هذه الدالة تقوم بحساب المضروب بشكل متكرر :</p>
+
+<pre class="brush: js">function factorial(n){
+ if ((n === 0) || (n === 1))
+ return 1;
+ else
+ return (n * factorial(n - 1));
+}
+</pre>
+
+<p dir="rtl">في كل مرة تقوم الدالة باستدعاء ذاتها، يتم خصم 1 من قيمة البرامتر الممرر، ويتم ضرب القيمة المحصلة في القيمة العائدة من جديد، فرضا، اذا كانت القيمة الممررة 5، الاستدعاء الاول سيكون 5، الاستدعاء الثاني سيكون 4، الاستدعاء الثالث سيكون 3، وهكذا، ويتم ضرب هذه القيم العائدة مع بعضها البعض. بهذا الشكل :  5 * 4 * 3 * 2 * 1 == 120</p>
+
+<p dir="rtl">امثلة متنوعة:</p>
+
+<pre class="brush: js">var a, b, c, d, e;
+a = factorial(1); // a gets the value 1 // 1 * 1
+b = factorial(2); // b gets the value 2 // 2 * 1
+c = factorial(3); // c gets the value 6 // 3 * 2 * 1
+d = factorial(4); // d gets the value 24 // 4 * 3 * 2 * 1
+e = factorial(5); // e gets the value 120 // 5 * 4 * 3 * 2 * 1
+</pre>
+
+<p dir="rtl">هناك طرق أخرى لاستدعاء الدوال. غالبا ما تكون هناك حالات تحتاج الى دالة تُستدعى بشكل ديناميكي، حيث يمكن التعامل مع مجموعة من ال <code>arguments</code>، وحيث سياق <strong><code>(context)</code></strong> استدعاء الدالة يجب ان ينشا في وظيفة لكائن يحدد وقت التشغيل. وهذا يبين ان الدوال هي نفسها كائنات، وهذه الكائنات بدورها لديها وظائف ( شاهد {{jsxref("Function")}} object). من ضمن هذه الوظائف، الوظيفة {{jsxref("Function.apply", "()apply")}} يمكن استخدامها لتحقيق هذه الاهداف.</p>
+
+<h2 class="deki-transform" dir="rtl" id="نطاق_الدالة">نطاق الدالة</h2>
+
+<p dir="rtl">المتغيرات المعرفة داخل الدالة لايمكن الوصول إليها من أي مكان آخر خارج الدالة، لأن هذه المتغيرات معرفة فقط داخل نطاق الدالة. على كل، يمكن للدالة الوصول إلى كل المتغيرات والدوال المعرفة في النطاق المعرفة فيه الدالة. بعبارة أخرى، الدالة المعرفة في النطاق العام تستطيع الوصول إلى كل المتغيرات المعرفة في النطاق العام. الدالة المعرفة داخل دالة أخرى يمكنها أيضا الوصول إلى كل المتغيرات المعرفة في دالتها الأم وكل المتغيرات الأخرى التي يمكن للدالة الأم الوصول لها.</p>
+
+<pre class="brush: js">// المتغيرات التالية معرفة في النطاق العام
+var num1 = 20,
+ num2 = 3,
+ name = "Chamahk";
+
+// هذه الدالة معرفة في النطاق العام
+function multiply() {
+ return num1 * num2;
+}
+
+multiply(); // Returns 60
+
+// مثال على دالة داخل دالة
+function getScore () {
+ var num1 = 2,
+ num2 = 3;
+
+ function add() {
+ return name + " scored " + (num1 + num2);
+ }
+
+ return add();
+}
+
+getScore(); // Returns "Chamahk scored 5"
+</pre>
+
+<h2 dir="rtl" id="النطاق_ومكدس_الدوال">النطاق ومكدس الدوال</h2>
+
+<h3 dir="rtl" id="الاستدعاء_الذاتي">الاستدعاء الذاتي</h3>
+
+<p dir="rtl">يمكن للدالة ان تستدعي داتها بثلاثة طرق:</p>
+
+<ol dir="rtl">
+ <li>من خلال اسم الدالة</li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Functions/arguments/callee">arguments.callee</a></code></li>
+ <li>من خلال المتغيرات التي تشير إلى الدالة</li>
+</ol>
+
+<p dir="rtl">على سبيل المثال، انظر الدالة التالية:</p>
+
+<pre class="brush: js">var foo = function bar() {
+ // statements go here
+};
+</pre>
+
+<p dir="rtl">تضمين الاستدعاء الذاتي داخل جسم الدالة <strong><code>bar</code></strong>:</p>
+
+<ol>
+ <li><code>()bar</code></li>
+ <li><code>()arguments.callee</code></li>
+ <li><code>()foo</code></li>
+</ol>
+
+<p dir="rtl">الدوال التي تقوم باستدعاء نفسها تسمى <em>recursive function</em>. الاستدعاء الداتي يشبه آلِية الحلقات في بعض النواحي، كلاهما ينفذان التعليمات البرمجية نفسها عدة مرات، وايضا كلاهما يتطلبان تعبيرا شرطيا (لتجنب التكرار الى ما لا نهاية، او بالاحرى، الاستدعاء الذاتي الى ما لا نهاية في حالتنا هذه). على سبيل المثال، الحلقة التالية:</p>
+
+<pre class="brush: js">var x = 0;
+while (x &lt; 10) { // "x &lt; 10" is the loop condition
+ // do stuff
+ x++;
+}
+</pre>
+
+<p dir="rtl">المثال التالي يبين دالة تقوم بالاستدعاء الذاتي، يمكنها محاكات الحلقة :</p>
+
+<pre class="brush: js">function loop(x) {
+ if (x &gt;= 10) // "x &gt;= 10" is the exit condition (equivalent to "!(x &lt; 10)")
+ return;
+ // do stuff
+ loop(x + 1); // the recursive call
+}
+loop(0);
+</pre>
+
+<p dir="rtl">ومع ذلك، لا يمكن أن تكون بعض الخوارزميات حلقات تكرارية بسيطة. على سبيل المثال، الوصول الى كافة العقد <code>nodes</code> في بنية الشجرة <code><a href="/en-US/docs/DOM">DOM</a></code> سيكون اسهل واكثر تفصيلا باستخدام الاستدعاء الذاتي:</p>
+
+<pre class="brush: js">function walkTree(node) {
+ if (node == null) //
+ return;
+ // do something with node
+ for (var i = 0; i &lt; node.childNodes.length; i++) {
+ walkTree(node.childNodes[i]);
+ }
+}
+</pre>
+
+<p dir="rtl">على عكس الحلقات التكرارية البسيطة، والتي تقوم بالتكرار السطحي على <code><a href="/en-US/docs/DOM">DOM</a></code>، تمكننا دوال الاستدعاء الداتي من تنفيذ عدة استدعاءات، كل استدعاء داتي ينتج عنه العديد من الاستدعاءات الفرعية، بمعنى ان هذا النوع من الدوال يمكنها الوصول الى عمق ال <code><a href="/en-US/docs/DOM">DOM</a></code>. لتتيح لك امكانية التعامل مع كل جزئية فيه. كما يوضح المثال التالي:</p>
+
+<pre class="brush: js">var walkTree = function recycle( node, fn ) {
+ fn( node );
+ node = node .firstChild;
+ while( node ){
+ recycle( node, fn );
+ node = node.nextSibling;
+ }
+}
+
+walkTree( document.body , function( node ){
+ if( node.nodeType == 1 ){
+ // do something with [object HTMLElements]
+ }
+ if( node.nodeType == 3 ){
+ // do something with [object Text]
+ }
+});
+</pre>
+
+<p dir="rtl">كلا الدالتين اعلاه، تؤدي نفس الغرض، لا اختلاف بينهما، الفرق الوحيد هو شكل بناء الدالة، حيث بنيت الدالة الاولى على طريقة ال  <strong><code>function declaration</code></strong>  فيما بنيت الدالة الثانية على شكل، ال  <strong><code>function expression</code></strong>  وال  <strong><code>anonymous function</code></strong>، وكلاهما تنتهج اسلوب <em>recursive function.</em></p>
+
+<p dir="rtl">من الناحية النظرية، من الممكن تحويل أي خوارزمية الاستدعاء الذاتي الى خوارزمية الاستدعاء العادي (مع الحلقات، على سبيل المثال). عموما، المنطق الناتج أكثر تعقيداً ويتطلب استخدام  <a class="external external-icon" href="https://ar.wikipedia.org/wiki/%D9%85%D9%83%D8%AF%D8%B3_(%D8%A8%D9%86%D9%8A%D8%A9_%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA)">المكدس</a>. الاستدعاء الذاتي أيضا يستخدم المكدس، مكدس الدالة function <code>stack</code>.</p>
+
+<p dir="rtl">سلوك مكدس الذاكرة المؤقتة يمكن أن ينظر إليه كما في المثال التالي:</p>
+
+<pre class="brush: js">function foo(i) {
+ if (i &lt; 0)
+ return;
+ console.log('begin:' + i);
+ foo(i - 1);
+ console.log('end:' + i);
+}
+foo(3);
+
+// Output:
+
+// begin:3
+// begin:2
+// begin:1
+// begin:0
+// end:0
+// end:1
+// end:2
+// end:3</pre>
+
+<h3 dir="rtl" id="الدوال_المتداخلة_و_الاغلاق_(closures)">الدوال المتداخلة  و الاغلاق (closures)</h3>
+
+<p dir="rtl">يمكن انشاء دالة داخل دالة اخرى. الدالة الداخلية هي دالة خاصة <strong><code>private</code></strong> بالدالة الخارجة. الدالة الداخلية تشكل الاغلاق <strong><code>closure</code></strong>، والإغلاق هو فقط تعبير (عموما الاغلاق هو دالة). والذي يمكنه الوصول إلى المتغيرات المجانية free variables (المصطلح free variable يشير الى المتغيرات المستخدمة في الدالة، وهي ليست متغيرات محلية او بارامترات لهذه الدالة. بمعنى اخر هي متغيرات معرفة خارج الدالة وتستفيد منها الدالة، وهذا هو سبب تسميتها بالمتغيرات المجانية)،  كما يمكنه ايضا، الوصول الى اي شئ في البيئة التي ترتبط بها هذه المتغيرات المجانية.</p>
+
+<p dir="rtl">بما ان الدالة الداخلية هي <code>closure</code>. فهذا يعني انها تستطيع ان ترث البرامترات والمتغيرات من الدالة الخارجية. بمعنى اخر، الدالة الداخلية تمتلك النطاق الخاص بالدالة الخارجية.</p>
+
+<p dir="rtl">الخلاصة:</p>
+
+<ul dir="rtl">
+ <li>لايمكن الوصول إلى الدالة الداخلية الا من خلال التعليمات البرمجية الخاصة بالدالة الخارجية.</li>
+ <li>الدالة الداخلية تشكل الاغلاق <strong><code>closure</code></strong>: الدالة الداخلية يمكنها استخدام البرامترات والمتغيرات الخاصة بالدالة الخارجية، فيما لا يمكن للدالة الخارجية استخدام البرامترات والمتغيرات الخاصة بالدالة الداخلية.</li>
+</ul>
+
+<p dir="rtl">يظهر المثال التالي الدوال المتداخلة:</p>
+
+<pre class="brush: js">function addSquares(a,b) {
+ function square(x) {
+ return x * x;
+ }
+ return square(a) + square(b);
+}
+a = addSquares(2,3); // returns 13
+b = addSquares(3,4); // returns 25
+c = addSquares(4,5); // returns 41
+</pre>
+
+<p dir="rtl">بما ان الدالة الداخلية تشكل <strong><code>closure</code></strong>. فمن الضروري استدعاء الدالة الخارجية <strong>أولا،</strong> بعد ذالك يمكنك تحديد ال  <code>arguments</code> لكل منهما :</p>
+
+<pre class="brush: js">function outside(x) {
+ function inside(y) {
+ return x + y;
+ }
+ return inside;
+}
+fn_inside = outside(3); // Think of it like: give me a function that adds 3 to whatever you give it
+result = fn_inside(5); // returns 8
+
+result1 = outside(3)(5); // returns 8
+</pre>
+
+<h3 dir="rtl" id="الحفاظ_على_المتغيرات">الحفاظ على المتغيرات</h3>
+
+<p dir="rtl">في المثال اعلاه، لاحظ كيف تم الحفاظ على <strong><code>x</code></strong> عندما تم ارجاع الدالة <strong><code>inside</code></strong>. <strong>الاغلاق</strong> يحفاظ على البرامترات والمتغيرات في جميع النطاقات التي تشير إليه. مع كل استدعاء للدالة الخارجية، يمكنك تعيين <code>arguments</code> مختلفة، سيتم إنشاء إغلاق جديد مع كل استدعاء للدالة <strong><code>outside</code></strong>. يمكن تحرير الذاكرة فقط عندما يكون عائد الدلة <code>inside</code> غير متاحا.</p>
+
+<p dir="rtl">وهذا لا يختلف عن تخزين المراجع في كائنات أخرى، ولكن غالبا ما يكون أقل وضوحاً نظراً لعدم تعيين المراجع مباشرة ولا يمكن فحصها.</p>
+
+<h3 dir="rtl" id="الدوال_الاكثر_تداخلا">الدوال الاكثر تداخلا</h3>
+
+<p dir="rtl">الدوال يمكن ان تكون اكثر تداخلا، بمعنى، الدالة <code>(A)</code> تحتضن الدالة <code>(B)</code>، والدالة <code>(B)</code> تحتضن الدالة <code>(C)</code>. هنا كل من الدالة <code>B و C</code> تشكل <strong><code>closures</code></strong>، وهكذا <code>B</code> يمكنها الوصول الى  <code>A</code>، و  <code>C</code> يمكنها الوصول الى <code>B</code>. بالاضافة الى ذالك، <code>C</code> يمكنها الوصول الى <code>B و A</code>، وبالتالي، الإغلاق يمكن أن يحتوي على عدة نطاقات. وهذا ما يسمى بسلسلة النطاق <em>scope chaining</em>. (سيتم شرح لماذا يطلق عليه "<code>تسلسل</code>" في وقت لاحق).</p>
+
+<p dir="rtl">انظر في المثال التالي:</p>
+
+<pre class="brush: js">function A(x) {
+ function B(y) {
+ function C(z) {
+ console.log(x + y + z);
+ }
+ C(3);
+ }
+ B(2);
+}
+A(1); // logs 6 (1 + 2 + 3)
+</pre>
+
+<p dir="rtl">في هذا المثال <code>C</code> تصل الى <strong><code>y</code></strong> الخاصة ب <code>B</code> وايضا الى <strong><code>x</code></strong> الخاصة ب <code>A</code>، أصبح هذا ممكناً لأن:</p>
+
+<ol dir="rtl">
+ <li><code>B</code> تشكل closure، وتمتلك <code>A</code>، بمعنى <code>B</code> يمكنها الوصول الى البارامترات والمتغيرات الخاصة ب <code>A</code>.</li>
+ <li><code>C</code> تشكل <strong><code>closure</code></strong>، وتمتلك <code>B</code>.</li>
+ <li>بسبب ان <code>B</code> تمتلك <code>A</code>، فقد اصبح <code>C</code> يمتلك <code>A</code>، وعليه ف <code>C</code> يمكنه الوصول الى البارامترات والمتغيرات الخاصة ب <code>B و A</code>. بعبارات أخرى، <code>C</code> سلسلة نطاقات ل <code>B</code> و <code>A</code> في هذا الترتيب.</li>
+</ol>
+
+<p dir="rtl">العكس ليس صحيحاً. <code>A</code> لا يمكنها الوصول الى <code>C</code>، لان <code>A</code> لا يمكنها الوصول لاي من البارامترات او المتغيرات الخاصة ب <code>B</code>. (فيما <code>C</code> هي متغير لها). وهكذا، <code>C</code> ستصبح خاصة <strong><code>private</code></strong> فقط ب <code>B</code>.</p>
+
+<h3 dir="rtl" id="تضارب_الاسماء">تضارب الاسماء</h3>
+
+<p dir="rtl">عند وجود اثنين من البارامترات أو المتغيرات التي تحمل نفس <strong>الاسم</strong> في نطاقات الاغلاق، فهذا يسمى <strong>تضارب في الاسماء</strong>، وفي هذه الحالة، ستكون الاسبقية للنطاقات الاكثر عمقا في استخدام هذا <strong>الاسم</strong>، اما بالنسبة للنطاقات الأكثر سطحية سوف تحظى بأولوية أدنى لاستخدام هذا الاسم، من وجهة نظر سلسلة النطاق، النطاق الاول في السلسلة هو النطاق الاكثر عمقا ( اسفل السلسلة)، والنطاق الاخير في السلسلة هو النطاق الاكثر سطحية (اعلى السلسلة). شاهد المثال التالي:</p>
+
+<pre class="brush: js">function outside() {
+ var x = 10;
+ function inside(x) {
+ return x;
+ }
+ return inside;
+}
+result = outside()(20); // returns 20 instead of 10
+</pre>
+
+<p dir="rtl">يحدث تعارض الاسم  في التعليمة <strong><code>return</code></strong> <strong><code>x</code></strong>، وهو مابين الباراميتر <strong><code>x</code></strong> الخاص ب <strong><code>inside</code></strong> وبين المتغير <strong><code>x</code></strong> الخاص ب <strong><code>outside</code></strong>. سلسلة النطاق سترى الامر على هذا النحو <strong><code>{inside, outside, global object}</code></strong>. وبناءا عليه <strong><code>x</code></strong> الخاص ب <strong><code>inside</code></strong> سياخد الاسبقية على <strong><code>x</code></strong> الخاص ب <strong><code>outside</code></strong>، وبالتالي الناتج هو 20 (inside x) بدلا من 10 (outside x).</p>
+
+<h2 dir="rtl" id="الاغلاقات_-_Closures">الاغلاقات - Closures</h2>
+
+<p dir="rtl">الإغلاق هي واحدة من أقوى المميزات في جافا سكريبت. جافا سكريبت تسمح بتداخل الوظائف وتمنح الدوال الداخلية حق الوصول الكامل إلى كافة المتغيرات والدوال المعرفة داخل الدالة الخارجية (وجميع المتغيرات والدوال الأخرى التي يمكن للدالة الخارجية الوصول إليها). ومع ذالك، الدوال الخارجية لا يمكنها الوصول الى المتغيرات والدوال المعرفة داخل الدوال الداخلية. وهذا يوفر نوعا من الحماية للمتغيرات والدوال الداخلية. وأيضا، لأن الدوال الداخلية لديها حق الوصول إلى نطاق الدالة الخارجية، فالمتغيرات والدوال المعرفة داخل الدالة الخارجية ستدوم اطول من مدة تنفيذ الدالة الخارجىة، اذا تمكنت الدالة الداخلية ان تدوم أطول من الدالة الخارجية. يتم إنشاء الاغلاق عندما تكون الدالة الداخلية بطريقة أو بأخرى في متناول أي نطاق خارج الدالة الخارجية.</p>
+
+<pre class="brush: js">var pet = function(name) { // The outer function defines a paramrter called "name"
+ var getName = function() {
+ return name; // The inner function has access to the "name" paramrter of the outer function
+ }
+ return getName; // Return the inner function, thereby exposing it to outer scopes
+},
+myPet = pet("Vivie");
+
+myPet(); // Returns "Vivie"
+</pre>
+
+<p dir="rtl">من الناحية العملية، يمكن أن تكون المسالة أكثر تعقيداً من التعليمات البرمجية أعلاه. يمكن إرجاع كائن والذي سيحتوي على وظائف للتعامل مع المتغيرات الداخلية للدالة الخارجية:</p>
+
+<pre class="brush: js">var createPet = function(name) {
+ var sex;
+
+ return {
+ setName: function(newName) {
+ name = newName;
+ },
+
+ getName: function() {
+ return name;
+ },
+
+ getSex: function() {
+ return sex;
+ },
+
+ setSex: function(newSex) {
+ if(typeof newSex === "string" &amp;&amp; (newSex.toLowerCase() === "male" || newSex.toLowerCase() === "female")) {
+ sex = newSex;
+ }
+ }
+ }
+}
+
+var pet = createPet("Vivie");
+pet.getName(); // Vivie
+
+pet.setName("Oliver");
+pet.setSex("male");
+pet.getSex(); // male
+pet.getName(); // Oliver
+</pre>
+
+<p dir="rtl">في التعليمات البرمجية اعلاه، المتغير <code>name</code> الخاص بالدالة الخارجية يمكن الوصول اليه من الدوال الداخلية. من المعلوم ايضا، انه، ليس هناك طريقة أخرى للوصول إلى المتغيرات الداخلية إلا من خلال الدوال الداخلية. المتغيرات الداخلية الخاصة بالدوال االداخلية هي بمثابة مخازن آمنة بالنسبة للبارامترات و المتغيرات الخارجية. كما انها تتيح امكانية الوصول الى البيانات الداخلية بشكل دقيق وامن. بالنسبة للدوال، ليس من الضروري تعيينها إلى متغير أو حتى تسميتها.</p>
+
+<pre class="brush: js">var getCode = (function(){
+ var secureCode = "0]Eal(eh&amp;2"; // A code we do not want outsiders to be able to modify...
+
+ return function () {
+ return secureCode;
+ };
+})();
+
+getCode(); // Returns the secureCode
+</pre>
+
+<p dir="rtl">ومع ذلك، يجب الاحتراس جيدا من الوقوع في بعض الفخاخ عند استخدام عمليات الإغلاق. إذا كانت دالة مغلقة تعرف متغير بنفس الاسم، كاسم متغير في النطاق الخارجي، فلا توجد طريقة للإشارة إلى المتغير في النطاق الخارجي مرة أخرى.</p>
+
+<pre class="brush: js">var createPet = function(name) { // Outer function defines a variable called "name"
+ return {
+ setName: function(name) { // Enclosed function also defines a variable called "name"
+ name = name; // ??? How do we access the "name" defined by the outer function ???
+ }
+ }
+}
+</pre>
+
+<p dir="rtl">الكلمة المحجوزة <strong><code><a href="/en-US/docs/Web/JavaScript/Reference/Operators/this">this</a></code></strong> (في بعض الاحيان تسمى بالمتغير العجيب)، ينبغي التعامل معها بحذر في حالات <strong>الإغلاق</strong>. احذر، ف <code>this</code> تشير إلى السياق حيث سيتم استدعاء الدالة وليس إلى المكان حيث تم تعريف الدالة.</p>
+
+<h2 dir="rtl" id="استخدام_الكائن_arguments">استخدام الكائن arguments</h2>
+
+<p dir="rtl">يمكنك التعامل مع  <code>arguments</code> الدالة من الداخل، من خلال الكائن <strong><code>(arguments او الحجج</code></strong>). يمكنك معالجة ال  <code>arguments</code> الممررة الى الدالة على النحو التالي:</p>
+
+<pre class="brush: js">arguments[i]
+</pre>
+
+<p dir="rtl">حيث ان <strong><code>i</code></strong> هو الفهرس الرقمي لل <code>arguments</code>، ويبتدئ من <strong><code>0</code></strong>، وبالتالي، ال <code>argument</code> الاول الممرر الى الدالة سيكون <strong><code>arguments[0]</code></strong>. لمعرفة عدد ال <code>argument</code><strong><code>s</code></strong> الممررة نستخدم <strong><code>arguments.length</code></strong>.</p>
+
+<p dir="rtl">باستخدام الكائن <strong><code>arguments</code></strong>، يمكنك استدعاء دالة مع <code>arguments</code> أكثر من التي تم التصريح بها رسميا. وهي مفيذة جدا، خصوصا إذا كنت لا تعرف مسبقاً كم عدد ال  <code>arguments</code> التي ستمرر اثناء استدعاء الدالة. يمكنك استخدام <code>arguments.length</code> لمعرفة عدد البرامترات الممرة الى الدالة، حتى تتمكن بعد ذالك من التعامل معها من خلال الكائن <strong><code>arguments</code></strong>.</p>
+
+<p dir="rtl">على سبيل المثال، يمكننا انشاء دالة تقوم بوصل عدة سلاسل حرفية. ال <code>argument</code> الوحيد المحدد رسميا في الدالة، هو السلسلة الحرفية التي ستفصل بين باقي السلاسل الحرفية التي ستمرر ك <code>arguments</code> بعد ال <code>argument</code> الرسمي للدالة.  كما في المثال التالي:</p>
+
+<pre class="brush: js">function myConcat(separator) {
+ var result = "", // initialize list
+ i;
+ // iterate through arguments
+ for (i = 1; i &lt; arguments.length; i++) {
+ result += arguments[i] + separator;
+ }
+ return result;
+}
+</pre>
+
+<p dir="rtl">يمكنك تمرير اي عدد من ال <code>arguments</code> لهذه الدالة، وسترتبط ببعضها البعض من خلال ما سيمرر الى ال <code>argument</code> الرسمي:</p>
+
+<pre class="brush: js">// returns "red, orange, blue, "
+myConcat(", ", "red", "orange", "blue");
+
+// returns "elephant; giraffe; lion; cheetah; "
+myConcat("; ", "elephant", "giraffe", "lion", "cheetah");
+
+// returns "sage. basil. oregano. pepper. parsley. "
+myConcat(". ", "sage", "basil", "oregano", "pepper", "parsley");
+</pre>
+
+<div class="note">
+<p dir="rtl"><strong>ملاحظة:</strong> المتغير arguments هو شبه مصفوفة، ولكنه ليس مصفوفة. وانما يتصرف كالمصفوفة، يستخدم الفهرسة الرقمية، يستخدم الخاصية length، ومع ذالك، لا يمكنه استخدام الوظائف الخاصة بالمصفوفات مثل push او join ...الخ.</p>
+</div>
+
+<h4 dir="rtl" id="الفرق_بين_parameters_و_arguments">الفرق بين parameters و arguments</h4>
+
+<p dir="rtl"><strong><code>Function parameters</code></strong> او بارامترات الدالة، هي الأسماء المدرجة في تعريف الدالة. فيما <strong><code>Function arguments</code></strong> هي القيم الحقيقية التي تمرر إلى الدالة عند الاستدعاء <code>(</code>راجع التعريف والاستدعاء اعلى الصفحة<code>)</code>. انظر المثال التالي:</p>
+
+<pre class="brush: js">function foo( param1, param2, ...) // parameters {
+ // Do things
+}
+foo(arg1, arg2, ...); // arguments
+</pre>
+
+<div class="note">
+<p dir="rtl"><strong>ملاحظة:</strong> ال<strong> <code><a href="/en-US/docs/Glossary/Parameter">parameter</a></code></strong> هو متغير باسم معين يمرر الى الدالة. تستخدم الباراميترات لجلب ال <strong><code><a href="/en-US/docs/Web/JavaScript/Reference/Functions/arguments">arguments</a></code></strong> داخل الدوال.</p>
+</div>
+
+<p dir="rtl">راجع الكائن {{jsxref("Function")}} في مرجع الجافا سكريبت لمزيد من المعلومات.</p>
+
+<h2 dir="rtl" id="بارامترات_الدالة">بارامترات الدالة</h2>
+
+<p dir="rtl">بدأً من ECMAScript 6، أصبح هناك نوعان من البارامترات: البارامترات الإفتراضية وبقية البارامترات.</p>
+
+<h3 dir="rtl" id="البارامترات_الإفتراضية">البارامترات الإفتراضية</h3>
+
+<p dir="rtl">في الجافاسكريبت، القيمة الافتراضية لبرامترات الدوال هي <code>undefined</code>. ومع ذالك، في بعض الحالات، قد يكون من المفيد تعيين قيمة افتراضية مختلفة. البارامترات الافتراضية يمكنها تدارك الموقف.</p>
+
+<p dir="rtl">قبل ECMAScript 2015، كانت الاستراتيجية العامة لوضع الافتراضات هي اختبار قيمة البارامتر في جسم الدالة وتعيين قيمة له اذا كانت قيمته <code>undefined</code>. على سبيل المثال، في التعليمة البرمجية التالية، لم يتم تحديد قيمة للبارامتر <strong><code>b</code></strong> في الاستدعاء، وبالتالي قيمتة ستساوي <code>undefined</code>، عند اختبار <code>(a * b)</code> ستعود الدالة <strong><code>multiply</code></strong> ب <code>NaN</code>. لتجنب هذا،  يقوم السطر الثاني في التعليمة البرمجية اسفله بتعيين قيمة افتراضية للبارامتر <strong><code>b</code></strong>:</p>
+
+<pre class="brush: js">function multiply(a, b) {
+ b = typeof b !== 'undefined' ? b : 1;
+
+ return a*b;
+}
+
+multiply(5); // 5
+</pre>
+
+<p dir="rtl">ابتداءا من ECMAScript 2015، اصبح من الممكن عمل اعدادات افتراضية على غرار <code>(php)</code>، والاختبار في جسم الدالة لم يعد ضروريا. الان، ببساطة يمكنك تعيين <strong><code>1</code></strong> كقيمة افتراضية للبارامتر <strong><code>b</code></strong> في تعريف الدالة:</p>
+
+<pre class="brush: js">function multiply(a, b = 1) {
+ return a*b;
+}
+
+multiply(5); // 5</pre>
+
+<p dir="rtl">لمزيد من التفاصيل، راجع  <a href="/en-US/docs/Web/JavaScript/Reference/Functions/Default_parameters">default parameters</a> في مرجع الجافاسكريبت.</p>
+
+<h3 dir="rtl" id="بقية_البارامترات_-_rest_parameter">بقية البارامترات - rest parameter</h3>
+
+<p dir="rtl">الصيغة <a href="/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters">rest parameter</a> تسمح بتمثيل عدد غير محدود من ال <code>arguments</code> كمصفوفة. في هذا المثال، نستخدم بقية البارامترات لتجميع ال <code>arguments</code> ابتداءا من البرامتر الثاني لغاية النهاية. ثم نقوم بضربها باول بارامتر. هذا المثال يستخدم دالة السهم، والتي سندرسها في القسم التالي.</p>
+
+<pre class="brush: js">function multiply(multiplier, ...theArgs) {
+ return theArgs.map(x =&gt; multiplier * x);
+}
+
+var arr = multiply(2, 1, 2, 3);
+console.log(arr); // [2, 4, 6]</pre>
+
+<h2 dir="rtl" id="دوال_السهم_-_Arrow_functions">دوال السهم - Arrow functions</h2>
+
+<p dir="rtl"><a href="/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions">تعبيرات دوال السهم </a>تسمح لك باستخدام تعبيرا أكثر إيجازاً من التعبير عن الوظائف الكلاسيكية. والقيمة <code>this</code> يتم ربطها بشكل نحوي. فيما تكون دوال السهم مجهولة الاسم <code>anonymous</code>. راجع ايضا هذه المدونة  <a href="https://hacks.mozilla.org/2015/06/es6-in-depth-arrow-functions/">ES6 In Depth: Arrow functions</a>.</p>
+
+<p dir="rtl">اثنين من العوامل التي أثرت في مقدمة دوال السهم: الدوال المختصرة و lexical <code>this</code>.</p>
+
+<h3 dir="rtl" id="الدوال_المختصرة">الدوال المختصرة</h3>
+
+<p dir="rtl">في بعض الأنماط الوظيفية، الدوال المختصرة هي موضع ترحيب. قارن التعليمات البرمجية التالية:</p>
+
+<pre class="brush: js">var a = [
+ "Hydrogen",
+ "Helium",
+ "Lithium",
+ "Beryl­lium"
+];
+
+var a2 = a.map(function(s){ return s.length });
+
+var a3 = a.map( s =&gt; s.length );</pre>
+
+<h3 dir="rtl" id="التعليمة_Lexical_this"><code>التعليمة </code> Lexical <code>this</code></h3>
+
+<p dir="rtl">قبل وجود وظائف السهم، كانت كل دالة جديدة تعرف قيمة ال <code>this</code> الخاصة بها (كائن جديد في حالة الدالة الإنشائية، <code>undefined</code> في استدعاءات الدوال مع الوضع الصارم، في سياق الكائن قيد التشغيل في حالة الوظيفة، إلخ.). وهذا يمكن أن يسبب بعض المشاكل مع نمط البرمجة الكائنية:</p>
+
+<pre class="brush: js">function Person() {
+ // The Person() constructor defines 'this' as itself.
+ this.age = 0;
+
+ setInterval(function growUp() {
+ // In nonstrict mode, the growUp() function defines 'this'
+ // as the global object, which is different from the 'this'
+ // defined by the Person() constructor.
+ this.age++;
+ }, 1000);
+}
+var p = new Person();</pre>
+
+<p dir="rtl">في ECMAScript 3/5، تم إصلاح هذه المشكلة عن طريق تخزير القيمة <code>this</code> في متغير اخر.</p>
+
+<pre class="brush: js">function Person() {
+ var self = this; // Some choose `that` instead of `self`.
+ // Choose one and be consistent.
+ self.age = 0;
+
+ setInterval(function growUp() {
+ // The callback refers to the `self` variable of which
+ // the value is the expected object.
+ self.age++;
+ }, 1000);
+}</pre>
+
+<p dir="rtl">بدلا من ذلك، يمكننا إنشاء دالة ملزمة <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind">bound function</a> بحيث تكون "احسن"  قيمة <code>this</code> سيتم تمريرها إلى الدالة <code>()growUp</code>.</p>
+
+<p dir="rtl">دوال السهم تلتقط القيمة this من السياق المغلق (enclosing context)، لذا ستعمل التعليمة البرمجية التالية كما هو متوقع.</p>
+
+<pre class="brush: js">function Person(){
+ this.age = 0;
+
+ setInterval(() =&gt; {
+ this.age++; // |this| properly refers to the person object
+ }, 1000);
+}
+
+var p = new Person();</pre>
+
+<h2 dir="rtl" id="دوال_معرفة_مسبقا">دوال معرفة مسبقا</h2>
+
+<p dir="rtl">جافا سكريبت لديها العديد من الوظائف المدمجة ذات المستوى الاعلى top-level :</p>
+
+<dl>
+ <dt>{{jsxref("Global_Objects/eval", "()eval")}}</dt>
+ <dd>
+ <p dir="rtl">الوظيفة<code><strong> ()</strong></code><code><strong>eval</strong></code> تستخدم لاختبار شفرة الجافا سكريبت على شكل سلسلة حرفية.</p>
+ </dd>
+ <dt>{{jsxref("Global_Objects/uneval", "()uneval")}} {{non-standard_inline}}</dt>
+ <dd>
+ <p dir="rtl">الوظيفة<code><strong> ()</strong></code><code><strong>uneval </strong></code>تستخدم لانشاء سلسلة حرفية عبارة عن مصدر كود الكائن {{jsxref("Object")}}.</p>
+ </dd>
+ <dt>{{jsxref("Global_Objects/isFinite", "()isFinite")}}</dt>
+ <dd>
+ <p dir="rtl">الدالة العامة <code><strong>()</strong></code> <code><strong>isFinite</strong></code> تقوم بتحديد ما إذا كانت القيمة التي تم تمريرها عدد محدود. إذا لزم الأمر، يتم تحويل البارامتر إلى رقم.</p>
+ </dd>
+ <dt>{{jsxref("Global_Objects/isNaN", "()isNaN")}}</dt>
+ <dd>
+ <p dir="rtl">تستخدم الدالة<code><strong>()</strong></code><code><strong>isNaN</strong></code> للتاكد من ان القيمة ليست رقمية {{jsxref("Global_Objects/NaN", "NaN")}}  ملاحظة: يمكننا ايضا استخدام {{jsxref("Number.isNaN()")}}, الجديدة في ECMAScript 6 او استخدام التعليمة <code><a href="/en-US/docs/Web/JavaScript/Reference/Operators/typeof">typeof</a></code>. كلها تادي نفس الغرض.</p>
+ </dd>
+ <dt>{{jsxref("Global_Objects/parseFloat", "()parseFloat")}}</dt>
+ <dd>
+ <p dir="rtl">تستخدم الدالة <code><strong>()</strong></code><code><strong>parseFloat</strong></code> لتحويل سلسلة حرفية الى عدد كسري.</p>
+ </dd>
+ <dt>{{jsxref("Global_Objects/parseInt", "()parseInt")}}</dt>
+ <dd>
+ <p dir="rtl">تستخدم الدالة <code><strong>()</strong></code><code><strong>parseInt</strong></code> لتحويل سلسلة حرفية الى عدد صحيح (البارامتر الثاني خاص بالتعامل مع القاعدة في الأنظمة العددية الرياضية).</p>
+ </dd>
+ <dt>{{jsxref("Global_Objects/decodeURI", "()decodeURI")}}</dt>
+ <dd>
+ <p dir="rtl">تستخدم الدالة<code><strong> ()</strong></code><code><strong>decodeURI</strong></code> لفك تشفير معرف الموارد الموحد (Uniform Resource Identifier (URI التي تم إنشاؤها مسبقا من طرف {{jsxref("Global_Objects/encodeURI", "encodeURI")}} او عن طريق نفس الروتين.</p>
+ </dd>
+ <dt>{{jsxref("Global_Objects/decodeURIComponent", "()decodeURIComponent")}}</dt>
+ <dd>
+ <p dir="rtl">تستخدم الوظيفة<code><strong> ()</strong></code><code><strong>decodeURIComponent</strong></code> لفك تشفير معرف عناصر الموارد الموحدة (Uniform Resource Identifier (URI التي تم إنشاؤها مسبقا من طرف {{jsxref("Global_Objects/encodeURIComponent", "encodeURIComponent")}} او عن طريق نفس الروتين.</p>
+ </dd>
+ <dt>{{jsxref("Global_Objects/encodeURI", "()encodeURI")}}</dt>
+ <dd>
+ <p dir="rtl">تستخدم الوظيفة<code><strong> ()</strong></code><code><strong>encodeURI</strong></code> لتشفير معرف الموارد الموحد (Uniform Resource Identifier (URI باستبدال كل مثيل من أحرف معينة بواحد، اثنان، ثلاثة، أو أربعة تهريبات متوالية تمثل ترميز الاحرف UTF-8 (لن يكون إلا أربع تهريبات متوالية لرموز تتألف من اثنين من الحروف "البديلة").</p>
+ </dd>
+ <dt>{{jsxref("Global_Objects/encodeURIComponent", "()encodeURIComponent")}}</dt>
+ <dd>
+ <p dir="rtl">تستخدم الوظيفة <code><strong>()</strong></code><code><strong>encodeURIComponent</strong></code> لتشفير معرف عناصر الموارد الموحدة (Uniform Resource Identifier (URI باستبدال كل مثيل من أحرف معينة بواحد، اثنان، ثلاثة، أو أربعة تهريبات متوالية تمثل ترميز الاحرف UTF-8 (لن يكون إلا أربع تهريبات متوالية لاحرف تتألف من اثنين من الحروف "البديلة").</p>
+ </dd>
+ <dt>{{jsxref("Global_Objects/escape", "()escape")}} {{deprecated_inline}}</dt>
+ <dd>
+ <p dir="rtl">الوظيفة<code><strong> ()</strong></code><code><strong>escape</strong></code> الغير مرغوب فيها. تحتسب سلسلة جديدة من بعض الأحرف التي يجب استبدلها من قبل hexadecimal escape sequence. استخدم {{jsxref("Global_Objects/encodeURI", "encodeURI")}} او استخدم {{jsxref("Global_Objects/encodeURIComponent", "encodeURIComponent")}} بدلا عنها.</p>
+ </dd>
+ <dt>{{jsxref("Global_Objects/unescape", "()unescape")}} {{deprecated_inline}}</dt>
+ <dd>
+ <p dir="rtl">الوظيفة<code><strong>()</strong></code><code><strong>unescape</strong></code> الغير مرغوب فيها. تحتسب سلسلة جديدة بحيث hexadecimal escape sequence. اسبدلت مع الرمز الذي يمثلها. متتالية التهريب يمكن ان تاتى من دالة مثل {{jsxref("Global_Objects/escape", "escape")}}. على العموم استخدم {{jsxref("Global_Objects/decodeURI", "decodeURI()")}} او استخدم {{jsxref("Global_Objects/decodeURIComponent", "decodeURIComponent")}} بدلا عنها.</p>
+ </dd>
+</dl>
+
+<p> </p>
+</div>
+
+<p>{{PreviousNext("Web/JavaScript/Guide/Loops_and_iteration", "Web/JavaScript/Guide/Expressions_and_Operators")}}</p>
diff --git a/files/ar/web/javascript/index.html b/files/ar/web/javascript/index.html
new file mode 100644
index 0000000000..9c99dab71c
--- /dev/null
+++ b/files/ar/web/javascript/index.html
@@ -0,0 +1,121 @@
+---
+title: جافاسكربت
+slug: Web/JavaScript
+tags:
+ - جافاسكربت
+ - صفحة هبوط
+translation_of: Web/JavaScript
+---
+<h4 id="JsSidebar">{{JsSidebar}}</h4>
+
+<p class="summary" dir="rtl"><strong>جافاسكربت (JavaScript</strong><sup>®</sup>) (إختصاراً <strong>JS</strong>) هي لغة برمجة خفيفة، مُفسرة، وشيئيّة ذات <a href="https://en.wikipedia.org/wiki/First-class_functions" title="https://en.wikipedia.org/wiki/First-class_functions">دوال من الدرجة الأولى</a>، وهي مشهورة خصوصاً بكونها لغة البرمجة النصيّة لصفحات الويب، لكنها <a class="external" href="https://ar.wikipedia.org/wiki/%D8%AC%D8%A7%D9%81%D8%A7_%D8%B3%D9%83%D8%B1%D9%8A%D8%A8%D8%AA#%D8%A7%D9%84%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85_%D8%AE%D8%A7%D8%B1%D8%AC_%D8%A7%D9%84%D9%85%D8%AA%D8%B5%D9%81%D8%AD">تستعمل في بيئات أخرى غير المتصفحات</a> مثل <a class="external" href="https://nodejs.org/">node.js</a> أو <a href="https://couchdb.apache.org/">Apache CouchDB</a>. فهي لغة برمجة نصيّة ديناميكيّة <a class="mw-redirect" href="https://en.wikipedia.org/wiki/Prototype-based_programming" title="Prototype-based">مبنية على النماذج</a> و متعددة النماذج، وهي تدعم نمطي البرمجة الحتمي (imperative) الوظيفي (functional). اقرأ المزيد <a href="/ar/docs/Web/JavaScript/About_JavaScript">عن جافا سكربت</a>.</p>
+
+<p dir="rtl">يختص هذا الجزء بالجافاسكربت كلغة برمجة، بغض النظر عن مواقع الويب أو البيئات التي يمكن لهاته اللغة أن تعمل عليها.  للمزيد من المعلومات حول الواجهات البرمجيّة الخاصة بمواقع الويب،  طالع <a href="/ar/docs/Glossary/DOM">DOM</a> و <a href="/ar/docs/Web/API">الواجهات البرمجيّة للويب</a>.</p>
+
+<p dir="rtl">يسمى معيار الجافا سكربت <a href="/ar/docs/Web/JavaScript/Language_Resources">ECMAScript</a>. بدءً من عام 2012، جميع المتصفحات الحديثة تدعم بشكل كامل ECMAScript 5.1. المتصفحات القديمة تدعم على الأقل ECMAScript 3. في 17 يونيو 2015، تم نشر النسخة الرئيسيّة السادسة من ECMAScript. ويسمى هذا الإصدار رسمياً ECMAScript 2015، ولكن يشار إليه عادةً باسم ECMAScript 6 أو ES6. تشير هذه الوثائق إلى الإصدار الأحدث من اللغة، والذي هو <a href="https://tc39.github.io/ecma262/">ECMAScript 2018</a>.</p>
+
+<p dir="rtl">لا ينبغي الخلط بين الجافاسكربت و<a href="https://ar.wikipedia.org/wiki/%D8%AC%D8%A7%D9%81%D8%A7_(%D9%84%D8%BA%D8%A9_%D8%A8%D8%B1%D9%85%D8%AC%D8%A9)">لغة البرمجة جافا</a>. يعد كلاً من الأسمين "جافا" و "جافاسكربت" علامات تجاريّة مُسجلة لشركة أوراكل في الولايات المتحدة الأمريكيّة وغيرها من البلدان. كلتا اللغتين تملكان بنيّة كتابيّة مختلفة، ودلالة مختلفة، وكذلك استخدامات مختلفة.</p>
+
+<div class="column-container">
+<div class="column-half">
+<h2 dir="rtl" id="دورات">دورات</h2>
+
+<p dir="rtl">تعلم البرمجة باستخدام الجافاسكربت من خلال الدورات والدروس الإرشاديّة التالية.</p>
+
+<h3 dir="rtl" id="للمبتدئين">للمبتدئين</h3>
+
+<p dir="rtl">اطلع على <a href="/ar/docs/Learn/JavaScript">قسم مواضيع تعلم الجافاسكربت</a> إذا كنت ترغب بتعلم الجافاسكربت ولكنك لا تملك أي معرفة مسبقة بهاته اللغة أو بالبرمجة ككل. الوحدات المتوفرة هي:</p>
+
+<dl>
+ <dt dir="rtl"><a href="/ar/docs/Learn/JavaScript/First_steps">الخطوات الأولى مع الجافاسكربت</a></dt>
+ <dd dir="rtl">تجيب هذه المقالة عن بعض الأسئلة الأساسيّة، مثل "ما هي الجافاسكربت؟"، "كيف تبدو هذه اللغة؟"، "ماذا بإمكانها أن تفعل؟"، بالإضافة إلى مناقشة بعض الميزات الأساسيّة للغة مثل المتغيّرات، السلاسل النصية، الأرقام، والمصفوفات.</dd>
+ <dt dir="rtl"><a href="/ar/docs/Learn/JavaScript/Building_blocks">البنى الكتليّة في اللغة</a></dt>
+ <dd dir="rtl">نكمل رحلتنا في تغطيّة المفاهيم الأساسية في لغة الجافاسكربت، ففي هذه المقالة قمنا بالتركيز على البنى الكتليّة الشائعة في اللغة مثل الجمل الشرطيّة، الحلقات، الدوال، والأحداث.</dd>
+</dl>
+
+<h3 dir="rtl" id="دليل_لغة_جافا_سكربت">دليل لغة جافا سكربت</h3>
+
+<dl>
+ <dt dir="rtl"><a href="/ar/docs/Web/JavaScript/Guide">دليل اللغة</a></dt>
+ <dd dir="rtl">دليل أكثر تفصيلاً حول لغة الجافاسكربت، فهو موجه للذين يمتلكون معرفة مسبقة، سواءً بلغة الجافا سكربت، أو بلغات البرمجة الأخرى.</dd>
+</dl>
+
+<h3 dir="rtl" id="مقالات_لذوي_الخبرة_المتوسطة">مقالات لذوي الخبرة المتوسطة</h3>
+
+<dl>
+ <dt dir="rtl"><a href="/ar/docs/Learn/JavaScript/Objects">مقدمة إلى الكائنات</a></dt>
+ <dd dir="rtl">من المهم فهم البرمجة الشيئيّة في اللغة إذا أردت زيادة معرفتك والتمكن من كتابة شيفرة برمجيّة أكثر فعاليّة، من أجل ذلك قمنا بتوفير هذه الوحدة لك.</dd>
+ <dt dir="rtl"><a href="/ar/docs/Learn/JavaScript/Client-side_web_APIs">واجهات التصميم (جهة العميل) البرمجيّة </a></dt>
+ <dd dir="rtl">لن تستطيع العمل جيداً عند تطوير جهة المستخدم (client-side) باستخدام الجافاسكربت من دون تعلمك للواجهات البرمجيّة المتخصصة، فهي واجهات للتلاعب بأجزاء مختلفة من المُتصفِح ونظام التشغيل الذي يعمل عليه الموقع، أو حتى التلاعب بحقول بيانات مواقع أو خدمات أخرى. في هذه الوحدة سنستكشف ماهيّة هذه الواجهات، وكيف تستخدم بعض من أكثر تلك الواجهات شيوعاً والتي ستحتاجها غالباً في عملك.</dd>
+</dl>
+
+<dl>
+ <dt dir="rtl"><a href="/ar/docs/Web/JavaScript/A_re-introduction_to_JavaScript">نظرة عامة على الجافاسكربت</a></dt>
+ <dd dir="rtl">مقالة تقدم نظرة عامة للذين <em>يظنون</em> أنهم يعرفون الجافاسكربت.</dd>
+</dl>
+
+<dl>
+ <dt dir="rtl"><a href="/ar/docs/Web/JavaScript/Data_structures">هياكل بيانات الجافاسكربت</a></dt>
+ <dd dir="rtl">نظرة عامة على هياكل البيانات المتوفرة في اللغة.</dd>
+ <dt dir="rtl"><a href="/ar/docs/Web/JavaScript/Equality_comparisons_and_sameness">عبارات المساواة والتطابق</a></dt>
+ <dd dir="rtl">توفر الجافاسكربت ثلاثة عمليات مساواة مختلفة: المساواة الصارمة باستخدام <code>===</code> والمساواة المتساهلة باستخدام <code>==</code> والدالة  {{jsxref("Global_Objects/Object/is", "Object.is()")}}.</dd>
+</dl>
+
+<h3 dir="rtl" id="مقالات_متقدمة">مقالات متقدمة</h3>
+
+<dl>
+ <dt dir="rtl"><a href="/ar/docs/Web/JavaScript/Inheritance_and_the_prototype_chain">الميراث وسلسلة النموذج الأولي</a></dt>
+ <dd dir="rtl">شرح الميراث القائم على النموذج الأولي الذي يساء فهمه على نطاق واسع.</dd>
+ <dt dir="rtl"><a href="/ar/docs/Web/JavaScript/Reference/Strict_mode">الوضع الصارم</a></dt>
+ <dd dir="rtl">في الوضع الصارم (strict mode)، لا يمكنك استخدام أي متغيّر قبل تعريفه. فيعد الوضع الصارم البديل المحدود لـ ECMAScript 5، لأداء أسرع وأكثر سهولة في التنقيح.</dd>
+ <dt dir="rtl"><a href="/ar/docs/Web/JavaScript/Typed_arrays">مصفوفات الجافاسكربت المكتوبة</a></dt>
+ <dd dir="rtl">
+ <div id="gt-res-content">
+ <div class="trans-verified-button-small" dir="rtl" id="gt-res-dir-ctr">
+ <div id="tts_button">توفر مصفوفات الجافاسكربت المكتوبة (typed arrays) آلية للوصول إلى البيانات الثنائيّة.</div>
+ </div>
+ </div>
+ </dd>
+ <dt dir="rtl"><a href="/ar/docs/Web/JavaScript/Memory_Management">إدارة الذاكرة</a></dt>
+ <dd dir="rtl">دورة حياة الذاكرة وجمع القمامة (garbage collection) في لغة الجافاسكربت.</dd>
+ <dt dir="rtl"><a href="/ar/docs/Web/JavaScript/EventLoop">نموذج التزامن وحلقة الحدث</a></dt>
+ <dd dir="rtl">تمتلك لغة الجافاسكربت نموذج تزامن قائم على مفهوم "حلقة الحدث (event loop)".</dd>
+</dl>
+</div>
+
+<div class="column-half">
+<h2 dir="rtl" id="مرجع_اللغة">مرجع اللغة</h2>
+
+<p dir="rtl">تصفح <a href="/ar/docs/Web/JavaScript/Reference">مرجع لغة الجافاسكربت</a> الشامل.</p>
+
+<dl>
+ <dt dir="rtl"><a href="/ar/docs/Web/JavaScript/Reference/Global_Objects">الكائنات القياسيّة</a></dt>
+ <dd dir="rtl">تعرف على الكائنات القياسيّة المبنيّة في اللغة {{jsxref("Array")}}، {{jsxref("Boolean")}}، {{jsxref("Date")}}، {{jsxref("Error")}}، {{jsxref("Function")}}، {{jsxref("JSON")}}، {{jsxref("Math")}}، {{jsxref("Number")}}، {{jsxref("Object")}}، {{jsxref("RegExp")}}، {{jsxref("String")}}، {{jsxref("Map")}}، {{jsxref("Set")}}، {{jsxref("WeakMap")}}، {{jsxref("WeakSet")}}، وغيرها الكثير.</dd>
+ <dt dir="rtl"><a href="/ar/docs/Web/JavaScript/Reference/Operators">التعابير والعمليات</a></dt>
+ <dd dir="rtl">تعلم المزيد حول وظيفة العمليات (operators) في الجافاسكربت {{jsxref("Operators/instanceof", "instanceof")}}، {{jsxref("Operators/typeof", "typeof")}}، {{jsxref("Operators/new", "new")}}, {{jsxref("Operators/this", "this")}}، وغيرها الكثير.</dd>
+ <dt dir="rtl"><a href="/ar/docs/Web/JavaScript/Reference/Functions">الدوال</a></dt>
+ <dd dir="rtl">تعلم كيفيّة العمل مع الدوال في لغة الجافاسكربت لتطوير برمجياتك.</dd>
+</dl>
+
+<h2 dir="rtl" id="أدوات_ومراجع">أدوات ومراجع</h2>
+
+<p dir="rtl">أدوات مفيدة لكتابة وتنقيح شيفرات <strong>الجافاسكربت</strong>.</p>
+
+<dl>
+ <dt dir="rtl"><a href="/ar/docs/Tools">أدوات مطورين فايرفوكس</a></dt>
+ <dd dir="rtl">أداة <a href="/ar/docs/Tools/Scratchpad">Scratchpad</a> ،<a href="/ar/docs/Tools/Web_Console">Web Console</a> ،<a href="/ar/docs/Tools/Profiler">JavaScript Profiler</a> ،<a href="/ar/docs/Tools/Debugger">Debugger</a>، وغيرها الكثير.</dd>
+ <dt dir="rtl"><a href="/ar/docs/Web/JavaScript/Shells">صدفات الجافاسكربت</a></dt>
+ <dd dir="rtl">تسمح لك هذه الصدفات (shells) بالتجريب السريع لشيفرات الجافاسكربت.</dd>
+ <dt dir="rtl"><a href="https://togetherjs.com/">أداة TogetherJS</a></dt>
+ <dd dir="rtl">التعاون يجعل الأمر سهلاً. بإضافة هذه الأداة لموقعك، سيتمكن المستخدمون من مساعدة بعضهم البعض على موقعك بشكل حي!</dd>
+ <dt dir="rtl"><a href="https://stackoverflow.com/questions/tagged/javascript">موقع Stack Overflow</a></dt>
+ <dd dir="rtl">الأسئلة الموسومة بالوسم "JavaScript" الموجودة على موقع Stack Overflow.</dd>
+ <dt dir="rtl"><a href="/ar/docs/Web/JavaScript/New_in_JavaScript">ملاحظات إصدار الجافاسكربت</a></dt>
+ <dd dir="rtl">تصفح سجل ميزات الجافاسكربت وحالة التقدم في التطوير.</dd>
+ <dt dir="rtl"><a href="https://jsfiddle.net/">أداة JSFiddle</a></dt>
+ <dd dir="rtl">قم بتعديل شيفرات الجافاسكربت، ولغة ترميز النص الفائق، وصفحات الأنماط الانسيابية واحصل على النتائج بشكل حي. استخدم موارد خارجيّة وتعاون مع أفراد فريقك على الأنترنت.</dd>
+ <dt dir="rtl"><a href="https://plnkr.co/">أداة Plunker</a></dt>
+ <dd dir="rtl">مجتمع على الإنترنت لإنشاء، والتعاون، ومشاركة أفكار تطوير الويب. قم بتعديل ملفات الجافاسكربت وغيرها من الملفات واحصل على النتائج بشكل حي.</dd>
+</dl>
+</div>
+</div>
diff --git a/files/ar/web/javascript/introduction_to_object-oriented_javascript/index.html b/files/ar/web/javascript/introduction_to_object-oriented_javascript/index.html
new file mode 100644
index 0000000000..eab6c1edec
--- /dev/null
+++ b/files/ar/web/javascript/introduction_to_object-oriented_javascript/index.html
@@ -0,0 +1,423 @@
+---
+title: مدخل إلى جافاسكريبت كائنية التوجه
+slug: Web/JavaScript/Introduction_to_Object-Oriented_JavaScript
+tags:
+ - الأفراد
+ - البرمجة الكائنية
+ - التغليف
+ - الجافاسكريبت
+ - المتوسط
+ - المجال
+ - المشيد
+ - ب.ك.ت
+ - كائن
+translation_of: Learn/JavaScript/Objects
+---
+<div>{{jsSidebar("Introductory")}}</div>
+
+<p>كائنية التوجه حتى النخاع، ميزات جافا سكريبت القوية، القدرات المرنة {{Glossary("OOP")}}. يبدأ هذا المقال بمقدمة إلى البرمجة الكائنية التوجه، ثم مراجعات لنموذج كائن جافا سكريبت، و أخيراً يوضح مفاهيم البرمجة الكائنية التوجه في جافا سكريبت. لا يصف هذا المقال البناء اللغوي الجديد <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes">للبرمجة الكائنية التوجه في ECMAScript 6</a>.</p>
+
+<div style="font-size: 15; font-family: 'tahoma';">
+<h2 id="مراجعة_جافا_سكريبت">مراجعة جافا سكريبت</h2>
+
+<p>إذا كنت لا تشعر بالثقة حول مفاهيم جافا سكريبت مثل المتغيرات والأنواع والوظائف و المجال ، يمكنك ان تقرأ عن هذه المواضيع في <a href="/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript">مدخل إلى جافا سكريبت</a>. يمكنك أيضا الاطلاع علي <a href="/en-US/docs/Web/JavaScript/Guide">دليل جافا سكريبت</a>.</p>
+
+<h2 id="البرمجة_الكائنية_التوجه_(Object-oriented_programming)">البرمجة الكائنية التوجه (Object-oriented programming)</h2>
+
+<p>إن البرمجة الكائنية (OOP) ما هي إلا نمط برمجي يَستخدم التجريد في إنشاء نماذج/نسخ لتجسيد العالم الحقيقي، وتَستخدم البرمجة الكائنية في ذلك أساليب مُتعدّدة من هذا النمط، فهي تستخدم الوحدات module، وتعدديّة الأشكال polymorphism والتغليف encapsulation، وتجدر الإشارة إلى أن معظم لغات البرمجة تدعم مفهوم OOP أمثال اللغات البرمجية: جافا، بايثون، روبي، وطبعًا جافا سكريبت.</p>
+
+<p>يُعالج أو لنقل يَتصور مفهوم البرمجة الكائنية OOP البرنامج كتشكيلة من الأشياء/الكائنات المتعاونة/المترابطة بدلًا من يتصوّره كتشكيلة من الدوال (functions) أو كسرد من الأوامر. ففي مفهوم OOP، كل كائن/شيء له القدرة على استقبال الرسائل، ومعالجة البيانات، وإرسال الرسائل إلى باقي الكائنات، ويُمكن اعتبار أنه لكل كائن object كينونة خاصة به ودور/وظيفة مستقلة عن الكائن الآخر.</p>
+
+<p>تُعزز البرمجة الكائنية القدرة على صيانة الشيفرة البرمجية والمرونة في التطوير، وأثبتت جدارتها على نطاق واسع في هندسة البرمجيات الكبيرة، ولأن البرمجة الكائنية تُشدد على استخدام الوحدات module، فإن الشيفرة/الكود المكتوب بمفهوم البرمجة الكائنية هو أبسط في التطوير وأسهل في الفهم مستقبلًا (عند التنقيح والتعديل)، وكما يعزز مفهوم البرمجة الكائنية التحليل المباشر للشيفرة، وفهم الحالات الشائكة فهمًا أفضل من باقي الأساليب البرمجية الأخرى.</p>
+
+<h2 id="مصطلحات_البرمجة_الكائنية">مصطلحات البرمجة الكائنية</h2>
+
+<dl>
+ <dt dir="ltr">
+ <h3 dir="rtl" id="المجال_في_البرمجة_الكائنية_Namespace">المجال في البرمجة الكائنية Namespace</h3>
+
+ <p dir="rtl">ما هو إلا عبارة عن حاوي تسمح للمطوّر بتحزيم جميع الوظائف تحت اسم محدد وفريد.</p>
+
+ <h3 dir="rtl" id="الصنف_أو_الفئة_Class_في_البرمجة_الكائنية">الصنف أو الفئة Class في البرمجة الكائنية</h3>
+
+ <p dir="rtl">يعتني الصنف بكل ما يتعلّق بميزات وخصائص الكائن، والصنف ما هو إلا قالب template تعريفي بخاصيات properties وبطُرق/وظائف methods الكائن object.</p>
+
+ <h3 dir="rtl" id="الكائن_Object_في_البرمجة_الكائنية">الكائن Object في البرمجة الكائنية</h3>
+
+ <p dir="rtl">الكائن ما هو إلا حالة/أمثولة instance من صنف class.</p>
+
+ <h3 dir="rtl" id="الخاصية_property_في_البرمجة_الكائنية">الخاصية property في البرمجة الكائنية</h3>
+
+ <p dir="rtl">ما هي إلا مميزات وخصائص الكائن، كاللون مثلًا.</p>
+
+ <h3 dir="rtl" id="الطريقة_أو_الوظيفة_Method_في_البرمجة_الكائنية">الطريقة أو الوظيفة Method في البرمجة الكائنية</h3>
+
+ <p dir="rtl">تعتني الطريقة أو الوظيفة كما يُسميها البعض بقدرات الكائن، مثل قدرة المشي مثلًا، وهي دور أو وظيفة مرتبطة مع صنف class.</p>
+
+ <h3 dir="rtl" id="المشيد_Constructor_في_البرمجة_الكائنية">المشيد Constructor في البرمجة الكائنية</h3>
+
+ <p dir="rtl">ما هو إلا طريقة method تُستدعى في لحظة استهلال instantiate الكائن، وعادةً ما يكون له نفس اسم الصنف الذي يحتويه.</p>
+
+ <h3 dir="rtl" id="الوراثة_Inheritance_في_البرمجة_الكائنية">الوراثة Inheritance في البرمجة الكائنية</h3>
+
+ <p dir="rtl">يُمكن للصنف أن يرث مميزات من صنف آخر.</p>
+
+ <h3 dir="rtl" id="التغليف_Encapsulation_في_البرمجة_الكائنية">التغليف Encapsulation في البرمجة الكائنية</h3>
+
+ <p dir="rtl">طريقة في تحزيم البيانات data والطُرق methods التي تستخدم البيانات.</p>
+
+ <h3 dir="rtl" id="التجريد_Abstraction_في_البرمجة_الكائنية">التجريد Abstraction في البرمجة الكائنية</h3>
+
+ <p dir="rtl">يجب على الاقتران الحاصل من: الوراثة والطُرق methods والخاصيات properties لكائن معقد وشائك التمثيل برمجيًا أن يعكس الواقع المراد محاكاته في البرمجة الكائنية.</p>
+
+ <h3 dir="rtl" id="تعددية_الأشكال_Polymorphism_في_البرمجة_الكائنية">تعددية الأشكال Polymorphism في البرمجة الكائنية</h3>
+
+ <p dir="rtl">تحمل كلمة Poly بحد ذاتها المعنى "متعدد" وتحمل الكلمة morphism المعنى "أشكال، ويُشير المفهوم ككل إلى أن أكثر من صنف قد يُعرّف نفس الطريقة method أو الخاصية property.</p>
+ </dt>
+</dl>
+
+<p>للحصول على وصف أكثر شمولية للبرمجة الكائنية التوجه، أنظر {{interwiki("wikipedia", "البرمجة كائنية التوجه")}} على ويكيبيديا.</p>
+
+<h2 id="البرمجة_المعتمدة_على_النموذج_الأولي_Prototype">البرمجة المعتمدة على النموذج الأولي Prototype</h2>
+
+<p>البرمجة المعتمدة على النموذج الأوّلي (Prototype-based programming) ما هي إلا نموذج من البرمجة الكائنية OOP ولكنها لا تستخدم الأصناف classes، بل تقوم أولًا بإعداد سلوك أي صنف class ما ومن ثم تُعيد استخدامه، ويُطلق البعض على هذا النموذج: البرمجة بلا أصناف classless، أو البرمجة المَبْدَئِية المنحى prototype-oriented، أو البرمجة المعتمدة على الأمثولة instance-based).</p>
+
+<p>يعود أصل اللغة المعتمدة على النموذج الأولي إلى لغة <a href="http://en.wikipedia.org/wiki/Self%20(programming%20language" rel="external nofollow noopener noreferrer">Self</a>، والتي طوّرها David Ungar وRandall Smith، ولكن أسلوب البرمجة بدون أصناف class-less توسّع ونال شهرة كبيرة في العقد الأخير، واُعتمد من قبل العديد من اللغات البرمجية أشهرهم جافا سكريبت.</p>
+
+<p dir="ltr"> </p>
+
+<h2 id="البرمجة_الكائنية_باستخدام_جافا_سكريبت">البرمجة الكائنية باستخدام جافا سكريبت</h2>
+
+<h3 id="المجال_Namespace_في_جافا_سكريبت">المجال Namespace في جافا سكريبت</h3>
+
+<p>المجال هو أشبه بمستوعب/بحاوية (container) تسمح للمطوّر في تحزيم وظائف تحت اسم فريد، أو اسم تطبيق محدد، ففي جافا سكريبت المجال هو مجرد كائن object كأي كائن آخر يحتوي على طُرق methods، وخاصيات properties، وحتى كائنات objects.</p>
+
+<div class="note">
+<p><strong>ملاحظة هامة</strong>: من المهم جدًا الانتباه إلى أنه في جافا سكريبت، لا يوجد فرق بين الكائنات العادية والمجالات namespaces، وهذا يختلف عن اللغات الكائنية الأخرى، الأمر الذي قد يُربك المبرمجين المبتدئين في جافا سكريبت.</p>
+</div>
+
+<p>إن إنشاء مجال namespace في جافا سكريبت بسيطٌ للغاية، فمن خلال إنشاء كائن عام/مشترك/شامل global، ستصبح جميع المُتغيّرات variables والطرق methods، والدوال functions خاصياتٍ لهذا الكائن، ويٌقلل استخدام المجالات namespaces أيضًا من احتمالية تضارب الأسماء في التطبيق، منذ أن كل كائن من كائنات التطبيق ما هي إلى خاصيات كائن شامل/عام معرّفة على مستوى التطبيق.</p>
+
+<p>سيُنشئ في الخطوة التالية كائنًا عامًا global وبالاسم <code>MYAPP</code>:</p>
+
+<pre class="brush: js" dir="rtl">// مجال عالمي
+var MYAPP = MYAPP || {};</pre>
+
+<p>يُظهر المثال السابق، كيف تم التأكّد أولًا فيما إذا كان <code>MYAPP</code> معرفًا (سواء في نفس الملف أو في آخر)، ففي حال الإيجاب سيُستخدم الكائن العام <code>MYAPP</code>، وفي حال عدم تعريفه مُسبقًا سيُنشئ كائنًا خالٍ وبالاسم<code>MYAPP</code> والذي سيغلّف encapsulate الطرق methods والدوال functions والمتغيرات variables والكائنات objects.</p>
+
+<p>كما يُمكن أيضًا إنشاء مجال فرعي sub-namespaces:</p>
+
+<pre class="brush: js" dir="rtl">// مجال فرعي
+MYAPP.event = {};</pre>
+
+<p>يوضّح المثال التالي الصيغة المستخدمة في إنشاء مجال namespace وإضافة متغيرات ودوال:</p>
+
+<pre class="brush: js" dir="rtl">// إنشاء حاوي يدعى MYAPP.commonMethod للوظائف و الخصائص الشائعة
+MYAPP.commonMethod = {
+ regExForName: "", // تعريف تعبير نظامي للتحقق من الإسم
+ regExForPhone: "", // تعريف تعبير نظامي للهاتف، لا يوجد تحقق من الصحة
+ validateName: function(name){
+ // إفعل شيئا ما بالإسم، يمكنك الوصول إلى المتغير regExForName
+ // بإستعمال "this.regExForName"
+ },
+
+ validatePhoneNo: function(phoneNo){
+ // إفعل شيئا ما برقم الهاتف
+ }
+}
+
+// تعريفات الكائن مع الزظيفة في نفس الوقت
+MYAPP.event = {
+ addListener: function(el, type, fn) {
+ // بعض الأكواد
+ },
+ removeListener: function(el, type, fn) {
+ // بعض الأكواد
+ },
+ getEvent: function(e) {
+ // بعض اﻷكواد
+ }
+
+ // يمكن إضافة وظائف و خصائص أخرى
+}
+
+// البناء اللغوي لإستعمال وظيفة addListener:
+MYAPP.event.addListener("yourel", "type", callback);</pre>
+
+<h3 id="sect1"> </h3>
+
+<h3 id="الكائنات_الأساسيةالقياسية_المبنية_داخل_لغة_جافا_سكريبت_(Standard_built-in_objects)">الكائنات الأساسية/القياسية المبنية داخل لغة جافا سكريبت (Standard built-in objects)</h3>
+
+<p>تتضمن لغة جافا سكريبت العديد من الكائنات في تركيبتها، على سبيل المثال، يوجد كائنات مثل <code>Math</code>،<code>Object</code>، <code>Array</code>، <code>String</code>، ويُظهر المثال التالي كيفيّة استخدام الكائن <code>Math</code> للحصول على رقم عشوائي باستخدام أحد طُرق method هذا الكائن وهي الطريقة ()<code>random</code>.</p>
+
+<pre class="brush: js" dir="rtl">console.log(Math.random());
+</pre>
+
+<div class="note">
+<p><strong>ملاحظة</strong>: يَفترض المثال السابق وجميع الأمثلة التالية في المقال وجود دالة function بالاسم()<code>console.log</code> معرّفة تعريفًا عامًا (globally)، مع العلم أن هذه الدالة ليست جزء من اللغة نفسها، ولكنها دالة متوفّرة في العديد من متصفحات الإنترنت لأغراض تشخيص الشيفرة البرمجية debugging.</p>
+</div>
+
+<p>يُمكن العودة إلى <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects" rel="external nofollow noopener noreferrer">مرجع لغة جافا سكريبت: الكائنات الأصلية المعيارية</a> للحصول على قائمة بالكائنات المبينة داخل لغة جافا سكريبت نفسها.</p>
+
+<p>كل كائن في جافا سكريبت هو حالة/أمثولة instance من الكائن <code>Object</code> ويَرث كافة خاصياته properties وطُرقه methods.</p>
+
+<h3 id="sect2"> </h3>
+
+<h3 id="الكائنات_الخاصة_الصنف_(الفئة)">الكائنات الخاصة<br>
+ <span style='font-family: "Open Sans Light",Helvetica,Arial,sans-serif; font-size: 1.286rem; letter-spacing: -0.014em;'>الصنف (الفئة</span><span style='font-family: "Open Sans Light",Helvetica,Arial,sans-serif; font-size: 1.286rem; letter-spacing: -0.014em;'>)</span></h3>
+
+<h4 id="لغة_جافا_سكريبت_لغة_من_النوع_prototype-based_ولا_تحتوي_على_العبارة_class_كما_هو_حال_باقي_لغات_البرمجة_الكائنية،_كما_في_روبي_أو_بايثون،_ويُربك_هذا_الأمر_المبرمجين_المعتادين_على_اللغات_التي_تعتمد_على_هذه_العبارة_أو_المفهوم،_وتستخدم_جافا_سكريبت_بدلًا_من_ذلك_الدوال_functions_لمحاكات_مفهوم_الأصناف_classes،_وتعريف_صنف_هو_بسهولة_تعريف_أي_دالّة">لغة جافا سكريبت لغة من النوع prototype-based ولا تحتوي على العبارة <code>class</code> كما هو حال باقي لغات البرمجة الكائنية، كما في روبي أو بايثون، ويُربك هذا الأمر المبرمجين المعتادين على اللغات التي تعتمد على هذه العبارة أو المفهوم، وتستخدم جافا سكريبت بدلًا من ذلك الدوال functions لمحاكات مفهوم الأصناف classes، وتعريف صنف هو بسهولة تعريف أي دالّة:</h4>
+
+<pre class="brush: js" dir="rtl">var Person = function () {};
+</pre>
+
+<h4 id="الكائن_(أمثولة_الصنف_class_instance)">الكائن (أمثولة الصنف class instance)</h4>
+
+<p>يتطلب إنشاء حالة/أمثولة instance جديدة من كائن <code>obj</code> استخدام العبارة <code>new obj</code>، وتعيين النتيجة إلى متغيّر بغرض الوصول إلى فيما بعد.</p>
+
+<p>عُرّف في الشيفرة السابقة صنف class بالاسم <code>Person</code>، وفي الشيفرة التالية، سيُنشئ حالتين/أمثولتين instances من هذا الصنف، الأولى بالاسم <code>person1</code> والثانية بالاسم <code>person2</code>.</p>
+
+<pre class="brush: js" dir="rtl">var person1 = new Person();
+var person2 = new Person();
+</pre>
+
+<div class="note">فضلا أنظر {{jsxref("Object.create()")}} للحصول على وظيفة الإنشاء الجديدة الإضافية التي تنشأ حالة غير مهيأة</div>
+
+<h4 id="المشيد_The_constructor">المشيد The constructor</h4>
+
+<p>يُستدعى المُشيّد constructor في لحظة الاستهلال instantiation (اللحظة التي يُنشئ فيها الكائن)، والمُشيّد ما هو إلا طريقة method من طُرق الصنف class، وفي جافا سكريبت تعمل الدالة على تشييد الكائن، ولذلك لا داعي إلى تعريف طريقة method من أجل عميلة التشييد، وكل إجراء مصرّح في الصنف class يُنفّذ في لحظة الاستهلال instantiation.</p>
+
+<p>يُستخدم المُشيّد في تعيين خاصيات properties الكائن، أو في استدعاء طُرق methods معينة لتحضير الكائن للاستخدام، وأما إضافة طُرق صنف وتعريفها يحدث باستخدام صيغة syntax مختلفة سنتطرّق إليها فيما بعد خلال المقال.</p>
+
+<p>تُظهر الشيفرة التالية كيف يُسجّل log (يُرسل رسالة نصية إلى طرفية المتصفح console) مُشيّد الصنف<code>Person</code> رسالة نصية حينما يُستهل instantiated.</p>
+
+<pre class="brush: js" dir="rtl">var Person = function () {
+ console.log('تم إنشاء حالة');
+};
+
+var person1 = new Person();
+var person2 = new Person();
+
+</pre>
+
+<h4 id="الخاصية_The_property_(خاصية_الكائن_object_attribute)">الخاصية The property (خاصية الكائن object attribute)</h4>
+
+<p>الخاصيات properties ما هي إلا متغيرات محتوات في الصنف class، وكل حالة/أمثولة من الكائن تمتلك هذه الخاصيات، وتُعيّن الخاصيات في دالة مُشيّد الصنف بحيثُ تُنشئ مع كل حالة/أمثولة instance.</p>
+
+<p>إن الكلمة المفتاحية <code>this</code>، والتي تُشير إلى الكائن الحالي، تسمح للمطوّر بالعمل مع الخاصيات من ضمن الصنف، والوصول (قراءةً وكتابةً) إلى الخاصية property من خارج الصنف يكون من خلال الصيغة<code>InstanceName.Property</code> كما هو الأمر في لغة C++ (سي بلس بلس) وJava والعديد من اللغات الأخرى، ومن داخل الصنف تُستخدم الصيغة <code>this.Property</code> للحصول على قيمة الخاصية أو لتعيين قيمتها.</p>
+
+<p>في الشيفرة التالية، عُرّفت الخاصية <code>firstName</code> للصنف <code>Person</code> وفي لحظة الاستهلال instantiation:</p>
+
+<pre class="brush: js" dir="rtl">var Person = function (firstName) {
+ this.firstName = firstName;
+ console.log('تم إنشاء حالة من Person');
+};
+
+var person1 = new Person('سفيان');
+var person2 = new Person('محمد');
+
+// Show the firstName properties of the objects
+console.log('الشخص1 هو ' + person1.firstName); // النتيجة ==&gt; "الشخص1 هو سفيان"
+console.log('الشخص2 هو ' + person2.firstName); // النتيجة ==&gt; "الشخص2 هو محمد"
+</pre>
+
+<h4 id="الطرق_The_methods">الطرق The methods</h4>
+
+<p>الطرق methods ما هي إلا دوال (وتُعرّف كما تعرّف الدوال functions)، فيما عدا ذلك فهي تُشبه الخاصيات properties، واستدعاء طريقة method مشابه إلى الوصول إلى خاصيّة ما، ولكن مع إضافة <code>()</code> في نهاية اسم الطريقة، وربما مع مُعطيات arguments، ولتعريف طريقة، تُعيّن دالة إلى خاصيّة مُسمّات من خاصيّة الصنف <code>prototype</code>، ويُمكن فيما بعد استدعاء الطريقة على الكائن بنفس الاسم الذي عُيّن للدالة.</p>
+
+<p>في الشيفرة التالية، عُرّفت ومن ثم اُستخدِمت الطريقة ()<code>sayHello</code> للصنف <code>Person</code>.</p>
+
+<pre class="brush: js" dir="rtl">var Person = function (firstName) {
+ this.firstName = firstName;
+};
+
+Person.prototype.sayHello = function() {
+ console.log("مرحبا، أنا " + this.firstName);
+};
+
+var person1 = new Person("سفيان");
+var person2 = new Person("محمد");
+
+// إستدعاء طريقة Person sayHello.
+person1.sayHello(); // النتيجة ==&gt;"مرحبا، أنا سفيان"
+person2.sayHello(); // النتيجة ==&gt; "مرحبا، أنا محمد"
+</pre>
+
+<p>إن الطُرق methods في جافا سكريبت ما هي إلا دالة كائن عادية مرتبطة مع كائن كخاصية property، وهذا يعني أنه يُمكن استدعاء الطُرق خارج السياق، كما في المثال التالي:</p>
+
+<pre class="brush: js" dir="rtl">var Person = function (firstName) {
+ this.firstName = firstName;
+};
+
+Person.prototype.sayHello = function() {
+ console.log("مرحبا، أنا " + this.firstName);
+};
+
+var person1 = new Person("سفيان");
+var person2 = new Person("محمد");
+var helloFunction = person1.sayHello;
+
+// النتيجة ==&gt; "مرحبا، أنا سفيان"
+person1.sayHello();
+
+// النتيجة ==&gt; "مرحبا، أنا محمد"
+person2.sayHello();
+
+// النتيجة ==&gt; "مرحبا، أنا undefined" (أو أخطاء
+// TypeError في الوضع الصارم)
+helloFunction();
+
+// النتيجة ==&gt; true
+console.log(helloFunction === person1.sayHello);
+
+// النتيجة ==&gt; true
+console.log(helloFunction === Person.prototype.sayHello);
+
+// النتيجة ==&gt; "مرحبا، أنا سفيان"
+helloFunction.call(person1);</pre>
+
+<p>كما يُظهر المثال السابق، جميع الإحالات المستخدمة في استدعاء الدالة <code>sayHello</code> تُشير إلى <strong><em>نفس الدالة</em></strong>سواءً الاستدعاء الحاصل مع <code>person1</code> أو <code>Person.prototype</code> أو حتى في المتغيّر <code>helloFunction</code>وقيمة <code>this</code> خلال استدعاء الدالة يعتمد على الكيفية التي تُستدعى فيها، حيث تُشير الكلمة المفتاحية<code>this</code> إلى الكائن الحالي الذي تُستدعى عليه الطريقة method، بمعنى عندما تم استدعاء الطريقة()<code>sayHello </code>على الكائن <code>person1</code> فإن <code>this</code> تُشير إلى الكائن <code>person1</code>، وعند استدعاء <code>sayHello</code>على الكائن <code>person2</code> فإن <code>this</code> تُشير إلى الكائن <code>person2</code>، ولكن إن تم الاستدعاء بطريقة مختلفة، فإن<code>this</code> ستُعيّن تعينًا مختلفًا، فاستدعاء <code>this</code> من المتغيّر (كما في ()<code>helloFunction</code>) سيُعيّن <code>this</code> إلى الكائن العام global (والذي سيكون window في متصفح الإنترنت)، ومنذ أن هذا الكائن (على الأغلب) لا يملك الخاصّيّة <code>firstName</code>، ستكون النتيجة كما هو الحال في المثال السابق “Hello, I’m undefined”، كما يمكن دائمًا تعيين <code>this</code> صراحةً باستخدام <code>Function#call</code> (أو <code>Function#apply</code>) وهو كما كان في نهاية المثال.</p>
+
+<div class="note"><strong>ملاحظة:</strong> أنظر المزيد حول <code>this</code> على <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call" title="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/call">call</a> و <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply" title="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/apply">apply</a></div>
+
+<h4 id="الوراثة">الوراثة</h4>
+
+<p>تُستخدم الوراثة في جافا سكريبت في إنشاء صنف class كمثيل مخصص لصنف أو أكثر (<strong><em>تدعم جافا سكريبت وراثة وحيدة فقط single inheritance</em></strong>)، ويُطلق على الصنف المخصص عادةً <strong><em>ابن</em></strong> (child)، ويطلق على الصنف الآخر عادةً  <strong><em>الأب</em></strong> (parent)، وفي جافا سكريبت يتمّ ذلك من خلال إسناد حالة/أمثولة من الصنف الأب إلى الصنف الابن، ومن ثم تخصيصه، وفي متصفحات الإنترنت الحديثة يُمكن استخدام<code>Object.create</code> في تحقيق الوراثة inheritance أيضًا.</p>
+
+<div class="note" dir="ltr">
+<p dir="rtl"><strong>ملاحظة</strong>: لا تتفقد جافا سكريبت مُشيّد صنف الابن <code>prototype.constructor</code> (راجع<a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/prototype" rel="external nofollow noopener noreferrer"><code>Object.prototype</code></a>)، وعليه يجب التصريح عن ذلك يدويًا، لمزيد من التفصيل راجع السؤال التالي على<a href="http://stackoverflow.com/questions/8453887/why-is-it-necessary-to-set-the-prototype-constructor" rel="external nofollow noopener noreferrer">Stackoverflow</a>.</p>
+</div>
+
+<p>عُرّف في الشيفرة التالية الصنف <code>Student</code> كصنف ابن للصنف <code>Person</code>، ومن ثم أُعيد تعريف الطريقة()<code>sayHello</code> وأُضيفت الطريقة ()<code>sayGoodBye</code> علاوة على ذلك.</p>
+
+<pre class="brush: js" dir="rtl">// تعريف المشيد Person
+var Person = function(firstName) {
+ this.firstName = firstName;
+};
+
+// إضافة زوج من الطرق إلى Person.prototype
+Person.prototype.walk = function(){
+ console.log("أنا أتمشى!");
+};
+
+Person.prototype.sayHello = function(){
+ console.log("مرحبا، أنا " + this.firstName);
+};
+
+// تعريف مشيد Student
+function Student(firstName, subject) {
+ // إستدعاء المشيد اﻷب, التأكد (عن طريق الإستدعاء)
+ // من أن "this" وضعت بشكل صحيح أثناء اﻹستدعاء
+ Person.call(this, firstName);
+
+ // تهيئة خصائص الطالب المحددة
+ this.subject = subject;
+}
+
+// إنشاء كائن Student.prototype الذي يرث من Person.prototype.
+// ملاحظة: خطأ شائع أن يستعمل "new Person()" ﻹنشاء
+// Student.prototype. هذا غير صحيح لعدة أسباب،
+// ليس أقل أننا ليس لدينا أي شيء ﻹعطاء Person إلى المعامل "firstName".
+// الطريقة الصحيحة ﻹستدعاء Person هي في الأعلى حيث
+// إستدعيناه من Student.
+Student.prototype = Object.create(Person.prototype); // See note below
+
+// وضع الخاصية "constructor" للإشارة إلى Student
+Student.prototype.constructor = Student;
+
+// إستبدال الطريقة "sayHello"
+Student.prototype.sayHello = function(){
+ console.log("مرحبا، أنا " + this.firstName + ". أنا أدرس "
+ + this.subject + ".");
+};
+
+// إضافة الطريقة "sayGoodBye"
+Student.prototype.sayGoodBye = function(){
+ console.log("وداعا!");
+};
+
+// إستعمال المثال:
+var student1 = new Student("سفيان", "المناجم");
+student1.sayHello(); // "مرحبا، أنا سفيان. أنا أدرس المناجم."
+student1.walk(); // "أنا أتمشى!"
+student1.sayGoodBye(); // "وداعا!"
+
+// التحقق من أن instanceof يعمل بشكل صحيح
+console.log(student1 instanceof Person); // true
+console.log(student1 instanceof Student); // true
+</pre>
+
+<p>فيما يخص السطر ;(<code>Student.prototype = Object.create(Person.prototype</code> في الإصدارات القديمة من جافا سكريبت والتي لا تدعم <code>Object.create</code> يمكن إما استخدام بعض الحيل في خداع المتصفحات –هذه الخدع معروفة إما بالاسم polyfill أو shim—أو استخدام دالة تحقق نفس النتيجة كما في المثال التالي:</p>
+
+<pre class="brush: js" dir="rtl">function createObject(proto) {
+ function ctor() { }
+ ctor.prototype = proto;
+ return new ctor();
+}
+
+// الإستعمال:
+Student.prototype = createObject(Person.prototype);
+</pre>
+
+<div class="note"><strong>ملاحظة:</strong> أنظر <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create" title="Object.create">Object.create</a> للمزيد من المعلومات حول ما يقوم به, و الرقاقات للمحركات القديمة.</div>
+
+<p>التأكّد من أن <code>this</code> تُشير إلى الكائن المطلوب بغض النظر عن كيف للكائن أن يُستهل يمكن أن يكون صعبًا، ومع ذلك يوجد صياغة أبسط من شأنها أن تسهّل الأمر.</p>
+
+<pre class="brush: js" dir="rtl">var Person = function(firstName) {
+ if (this instanceof Person) {
+ this.firstName = firstName;
+ } else {
+ return new Person(firstName);
+ }
+}
+</pre>
+
+<h4 id="التغليف_Encapsulation">التغليف Encapsulation</h4>
+
+<p>ليس بالضرورة أن يعلم الصنف <code>Student</code> كيف تمّ تنفيذ/تعريف الطريقة ()<code>walk</code> للصنف <code>Person</code> لكي يستطيع استخدام تلك الطريقة، ولا يحتاج الصنف <code>Student</code> إلى تعريف تلك الطريقة صراحةً إلا إذا كان المطلوب التعديل عليها، ويُطلق على هذا الإجراء مفهوم التغليف encapsulation، والذي فيه يَحزم كل صنف البيانات والطُرق methods داخل وحدة/كينونة وحيدة.</p>
+
+<p>إخفاء المعلومات سمة شائعة في باقي اللغات البرمجية وعادةً ما توجد كخاصيات/كطُرق إما بالاسم<code>private</code> أو <code>protected</code>، وعلى الرغم من أنه يُمكن مماثلة/محاكاة ذات الأمر في جافا سكريبت، إلا أن هذا الأمر ليس مطلبًا من متطلبات البرمجة الكائنية.</p>
+
+<h4 id="التجريد_Abstraction">التجريد Abstraction</h4>
+
+<p>التجرير ما هو إلا ميكانيكية تسمح للمطوّر في تجسيد جانب من المشكلة التي يُعمل عليها، إما من خلال الوراثة inheritance (التخصيص specialization) أو التركيب composition، وتُحقق جافا سكريبت التخصيص من خلال الوراثة، والتركيب من خلال السماح لحالات/أمثولات الصنف لتكون قيمًا لخاصيات attributes الكائنات الأخرى.</p>
+
+<p>الصنف Function في جافا سكريبت يرث من الصنف <code>Object</code> (وهذا يوضّح التخصيص في هذا النموذج) والخاصية <code>Function.prototype</code> ما هي إلا حالة/أمثولة من الصنف <code>Object</code> (وهذا يوضّح جزئية التركيب composition).</p>
+
+<pre class="brush: js" dir="rtl">var foo = function () {};
+
+// النتيجة ==&gt; "foo عبارة عن وظيفة: true"
+console.log('foo عبارة عن وظيفة: ' + (foo instanceof Function));
+
+// النتيجة ==&gt; "foo.prototype عبارة عن كائن: true"
+console.log('foo.prototype عبارة عن كائن: ' + (foo.prototype instanceof Object));</pre>
+
+<h4 id="تعددية_الأشكال_Polymorphism">تعددية الأشكال Polymorphism</h4>
+
+<p>كما أن جميع الطُرق methods والخاصيات properties معرّفة ضمن الخاصية prototype، فيُمكن لبقية الأصناف أن تُعرِّف طُرقًا methods بنفس الاسم، وستكون الطُرق في نطاق الصنف الذي عُرفت به، إلا إذا كان الصنفان على علاقة من نوع أب وابن parent-child، بمعنى آخر أحد الصنفان يرث من الآخر<br>
+ <br>
+ هذه المقالة تُرجمة الي العربية بواسطة : <a href="https://academy.hsoub.com/profile/12-%D9%85%D8%AD%D9%85%D8%AF-%D8%A3%D8%A8%D8%B1%D8%B5/" id="ips_uid_2904_3" title="الذّهاب إلى الملف الشّخصي لعضو : محمد أبرص">محمد أبرص</a></p>
+
+<h2 id="ملاحظات">ملاحظات</h2>
+
+<p>هذه ليست الطرق الوحيدة التي يمكنك من خلالها تنفيذ البرمجة الشيئية في جافا سكريبت ، والتي تعد مرنة للغاية في هذا الصدد. وبالمثل ، فإن التقنيات الموضحة هنا لا تستخدم أي لغة خارقة ، ولا تحاكي تطبيقات اللغات الأخرى لنظرية الكائن.</p>
+
+<p>هناك تقنيات أخرى تجعل البرمجة الكائنية التوجه أكثر تقدما لكنها خارج نطاق الهذه المقالة التمهيدية.</p>
+</div>
+
+<h2 id="المراجع">المراجع</h2>
+
+<ol>
+ <li><a href="https://ar.wikipedia.org/wiki/Object-oriented_programming" id="cite-1">ويكيبيديا - البرمجة الكائنية التوجه</a></li>
+ <li><a href="https://en.wikipedia.org/wiki/Prototype-based_programming" id="cite-2">ويكيبيديا - البرمجة القائمة على النوذج</a></li>
+ <li><a href="http://en.wikipedia.org/wiki/Encapsulation_%28object-oriented_programming%29" id="cite-3">ويكيبيديا - التغليف (البرمجة الكائنية التوجه</a><a href="http://ar.wikipedia.org/wiki/Encapsulation_%28object-oriented_programming%29">)</a></li>
+</ol>
+
+<h2 id="أنظر_أيضا">أنظر أيضا</h2>
+
+<ul>
+ <li dir="ltr">{{jsxref("Function.prototype.call()")}}</li>
+ <li dir="ltr">{{jsxref("Function.prototype.apply()")}}</li>
+ <li dir="ltr">{{jsxref("Object.create()")}}</li>
+ <li dir="ltr"><a dir="rtl" href="/en-US/docs/Web/JavaScript/Reference/Strict_mode">الوضع الصارم</a></li>
+</ul>
diff --git a/files/ar/web/javascript/reference/classes/constructor/index.html b/files/ar/web/javascript/reference/classes/constructor/index.html
new file mode 100644
index 0000000000..135948c80b
--- /dev/null
+++ b/files/ar/web/javascript/reference/classes/constructor/index.html
@@ -0,0 +1,132 @@
+---
+title: المنشئ (constructor)
+slug: Web/JavaScript/Reference/Classes/constructor
+tags:
+ - جافاسكريبت
+translation_of: Web/JavaScript/Reference/Classes/constructor
+---
+<div>{{jsSidebar("Classes")}}</div>
+
+<p dir="rtl">الـ <code>constructor</code>  هي ميثود خاصة لإنشاء وتهيئة الاوبجكت(كائن) داخل (فئة)<code>class</code>.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/classes-constructor.html")}}</div>
+
+
+
+<h2 dir="rtl" id="بناء_الجملة">بناء الجملة</h2>
+
+<pre class="syntaxbox">constructor([arguments]) { ... }</pre>
+
+<h2 dir="rtl" id="الوصف">الوصف</h2>
+
+<p dir="rtl">يمكننا إستخدام تلك الميثود لمرة واحده فقط ، وفي حال إستخدمنا <code>constructor</code> ﻷكثر من مرة في نفس الفئة الـ class سيحدث {{jsxref("SyntaxError")}} إيرور .</p>
+
+<p>A constructor can use the <code>super</code> keyword to call the constructor of a parent class.</p>
+
+<p dir="rtl">إذا لم تحدد ميثود إنشاء سيتم تحديد منشئ بشكل تلقائي.</p>
+
+<p><br>
+ <sup>If you do not specify a constructor method, a default constructor is used.</sup></p>
+
+<h2 dir="rtl" id="أمثلة">أمثلة</h2>
+
+<h3 dir="rtl" id="إٍستخدام_الميثود_(اسلوب)_الـconstructor">إٍستخدام الميثود (اسلوب) الـ<code>constructor </code></h3>
+
+<p dir="rtl">ذلك الكود تم أخذه ولصقة من <a href="https://github.com/GoogleChrome/samples/blob/gh-pages/classes-es6/index.html">classes sample</a> (<a href="https://googlechrome.github.io/samples/classes-es6/index.html">live demo</a>)</p>
+
+<pre class="brush: js">class Square extends Polygon {
+ constructor(length) {
+ // Here, it calls the parent class' constructor with lengths
+ // provided for the Polygon's width and height
+ super(length, length);
+ // Note: In derived classes, super() must be called before you
+ // can use 'this'. Leaving this out will cause a reference error.
+ this.name = 'Square';
+ }
+
+ get area() {
+ return this.height * this.width;
+ }
+
+ set area(value) {
+ this.area = value;
+ }
+}</pre>
+
+<h3 dir="rtl" id="مثال_آخر">مثال آخر</h3>
+
+<p dir="rtl">إنظر إلى ذلك الكود</p>
+
+<pre class="brush: js">class Polygon {
+ constructor() {
+ this.name = "Polygon";
+ }
+}
+
+class Square extends Polygon {
+ constructor() {
+ super();
+ }
+}
+
+class Rectangle {}
+
+Object.setPrototypeOf(Square.prototype, Rectangle.prototype);
+
+console.log(Object.getPrototypeOf(Square.prototype) === Polygon.prototype); //false
+console.log(Object.getPrototypeOf(Square.prototype) === Rectangle.prototype); //true
+
+let newInstance = new Square();
+console.log(newInstance.name); //Polygon</pre>
+
+<p dir="rtl">هنا البروتوتيب فئة الـ <strong>Square</strong> تغيرت ولكن الكونستركتور (المنشئ) مبني على فئة الـ<strong>Polygon </strong>والتي تطلب عندما نقوم بإنشاء حالة مماثلة للـ <strong>Square </strong>مرة أخرى</p>
+
+<h3 dir="rtl" id="الإنشاء_الإفتراضي">الإنشاء الإفتراضي</h3>
+
+<p dir="rtl">ذكرنا سابقا أنه في حال عدم تحديدك لكونستركتور (منشئ) سيتم تحديد الكونستركتور بشكل إفتراضي ، وبالنسبة للكلاسز (الفئات) الاولية يكون الكونستركتور الخاص بها كما يلي :-</p>
+
+<pre class="brush: js">constructor() {}
+</pre>
+
+<p dir="rtl">أما الفئات المشتقة فتكون بالشكل التالي</p>
+
+<pre class="brush: js">constructor(...args) {
+ super(...args);
+}</pre>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-static-semantics-constructormethod', 'Constructor Method')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-static-semantics-constructormethod', 'Constructor Method')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 dir="rtl" id="دعم_المتصفحات">دعم المتصفحات</h2>
+
+
+
+<p>{{Compat("javascript.classes.constructor")}}</p>
+
+<h2 id="أنظر_أيضا">أنظر أيضا</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/super">super()</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/class"><code>class</code> expression</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/class"><code>class</code> declaration</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Classes">Classes</a></li>
+</ul>
diff --git a/files/ar/web/javascript/reference/classes/index.html b/files/ar/web/javascript/reference/classes/index.html
new file mode 100644
index 0000000000..d6f0143148
--- /dev/null
+++ b/files/ar/web/javascript/reference/classes/index.html
@@ -0,0 +1,380 @@
+---
+title: Classes
+slug: Web/JavaScript/Reference/Classes
+tags:
+ - Classes
+ - Constructors
+ - ECMAScript 2015
+ - Inheritance
+ - Intermediate
+ - JavaScript
+ - NeedsTranslation
+ - TopicStub
+translation_of: Web/JavaScript/Reference/Classes
+---
+<div>{{JsSidebar("Classes")}}</div>
+
+<p>JavaScript classes, introduced in ECMAScript 2015, are primarily syntactical sugar over JavaScript's existing prototype-based inheritance. The class syntax <strong>does not</strong> introduce a new object-oriented inheritance model to JavaScript.</p>
+
+<h2 id="Defining_classes">Defining classes</h2>
+
+<p>Classes are in fact "special <a href="/en-US/docs/Web/JavaScript/Reference/Functions">functions</a>", and just as you can define <a href="/en-US/docs/Web/JavaScript/Reference/Operators/function">function expressions</a> and <a href="/en-US/docs/Web/JavaScript/Reference/Statements/function">function declarations</a>, the class syntax has two components: <a href="/en-US/docs/Web/JavaScript/Reference/Operators/class">class expressions</a> and <a href="/en-US/docs/Web/JavaScript/Reference/Statements/class">class declarations</a>.</p>
+
+<h3 id="Class_declarations">Class declarations</h3>
+
+<p>One way to define a class is using a <strong>class declaration</strong>. To declare a class, you use the <code>class</code> keyword with the name of the class ("Rectangle" here).</p>
+
+<pre class="brush: js">class Rectangle {
+ constructor(height, width) {
+ this.height = height;
+ this.width = width;
+ }
+}</pre>
+
+<h4 id="Hoisting">Hoisting</h4>
+
+<p>An important difference between <strong>function declarations</strong> and <strong>class declarations</strong> is that function declarations are {{Glossary("Hoisting", "hoisted")}} and class declarations are not. You first need to declare your class and then access it, otherwise code like the following will throw a {{jsxref("ReferenceError")}}:</p>
+
+<pre class="brush: js example-bad">var p = new Rectangle(); // ReferenceError
+
+class Rectangle {}
+</pre>
+
+<h3 id="Class_expressions">Class expressions</h3>
+
+<p>A <strong>class expression</strong> is another way to define a class. Class expressions can be named or unnamed. The name given to a named class expression is local to the class's body. (it can be retrieved through the class's (not an instance's) <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name">.name</a> property, though)</p>
+
+<pre class="brush: js">// unnamed
+var Rectangle = class {
+ constructor(height, width) {
+ this.height = height;
+ this.width = width;
+ }
+};
+console.log(Rectangle.name);
+// output: "Rectangle"
+
+// named
+var Rectangle = class Rectangle2 {
+ constructor(height, width) {
+ this.height = height;
+ this.width = width;
+ }
+};
+console.log(Rectangle.name);
+// output: "Rectangle2"
+</pre>
+
+<p><strong>Note:</strong> Class <strong>expressions</strong> also suffer from the same hoisting issues mentioned for Class <strong>declarations</strong>.</p>
+
+<h2 id="Class_body_and_method_definitions">Class body and method definitions</h2>
+
+<p>The body of a class is the part that is in curly brackets <code>{}</code>. This is where you define class members, such as methods or constructor.</p>
+
+<h3 id="Strict_mode">Strict mode</h3>
+
+<p>The bodies of <em>class declarations</em> and <em>class expressions</em> are executed in <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode">strict mode</a> i.e. constructor, static and prototype methods, getter and setter functions are executed in strict mode.</p>
+
+<h3 id="Constructor">Constructor</h3>
+
+<p>The <code><a href="/en-US/docs/Web/JavaScript/Reference/Classes/constructor">constructor</a></code> method is a special method for creating and initializing an object created with a <code>class</code>. There can only be one special method with the name "constructor" in a class. A {{jsxref("SyntaxError")}} will be thrown if the class contains more than one occurrence of a <code>constructor</code> method.</p>
+
+<p>A constructor can use the <code>super</code> keyword to call the constructor of the super class.</p>
+
+<h3 id="Prototype_methods">Prototype methods</h3>
+
+<p>See also <a href="/en-US/docs/Web/JavaScript/Reference/Functions/Method_definitions">method definitions</a>.</p>
+
+<pre class="brush: js">class Rectangle {
+ constructor(height, width) {
+ this.height = height;
+ this.width = width;
+ }
+ // Getter
+ get area() {
+ return this.calcArea();
+ }
+ // Method
+ calcArea() {
+ return this.height * this.width;
+ }
+}
+
+const square = new Rectangle(10, 10);
+
+console.log(square.area); // 100</pre>
+
+<h3 id="Static_methods">Static methods</h3>
+
+<p>The <code><a href="/en-US/docs/Web/JavaScript/Reference/Classes/static">static</a></code> keyword defines a static method for a class. Static methods are called without <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript#The_object_(class_instance)" title='An example of class instance is "var john = new Person();"'>instantiating </a>their class and <strong>cannot </strong>be called through a class instance. Static methods are often used to create utility functions for an application.</p>
+
+<pre class="brush: js">class Point {
+ constructor(x, y) {
+ this.x = x;
+ this.y = y;
+ }
+
+ static distance(a, b) {
+ const dx = a.x - b.x;
+ const dy = a.y - b.y;
+
+ return Math.hypot(dx, dy);
+ }
+}
+
+const p1 = new Point(5, 5);
+const p2 = new Point(10, 10);
+
+console.log(Point.distance(p1, p2)); // 7.0710678118654755</pre>
+
+<h3 id="Boxing_with_prototype_and_static_methods">Boxing with prototype and static methods</h3>
+
+<p>When a static or prototype method is called without a value for <em>this</em>, the <em>this</em> value will be <font face="consolas, Liberation Mono, courier, monospace"><span style="background-color: rgba(220, 220, 220, 0.498039);">undefined</span></font> inside the method. This behavior will be the same even if the <code>"use strict"</code> directive isn't present, because code within the <code>class</code> syntax is always executed in strict mode.</p>
+
+<pre class="brush: js">class Animal {
+ speak() {
+ return this;
+ }
+ static eat() {
+ return this;
+ }
+}
+
+let obj = new Animal();
+obj.speak(); // Animal {}
+let speak = obj.speak;
+speak(); // undefined
+
+Animal.eat() // class Animal
+let eat = Animal.eat;
+eat(); // undefined</pre>
+
+<p>If the above is written using traditional function–based syntax, then autoboxing in method calls will happen in non–strict mode based on the initial <em>this</em> value. If the inital value is <code>undefined</code>, <em>this</em> will be set to the global object.</p>
+
+<p>Autoboxing will not happen in strict mode, the <em>this</em> value remains as passed.</p>
+
+<pre class="brush: js">function Animal() { }
+
+Animal.prototype.speak = function() {
+ return this;
+}
+
+Animal.eat = function() {
+ return this;
+}
+
+let obj = new Animal();
+let speak = obj.speak;
+speak(); // global object
+
+let eat = Animal.eat;
+eat(); // global object
+</pre>
+
+<h3 id="Instance_properties">Instance properties</h3>
+
+<p>Instance properties must be defined inside of class methods:</p>
+
+<pre class="brush: js">class Rectangle {
+ constructor(height, width) {
+ this.height = height;
+ this.width = width;
+ }
+}</pre>
+
+<p>Static class-side properties and prototype data properties must be defined outside of the ClassBody declaration:</p>
+
+<pre class="brush: js">Rectangle.staticWidth = 20;
+Rectangle.prototype.prototypeWidth = 25;
+</pre>
+
+<p> </p>
+
+<h2 id="Sub_classing_with_extends">Sub classing with <code>extends</code></h2>
+
+<p>The <code><a href="/en-US/docs/Web/JavaScript/Reference/Classes/extends">extends</a></code> keyword is used in <em>class declarations</em> or <em>class expressions</em> to create a class as a child of another class.</p>
+
+<pre class="brush: js">class Animal {
+ constructor(name) {
+ this.name = name;
+ }
+
+ speak() {
+ console.log(this.name + ' makes a noise.');
+ }
+}
+
+class Dog extends Animal {
+ speak() {
+ console.log(this.name + ' barks.');
+ }
+}
+
+var d = new Dog('Mitzie');
+d.speak(); // Mitzie barks.
+</pre>
+
+<p>If there is a constructor present in subclass, it needs to first call super() before using "this".</p>
+
+<p>One may also extend traditional function-based "classes":</p>
+
+<pre class="brush: js">function Animal (name) {
+ this.name = name;
+}
+
+Animal.prototype.speak = function () {
+ console.log(this.name + ' makes a noise.');
+}
+
+class Dog extends Animal {
+ speak() {
+ console.log(this.name + ' barks.');
+ }
+}
+
+var d = new Dog('Mitzie');
+d.speak(); // Mitzie barks.
+</pre>
+
+<p>Note that classes cannot extend regular (non-constructible) objects. If you want to inherit from a regular object, you can instead use {{jsxref("Object.setPrototypeOf()")}}:</p>
+
+<pre class="brush: js">var Animal = {
+ speak() {
+ console.log(this.name + ' makes a noise.');
+ }
+};
+
+class Dog {
+ constructor(name) {
+ this.name = name;
+ }
+}
+
+// If you do not do this you will get a TypeError when you invoke speak
+Object.setPrototypeOf(Dog.prototype, Animal);
+
+var d = new Dog('Mitzie');
+d.speak(); // Mitzie makes a noise.
+</pre>
+
+<h2 id="Species">Species</h2>
+
+<p>You might want to return {{jsxref("Array")}} objects in your derived array class <code>MyArray</code>. The species pattern lets you override default constructors.</p>
+
+<p>For example, when using methods such as {{jsxref("Array.map", "map()")}} that returns the default constructor, you want these methods to return a parent <code>Array</code> object, instead of the <code>MyArray</code> object. The {{jsxref("Symbol.species")}} symbol lets you do this:</p>
+
+<pre class="brush: js">class MyArray extends Array {
+ // Overwrite species to the parent Array constructor
+ static get [Symbol.species]() { return Array; }
+}
+
+var a = new MyArray(1,2,3);
+var mapped = a.map(x =&gt; x * x);
+
+console.log(mapped instanceof MyArray); // false
+console.log(mapped instanceof Array); // true
+</pre>
+
+<h2 id="Super_class_calls_with_super">Super class calls with <code>super</code></h2>
+
+<p>The <code><a href="/en-US/docs/Web/JavaScript/Reference/Operators/super">super</a></code> keyword is used to call corresponding methods of super class.</p>
+
+<pre class="brush: js">class Cat {
+ constructor(name) {
+ this.name = name;
+ }
+
+ speak() {
+ console.log(this.name + ' makes a noise.');
+ }
+}
+
+class Lion extends Cat {
+ speak() {
+ super.speak();
+ console.log(this.name + ' roars.');
+ }
+}
+
+var l = new Lion('Fuzzy');
+l.speak();
+// Fuzzy makes a noise.
+// Fuzzy roars.
+
+</pre>
+
+<h2 id="Mix-ins">Mix-ins</h2>
+
+<p>Abstract subclasses or <em>mix-ins</em> are templates for classes. An ECMAScript class can only have a single superclass, so multiple inheritance from tooling classes, for example, is not possible. The functionality must be provided by the superclass.</p>
+
+<p>A function with a superclass as input and a subclass extending that superclass as output can be used to implement mix-ins in ECMAScript:</p>
+
+<pre class="brush: js">var calculatorMixin = Base =&gt; class extends Base {
+ calc() { }
+};
+
+var randomizerMixin = Base =&gt; class extends Base {
+ randomize() { }
+};
+</pre>
+
+<p>A class that uses these mix-ins can then be written like this:</p>
+
+<pre class="brush: js">class Foo { }
+class Bar extends calculatorMixin(randomizerMixin(Foo)) { }</pre>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-class-definitions', 'Class definitions')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2016', '#sec-class-definitions', 'Class definitions')}}</td>
+ <td>{{Spec2('ES2016')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2017', '#sec-class-definitions', 'Class definitions')}}</td>
+ <td>{{Spec2('ES2017')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-class-definitions', 'Class definitions')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+
+
+<p>{{Compat("javascript.classes")}}</p>
+
+<h2 id="Running_in_Scratchpad">Running in Scratchpad</h2>
+
+<p>A class can't be redefined. If you're playing with code in Scratchpad (Firefox menu Tools &gt; Web Developer &gt; Scratchpad) and you 'Run' a definition of a class with the same name twice, you'll get a confusing SyntaxError: redeclaration of let &lt;class-name&gt;.</p>
+
+<p>To re-run a definition, use Scratchpad's menu Execute &gt; Reload and Run.<br>
+ Please vote for bug <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1428672">#1428672</a>.</p>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Functions">Functions</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/class"><code>class</code> declaration</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/class"><code>class</code> expression</a></li>
+ <li>{{jsxref("Operators/super", "super")}}</li>
+ <li><a href="https://hacks.mozilla.org/2015/07/es6-in-depth-classes/">Blog post: "ES6 In Depth: Classes"</a></li>
+ <li><a href="https://github.com/tc39/proposal-class-fields">Fields and public/private class properties proposal (stage 3)</a></li>
+</ul>
diff --git a/files/ar/web/javascript/reference/errors/index.html b/files/ar/web/javascript/reference/errors/index.html
new file mode 100644
index 0000000000..c295fccea6
--- /dev/null
+++ b/files/ar/web/javascript/reference/errors/index.html
@@ -0,0 +1,31 @@
+---
+title: JavaScript error reference
+slug: Web/JavaScript/Reference/Errors
+tags:
+ - Debugging
+ - Error
+ - Errors
+ - Exception
+ - JavaScript
+ - NeedsTranslation
+ - TopicStub
+ - exceptions
+translation_of: Web/JavaScript/Reference/Errors
+---
+<p>{{jsSidebar("Errors")}}</p>
+
+<p>Below, you'll find a list of errors which are thrown by JavaScript. These errors can be a helpful debugging aid, but the reported problem isn't always immediately clear. The pages below will provide additional details about these errors. Each error is an object based upon the {{jsxref("Error")}} object, and has a <code>name</code> and a <code>message</code>.</p>
+
+<p>Errors displayed in the Web console may include a link to the corresponding page below to help you quickly comprehend the problem in your code.</p>
+
+<h2 id="List_of_errors">List of errors</h2>
+
+<p>In this list, each page is listed by name (the type of error) and message (a more detailed human-readable error message). Together, these two properties provide a starting point toward understanding and resolving the error. For more information, follow the links below!</p>
+
+<p>{{ListSubPages("/en-US/docs/Web/JavaScript/Reference/Errors")}}</p>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Learn/JavaScript/First_steps/What_went_wrong">What went wrong? Troubleshooting JavaScript</a>: Beginner's introductory tutorial on fixing JavaScript errors.</li>
+</ul>
diff --git a/files/ar/web/javascript/reference/errors/unexpected_type/index.html b/files/ar/web/javascript/reference/errors/unexpected_type/index.html
new file mode 100644
index 0000000000..085dc8a167
--- /dev/null
+++ b/files/ar/web/javascript/reference/errors/unexpected_type/index.html
@@ -0,0 +1,68 @@
+---
+title: 'TypeError: "x" is (not) "y"'
+slug: Web/JavaScript/Reference/Errors/Unexpected_type
+tags:
+ - الأخطاء
+ - جافاسكربت
+ - نوع الخطأ
+translation_of: Web/JavaScript/Reference/Errors/Unexpected_type
+---
+<div>{{jsSidebar("Errors")}}</div>
+
+<h2 id="الرسالة">الرسالة</h2>
+
+<pre class="syntaxbox">TypeError: Unable to get property {x} of undefined or null reference (Edge)
+TypeError: "x" is (not) "y" (Firefox)
+
+Examples:
+TypeError: "x" is undefined
+TypeError: "x" is null
+TypeError: "undefined" is not an object
+TypeError: "x" is not an object or null
+TypeError: "x" is not a symbol
+</pre>
+
+<h2 id="نوع_الخطأ">نوع الخطأ</h2>
+
+<p>{{jsxref("TypeError")}}.</p>
+
+<h2 id="ماذا_حصل؟"> ماذا حصل؟</h2>
+
+<p>خطأ غير متوقع، يحدث كثيرا مع {{jsxref("undefined")}} أو قيم {{jsxref("null")}} .</p>
+
+<p>أيضا في بعض الوضائف مثل {{jsxref("Object.create()")}} أو {{jsxref("Symbol.keyFor()")}}, تحتاج تقديد أنواع محددة.</p>
+
+<h2 id="أمثلة">أمثلة</h2>
+
+<h3 id="حالات_غير_صحيحة">حالات غير صحيحة</h3>
+
+<pre class="brush: js example-bad">// undefined and null cases on which the substring method won't work
+var foo = undefined;
+foo.substring(1); // TypeError: foo is undefined
+
+var foo = null;
+foo.substring(1); // TypeError: foo is null
+
+
+// Certain methods might require a specific type
+var foo = {}
+Symbol.keyFor(foo); // TypeError: foo is not a symbol
+
+var foo = 'bar'
+Object.create(foo); // TypeError: "foo" is not an object or null
+</pre>
+
+<h3 class="highlight-spanned" id="حل_المشكلة"><span class="highlight-span"><span class="notranslate">حل المشكلة</span> </span></h3>
+
+<p><span class="notranslate">لإصلاح مؤشر null إلى قيم <code>undefined</code> أو <code>null</code> ، يمكنك استخدام عامل التشغيل <a href="https://translate.googleusercontent.com/translate_c?act=url&amp;depth=1&amp;hl=ar&amp;ie=UTF8&amp;prev=_t&amp;rurl=translate.google.com&amp;sl=auto&amp;sp=nmt4&amp;tl=ar&amp;u=https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof&amp;xid=17259,1500002,15700002,15700021,15700124,15700149,15700186,15700190,15700201,15700214&amp;usg=ALkJrhh23enjQBtOCeYxpsucdSXvqqK0dg">typeof</a> ، على سبيل المثال.</span></p>
+
+<pre class="brush: js">if (typeof foo !== 'undefined') {
+ // الآن نعلم أن القيمة المدخلة غير محددة، نستطيع القيام بأي إجراء بدون خطأ.
+}</pre>
+
+<h2 id="شاهد_أيضاً">شاهد أيضاً</h2>
+
+<ul>
+ <li>{{jsxref("undefined")}}</li>
+ <li>{{jsxref("null")}}</li>
+</ul>
diff --git a/files/ar/web/javascript/reference/global_objects/array/index.html b/files/ar/web/javascript/reference/global_objects/array/index.html
new file mode 100644
index 0000000000..1e00adcf73
--- /dev/null
+++ b/files/ar/web/javascript/reference/global_objects/array/index.html
@@ -0,0 +1,481 @@
+---
+title: Array
+slug: Web/JavaScript/Reference/Global_Objects/Array
+translation_of: Web/JavaScript/Reference/Global_Objects/Array
+---
+<div>{{JSRef}}</div>
+
+<div dir="rtl">كائن <strong>Array</strong> في جافاسكربت  هو كائن عام، يستخدم في إنشاء المصفوفات، وهي تشبه قائمة من الكائنات عالية المستوى.</div>
+
+<div dir="rtl"> </div>
+
+<p dir="rtl"><strong>إنشاء مصفوفة</strong></p>
+
+<pre class="brush: js">var fruits = ["Apple", "Banana"];
+
+console.log(fruits.length);
+// 2
+</pre>
+
+<p dir="rtl"><strong>الوصول إلى عنصر محدد في المصفوفة</strong></p>
+
+<pre class="brush: js">var first = fruits[0];
+// Apple
+
+var last = fruits[fruits.length - 1];
+// Banana
+</pre>
+
+<p dir="rtl"><strong>تنفيذ حلقة تكرار على مصفوفة</strong></p>
+
+<pre class="brush: js">fruits.forEach(function (item, index, array) {
+  console.log(item, index);
+});
+// Apple 0
+// Banana 1
+</pre>
+
+<p dir="rtl"><strong>إلحاق عنصر بآخر المصفوفة</strong></p>
+
+<pre class="brush: js">var newLength = fruits.push("Orange");
+// ["Apple", "Banana", "Orange"]
+</pre>
+
+<p dir="rtl"><strong>حذف عنصر من نهاية المصفوفة</strong></p>
+
+<pre class="brush: js">var last = fruits.pop(); // remove Orange (from the end)
+// ["Apple", "Banana"];
+</pre>
+
+<p dir="rtl"><strong>حذف عنصر من بداية المصفوفة</strong></p>
+
+<pre class="brush: js">var first = fruits.shift(); // remove Apple from the front
+// ["Banana"];
+</pre>
+
+<p dir="rtl"><strong>إضافة عنصر إلى بداية المصفوفة</strong></p>
+
+<pre class="brush: js">var newLength = fruits.unshift("Strawberry") // add to the front
+// ["Strawberry", "Banana"];
+</pre>
+
+<p dir="rtl"><strong>الوصول إلى ترتيب عنصر معينة في المصفوفة</strong></p>
+
+<pre class="brush: js">fruits.push("Mango");
+// ["Strawberry", "Banana", "Mango"]
+
+var pos = fruits.indexOf("Banana");
+// 1
+</pre>
+
+<p dir="rtl"><strong>حذف عنصر عن طريق ترتيبه في المصفوفة</strong></p>
+
+<pre class="brush: js">var removedItem = fruits.splice(pos, 1); // this is how to remove an item
+// ["Strawberry", "Mango"]
+</pre>
+
+<p dir="rtl"><strong>نسخة مصفوفة</strong></p>
+
+<pre class="brush: js">var shallowCopy = fruits.slice(); // this is how to make a copy
+// ["Strawberry", "Mango"]
+</pre>
+
+<h2 id="Syntax">Syntax</h2>
+
+<pre class="syntaxbox"><code>[<var>element0</var>, <var>element1</var>, ..., <var>elementN</var>]
+new Array(<var>element0</var>, <var>element1</var>[, ...[, <var>elementN</var>]])
+new Array(<var>arrayLength</var>)</code></pre>
+
+<h3 id="Parameters">Parameters</h3>
+
+<dl>
+ <dt><code>element<em>N</em></code></dt>
+ <dd>A JavaScript array is initialized with the given elements, except in the case where a single argument is passed to the <code>Array</code> constructor and that argument is a number (see the arrayLength parameter below).Note that this special case only applies to JavaScript arrays created with the <code>Array</code> constructor, not array literals created with the bracket syntax.</dd>
+ <dt><code>arrayLength</code></dt>
+ <dd>If the only argument passed to the <code>Array</code> constructor is an integer between 0 and 2<sup>32</sup>-1 (inclusive), this returns a new JavaScript array with length set to that number. If the argument is any other number, a {{jsxref("RangeError")}} exception is thrown.</dd>
+</dl>
+
+<h2 dir="rtl" id="الوصف">الوصف</h2>
+
+<p>Arrays are list-like objects whose prototype has methods to perform traversal and mutation operations. Neither the length of a JavaScript array nor the types of its elements are fixed. Since an array's length can change at any time, and data can be stored at non-contiguous locations in the array, JavaScript arrays are not guaranteed to be dense; this depends on how the programmer chooses to use them. In general, these are convenient characteristics; but if these features are not desirable for your particular use, you might consider using typed arrays.</p>
+
+<p>Some people think that <a class="external" href="http://www.andrewdupont.net/2006/05/18/javascript-associative-arrays-considered-harmful/">you shouldn't use an array as an associative array</a>. In any case, you can use plain {{jsxref("Global_Objects/Object", "objects")}} instead, although doing so comes with its own caveats. See the post <a class="external" href="http://www.less-broken.com/blog/2010/12/lightweight-javascript-dictionaries.html">Lightweight JavaScript dictionaries with arbitrary keys</a> as an example.</p>
+
+<h3 dir="rtl" id="الوصول_إلى_عناصر_المصفوفة">الوصول إلى عناصر المصفوفة</h3>
+
+<p>JavaScript arrays are zero-indexed: the first element of an array is at index <code>0</code>, and the last element is at the index equal to the value of the array's {{jsxref("Array.length", "length")}} property minus 1.</p>
+
+<pre class="brush: js">var arr = ['this is the first element', 'this is the second element'];
+console.log(arr[0]); // logs 'this is the first element'
+console.log(arr[1]); // logs 'this is the second element'
+console.log(arr[arr.length - 1]); // logs 'this is the second element'
+</pre>
+
+<p>Array elements are object properties in the same way that <code>toString</code> is a property, but trying to access an element of an array as follows throws a syntax error, because the property name is not valid:</p>
+
+<pre class="brush: js">console.log(arr.0); // a syntax error
+</pre>
+
+<p>There is nothing special about JavaScript arrays and the properties that cause this. JavaScript properties that begin with a digit cannot be referenced with dot notation; and must be accessed using bracket notation. For example, if you had an object with a property named <code>'3d'</code>, it can only be referenced using bracket notation. E.g.:</p>
+
+<pre class="brush: js">var years = [1950, 1960, 1970, 1980, 1990, 2000, 2010];
+console.log(years.0); // a syntax error
+console.log(years[0]); // works properly
+</pre>
+
+<pre class="brush: js">renderer.3d.setTexture(model, 'character.png'); // a syntax error
+renderer['3d'].setTexture(model, 'character.png'); // works properly
+</pre>
+
+<p>Note that in the <code>3d</code> example, <code>'3d'</code> had to be quoted. It's possible to quote the JavaScript array indexes as well (e.g., <code>years['2']</code> instead of <code>years[2]</code>), although it's not necessary. The 2 in <code>years[2]</code> is coerced into a string by the JavaScript engine through an implicit <code>toString</code> conversion. It is for this reason that <code>'2'</code> and <code>'02'</code> would refer to two different slots on the <code>years</code> object and the following example could be <code>true</code>:</p>
+
+<pre class="brush: js">console.log(years['2'] != years['02']);
+</pre>
+
+<p>Similarly, object properties which happen to be reserved words(!) can only be accessed as string literals in bracket notation(but it can be accessed by dot notation in firefox 40.0a2 at least):</p>
+
+<pre class="brush: js">var promise = {
+ 'var' : 'text',
+ 'array': [1, 2, 3, 4]
+};
+
+console.log(promise['array']);
+</pre>
+
+<h3 id="Relationship_between_length_and_numerical_properties">Relationship between <code>length</code> and numerical properties</h3>
+
+<p>A JavaScript array's {{jsxref("Array.length", "length")}} property and numerical properties are connected. Several of the built-in array methods (e.g., {{jsxref("Array.join", "join")}}, {{jsxref("Array.slice", "slice")}}, {{jsxref("Array.indexOf", "indexOf")}}, etc.) take into account the value of an array's {{jsxref("Array.length", "length")}} property when they're called. Other methods (e.g., {{jsxref("Array.push", "push")}}, {{jsxref("Array.splice", "splice")}}, etc.) also result in updates to an array's {{jsxref("Array.length", "length")}} property.</p>
+
+<pre class="brush: js">var fruits = [];
+fruits.push('banana', 'apple', 'peach');
+
+console.log(fruits.length); // 3
+</pre>
+
+<p>When setting a property on a JavaScript array when the property is a valid array index and that index is outside the current bounds of the array, the engine will update the array's {{jsxref("Array.length", "length")}} property accordingly:</p>
+
+<pre class="brush: js">fruits[5] = 'mango';
+console.log(fruits[5]); // 'mango'
+console.log(Object.keys(fruits)); // ['0', '1', '2', '5']
+console.log(fruits.length); // 6
+</pre>
+
+<p>Increasing the {{jsxref("Array.length", "length")}}.</p>
+
+<pre class="brush: js">fruits.length = 10;
+console.log(Object.keys(fruits)); // ['0', '1', '2', '5']
+console.log(fruits.length); // 10
+</pre>
+
+<p>Decreasing the {{jsxref("Array.length", "length")}} property does, however, delete elements.</p>
+
+<pre class="brush: js">fruits.length = 2;
+console.log(Object.keys(fruits)); // ['0', '1']
+console.log(fruits.length); // 2
+</pre>
+
+<p>This is explained further on the {{jsxref("Array.length")}} page.</p>
+
+<h3 id="Creating_an_array_using_the_result_of_a_match">Creating an array using the result of a match</h3>
+
+<p>The result of a match between a regular expression and a string can create a JavaScript array. This array has properties and elements which provide information about the match. Such an array is returned by {{jsxref("RegExp.exec")}}, {{jsxref("String.match")}}, and {{jsxref("String.replace")}}. To help explain these properties and elements, look at the following example and then refer to the table below:</p>
+
+<pre class="brush: js">// Match one d followed by one or more b's followed by one d
+// Remember matched b's and the following d
+// Ignore case
+
+var myRe = /d(b+)(d)/i;
+var myArray = myRe.exec('cdbBdbsbz');
+</pre>
+
+<p>The properties and elements returned from this match are as follows:</p>
+
+<table class="fullwidth-table">
+ <tbody>
+ <tr>
+ <td class="header">Property/Element</td>
+ <td class="header">Description</td>
+ <td class="header">Example</td>
+ </tr>
+ <tr>
+ <td><code>input</code></td>
+ <td>A read-only property that reflects the original string against which the regular expression was matched.</td>
+ <td>cdbBdbsbz</td>
+ </tr>
+ <tr>
+ <td><code>index</code></td>
+ <td>A read-only property that is the zero-based index of the match in the string.</td>
+ <td>1</td>
+ </tr>
+ <tr>
+ <td><code>[0]</code></td>
+ <td>A read-only element that specifies the last matched characters.</td>
+ <td>dbBd</td>
+ </tr>
+ <tr>
+ <td><code>[1], ...[n]</code></td>
+ <td>Read-only elements that specify the parenthesized substring matches, if included in the regular expression. The number of possible parenthesized substrings is unlimited.</td>
+ <td>[1]: bB<br>
+ [2]: d</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 dir="rtl" id="الخصائص">الخصائص</h2>
+
+<dl>
+ <dt><code>Array.length</code></dt>
+ <dd>The <code>Array</code> constructor's length property whose value is 1.</dd>
+ <dt>{{jsxref("Array.@@species", "get Array[@@species]")}}</dt>
+ <dd>The constructor function that is used to create derived objects.</dd>
+ <dt>{{jsxref("Array.prototype")}}</dt>
+ <dd>Allows the addition of properties to all array objects.</dd>
+</dl>
+
+<h2 dir="rtl" id="الدوال">الدوال</h2>
+
+<dl>
+ <dt>{{jsxref("Array.from()")}}</dt>
+ <dd>Creates a new <code>Array</code> instance from an array-like or iterable object.</dd>
+ <dt>{{jsxref("Array.isArray()")}}</dt>
+ <dd>Returns true if a variable is an array, if not false.</dd>
+ <dt>{{jsxref("Array.of()")}}</dt>
+ <dd>Creates a new <code>Array</code> instance with a variable number of arguments, regardless of number or type of the arguments.</dd>
+</dl>
+
+<h2 id="Array_instances"><code>Array</code> instances</h2>
+
+<p>All <code>Array</code> instances inherit from {{jsxref("Array.prototype")}}. The prototype object of the <code>Array</code> constructor can be modified to affect all <code>Array</code> instances.</p>
+
+<h3 dir="rtl" id="الخصائص_2">الخصائص</h3>
+
+<div>{{page('/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/prototype', 'Properties')}}</div>
+
+<h3 dir="rtl" id="الدوال_2">الدوال</h3>
+
+<h4 id="Mutator_methods">Mutator methods</h4>
+
+<div>{{page('en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/prototype', 'Mutator_methods')}}</div>
+
+<h4 id="Accessor_methods">Accessor methods</h4>
+
+<div>{{page('en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/prototype', 'Accessor_methods')}}</div>
+
+<h4 id="Iteration_methods">Iteration methods</h4>
+
+<div>{{page('en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/prototype', 'Iteration_methods')}}</div>
+
+<h2 id="Array_generic_methods"><code>Array</code> generic methods</h2>
+
+<div class="warning">
+<p><strong>Array generics are non-standard, deprecated and will get removed near future</strong>. Note that you can not rely on them cross-browser. However, there is a <a href="https://github.com/plusdude/array-generics">shim available on GitHub</a>.</p>
+</div>
+
+<p>Sometimes you would like to apply array methods to strings or other array-like objects (such as function {{jsxref("Functions/arguments", "arguments", "", 1)}}). By doing this, you treat a string as an array of characters (or otherwise treat a non-array as an array). For example, in order to check that every character in the variable <var>str</var> is a letter, you would write:</p>
+
+<pre class="brush: js">function isLetter(character) {
+ return character &gt;= 'a' &amp;&amp; character &lt;= 'z';
+}
+
+if (Array.prototype.every.call(str, isLetter)) {
+ console.log("The string '" + str + "' contains only letters!");
+}
+</pre>
+
+<p>This notation is rather wasteful and JavaScript 1.6 introduced a generic shorthand:</p>
+
+<pre class="brush: js">if (Array.every(str, isLetter)) {
+ console.log("The string '" + str + "' contains only letters!");
+}
+</pre>
+
+<p>{{jsxref("Global_Objects/String", "Generics", "#String_generic_methods", 1)}} are also available on {{jsxref("String")}}.</p>
+
+<p>These are <strong>not</strong> part of ECMAScript standards (though the ES6 {{jsxref("Array.from()")}} can be used to achieve this). The following is a shim to allow its use in all browsers:</p>
+
+<pre class="brush: js">// Assumes Array extras already present (one may use polyfills for these as well)
+(function() {
+ 'use strict';
+
+ var i,
+ // We could also build the array of methods with the following, but the
+ // getOwnPropertyNames() method is non-shimable:
+ // Object.getOwnPropertyNames(Array).filter(function(methodName) {
+ // return typeof Array[methodName] === 'function'
+ // });
+ methods = [
+ 'join', 'reverse', 'sort', 'push', 'pop', 'shift', 'unshift',
+ 'splice', 'concat', 'slice', 'indexOf', 'lastIndexOf',
+ 'forEach', 'map', 'reduce', 'reduceRight', 'filter',
+ 'some', 'every', 'find', 'findIndex', 'entries', 'keys',
+  'values', 'copyWithin', 'includes'
+ ],
+ methodCount = methods.length,
+ assignArrayGeneric = function(methodName) {
+ if (!Array[methodName]) {
+ var method = Array.prototype[methodName];
+ if (typeof method === 'function') {
+ Array[methodName] = function() {
+ return method.call.apply(method, arguments);
+ };
+ }
+ }
+ };
+
+ for (i = 0; i &lt; methodCount; i++) {
+ assignArrayGeneric(methods[i]);
+ }
+}());
+</pre>
+
+<h2 dir="rtl" id="أمثلة">أمثلة</h2>
+
+<h3 dir="rtl" id="إنشاء_مصفوفة">إنشاء مصفوفة</h3>
+
+<p>The following example creates an array, <code>msgArray</code>, with a length of 0, then assigns values to <code>msgArray[0]</code> and <code>msgArray[99]</code>, changing the length of the array to 100.</p>
+
+<pre class="brush: js">var msgArray = [];
+msgArray[0] = 'Hello';
+msgArray[99] = 'world';
+
+if (msgArray.length === 100) {
+ console.log('The length is 100.');
+}
+</pre>
+
+<h3 dir="rtl" id="إنشاء_مصفوفة_ذات_بعدين">إنشاء مصفوفة ذات بعدين</h3>
+
+<p>The following creates a chess board as a two dimensional array of strings. The first move is made by copying the 'p' in (6,4) to (4,4). The old position (6,4) is made blank.</p>
+
+<pre class="brush: js">var board = [
+ ['R','N','B','Q','K','B','N','R'],
+ ['P','P','P','P','P','P','P','P'],
+ [' ',' ',' ',' ',' ',' ',' ',' '],
+ [' ',' ',' ',' ',' ',' ',' ',' '],
+ [' ',' ',' ',' ',' ',' ',' ',' '],
+ [' ',' ',' ',' ',' ',' ',' ',' '],
+ ['p','p','p','p','p','p','p','p'],
+ ['r','n','b','q','k','b','n','r'] ];
+
+console.log(board.join('\n') + '\n\n');
+
+// Move King's Pawn forward 2
+board[4][4] = board[6][4];
+board[6][4] = ' ';
+console.log(board.join('\n'));
+</pre>
+
+<p dir="rtl">هذه هي النتيجة (الخرج):</p>
+
+<pre class="eval">R,N,B,Q,K,B,N,R
+P,P,P,P,P,P,P,P
+ , , , , , , ,
+ , , , , , , ,
+ , , , , , , ,
+ , , , , , , ,
+p,p,p,p,p,p,p,p
+r,n,b,q,k,b,n,r
+
+R,N,B,Q,K,B,N,R
+P,P,P,P,P,P,P,P
+ , , , , , , ,
+ , , , , , , ,
+ , , , ,p, , ,
+ , , , , , , ,
+p,p,p,p, ,p,p,p
+r,n,b,q,k,b,n,r
+</pre>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.4', 'Array')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>New methods added: {{jsxref("Array.isArray")}}, {{jsxref("Array.prototype.indexOf", "indexOf")}}, {{jsxref("Array.prototype.lastIndexOf", "lastIndexOf")}}, {{jsxref("Array.prototype.every", "every")}}, {{jsxref("Array.prototype.some", "some")}}, {{jsxref("Array.prototype.forEach", "forEach")}}, {{jsxref("Array.prototype.map", "map")}}, {{jsxref("Array.prototype.filter", "filter")}}, {{jsxref("Array.prototype.reduce", "reduce")}}, {{jsxref("Array.prototype.reduceRight", "reduceRight")}}</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-array-objects', 'Array')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>New methods added: {{jsxref("Array.from")}}, {{jsxref("Array.of")}}, {{jsxref("Array.prototype.find", "find")}}, {{jsxref("Array.prototype.findIndex", "findIndex")}}, {{jsxref("Array.prototype.fill", "fill")}}, {{jsxref("Array.prototype.copyWithin", "copyWithin")}}</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-array-objects', 'Array')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td>New method added: {{jsxref("Array.prototype.includes()")}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 dir="rtl" id="التوافق_مع_المتصفحات">التوافق مع المتصفحات</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 dir="rtl" id="إقرأ_أيضا">إقرأ أيضا</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Guide/Working_with_Objects#Indexing_object_properties">JavaScript Guide: “Indexing object properties”</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Guide/Predefined_Core_Objects#Array_Object">JavaScript Guide: “Predefined Core Objects: <code>Array</code> Object”</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Array_comprehensions">Array comprehensions</a></li>
+ <li><a href="https://github.com/plusdude/array-generics">Polyfill for JavaScript 1.8.5 Array Generics and ECMAScript 5 Array Extras</a></li>
+ <li><a href="/en-US/docs/JavaScript_typed_arrays">Typed Arrays</a></li>
+</ul>
diff --git a/files/ar/web/javascript/reference/global_objects/array/isarray/index.html b/files/ar/web/javascript/reference/global_objects/array/isarray/index.html
new file mode 100644
index 0000000000..f78eb1574d
--- /dev/null
+++ b/files/ar/web/javascript/reference/global_objects/array/isarray/index.html
@@ -0,0 +1,146 @@
+---
+title: ()Array.isArray
+slug: Web/JavaScript/Reference/Global_Objects/Array/isArray
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/isArray
+---
+<div>{{JSRef}}</div>
+
+<p dir="rtl"><code><strong>()Array.isArray</strong></code> تفحص القيمة التي تم تمريرها هل هي {{jsxref("Array")}} أم ﻻ.</p>
+
+<h2 dir="rtl" id="بنية_الجملة">بنية الجملة</h2>
+
+<pre class="syntaxbox"><code>Array.isArray(<em>value</em>)</code></pre>
+
+<h3 dir="rtl" id="المعلمات">المعلمات</h3>
+
+<dl>
+ <dt><font face="consolas, Liberation Mono, courier, monospace"><span style="background-color: rgba(220, 220, 220, 0.5);">value</span></font></dt>
+ <dd dir="rtl">القيمة التي سيتم فحصها.</dd>
+</dl>
+
+<h3 dir="rtl" id="القيمة_العائدة">القيمة العائدة</h3>
+
+<p dir="rtl">تكون القيمة العائدة <code>true</code> إذا كانت {{jsxref("Array")}}؛ وتكون <code>false</code> إذا كانت غير ذلك.</p>
+
+<h2 dir="rtl" id="الوصف">الوصف</h2>
+
+<p dir="rtl">إذا كانت القيمة {{jsxref("Array")}}, <code>true</code> ستكون القيمة العائدة؛ غير ذلك ستكون <code>false</code>.</p>
+
+<p dir="rtl"><span style="line-height: 1.5;">لمزيد من التفاصيل، راجع هذا المقال </span><a href="http://web.mit.edu/jwalden/www/isArray.html" style="line-height: 1.5;">“Determining with absolute accuracy whether or not a JavaScript object is an array”</a><span style="line-height: 1.5;"> .</span></p>
+
+<h2 dir="rtl" id="أمثلة">أمثلة</h2>
+
+<pre class="brush: js">//true جميع الأمثلة التالية ترجع
+Array.isArray([]);
+Array.isArray([1]);
+Array.isArray(new Array());
+//هي نفسها مصفوفة Array.prototype حقيقة معروفة أن
+Array.isArray(Array.prototype);
+
+//false جميع الأمثلة التالية ترجع
+Array.isArray();
+Array.isArray({});
+Array.isArray(null);
+Array.isArray(undefined);
+Array.isArray(17);
+Array.isArray('Array');
+Array.isArray(true);
+Array.isArray(false);
+Array.isArray({ __proto__: Array.prototype });
+</pre>
+
+<h2 id="Polyfill">Polyfill</h2>
+
+<p>Running the following code before any other code will create <code>Array.isArray()</code> if it's not natively available.</p>
+
+<pre class="brush: js">if (!Array.isArray) {
+ Array.isArray = function(arg) {
+ return Object.prototype.toString.call(arg) === '[object Array]';
+ };
+}
+</pre>
+
+<h2 dir="rtl" id="المواصفات">المواصفات</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.4.3.2', 'Array.isArray')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Initial definition. Implemented in JavaScript 1.8.5.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-array.isarray', 'Array.isArray')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-array.isarray', 'Array.isArray')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 dir="rtl" id="التكامل_مع_المتصفحات">التكامل مع المتصفحات</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatChrome("5")}}</td>
+ <td>{{CompatGeckoDesktop("2.0")}}</td>
+ <td>{{CompatIE("9")}}</td>
+ <td>{{CompatOpera("10.5")}}</td>
+ <td>{{CompatSafari("5")}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoMobile("2.0")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 dir="rtl" id="إقرأ_أيضا">إقرأ أيضا</h2>
+
+<ul>
+ <li>{{jsxref("Array")}}</li>
+</ul>
diff --git a/files/ar/web/javascript/reference/global_objects/array/join/index.html b/files/ar/web/javascript/reference/global_objects/array/join/index.html
new file mode 100644
index 0000000000..427509f1ec
--- /dev/null
+++ b/files/ar/web/javascript/reference/global_objects/array/join/index.html
@@ -0,0 +1,143 @@
+---
+title: ()Array.prototype.join
+slug: Web/JavaScript/Reference/Global_Objects/Array/join
+tags:
+ - Prototype
+ - جافاسكربت
+ - دالة
+ - دمج Array
+ - دمج المصفوفات
+ - مرجع
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/join
+---
+<div>{{JSRef}}</div>
+
+<p dir="rtl">دالة <code><strong>()join </strong></code>تقوم بدمج جميع عناصر المصفوفة في نص واحد.</p>
+
+<pre class="brush: js">var a = ['Wind', 'Rain', 'Fire'];
+a.join();    // 'Wind,Rain,Fire'
+a.join('-'); // 'Wind-Rain-Fire'</pre>
+
+<h2 dir="rtl" id="صيغة_الكتابة">صيغة الكتابة</h2>
+
+<pre class="syntaxbox" dir="rtl"><code><var>str</var> = <var>arr</var>.join([<var>separator</var> = ','])</code></pre>
+
+<h3 id="المعاملات">المعاملات</h3>
+
+<dl>
+ <dt><code>separator</code></dt>
+ <dd dir="rtl">اختياري. يحدد النص الذي سيقوم بفصل عناصر المصفوفة عن بعضهم البعض. الـ <strong>separator</strong> سيتحول إلى جزء من النص الناتج. إذا لم يتم تمريره، سيتم الفصل بين عناصر المصفوفة بالـ comma. إذا كان الـ<strong>separator</strong> عبارة عن نص فارغ، سيتم ضم عناصر المصفوفة دون أي فاصل</dd>
+</dl>
+
+<h3 dir="rtl" id="القيمة_العائدة">القيمة العائدة</h3>
+
+<p dir="rtl">عناصر المصفوفة مضمومين في هيئة نص.</p>
+
+<h2 dir="rtl" id="الوصف">الوصف</h2>
+
+<p dir="rtl">تقوم بدمج عناصر المصفوفة في هيئة نص، إذا كان أحد هذه العناصر قيمة فارغة أو غير معرف سيتم تحويله إلى نص فارغ.</p>
+
+<h2 dir="rtl" id="أمثلة">أمثلة</h2>
+
+<h3 dir="rtl" id="ضم_عناصر_المصفوفة_بأربعة_طرق_مختلفة">ضم عناصر المصفوفة بأربعة طرق مختلفة</h3>
+
+<p dir="rtl">المثال التالي يقوم بإنشاء مصفوفة a ، بها ثلاثة عناصر، ثم يقوم بضم هذه العناصر الثلاثة، ثم يقوم بضم هذه العناصر الثلاثة إلى نص واحد بأربعة طرق: استخدام الـ separator الإفتراضي، ثم باستخدام الـ comma والمسافة، ثم باستخدام علامة الجمع وأخيرا باستخدام نص فارغ.</p>
+
+<pre class="brush: js">var a = ['Wind', 'Rain', 'Fire'];
+var myVar1 = a.join(); // myVar1 إلى 'Wind,Rain,Fire' تسند
+var myVar2 = a.join(', '); // myVar2 إلى 'Wind, Rain, Fire' تسند
+var myVar3 = a.join(' + '); // myVar3 إلى 'Wind + Rain + Fire' تسند
+var myVar4 = a.join(''); // myVar4 إلى 'WindRainFire' تسند
+</pre>
+
+<h2 dir="rtl" id="المواصفات">المواصفات</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">الصفة</th>
+ <th dir="rtl" scope="col">الحالة</th>
+ <th scope="col">تعليق</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Initial definition. Implemented in JavaScript 1.1.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.4.4.5', 'Array.prototype.join')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-array.prototype.join', 'Array.prototype.join')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-array.prototype.join', 'Array.prototype.join')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 dir="rtl" id="التكامل_مع_المتصفحات">التكامل مع المتصفحات</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatChrome("1.0")}}</td>
+ <td>{{CompatGeckoDesktop("1.7")}}</td>
+ <td>{{CompatIE("5.5")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 dir="rtl" id="إقرأ_أيضا">إقرأ أيضا</h2>
+
+<ul>
+ <li>{{jsxref("String.prototype.split()")}}</li>
+ <li>{{jsxref("Array.prototype.toString()")}}</li>
+ <li>{{jsxref("TypedArray.prototype.join()")}}</li>
+</ul>
diff --git a/files/ar/web/javascript/reference/global_objects/array/pop/index.html b/files/ar/web/javascript/reference/global_objects/array/pop/index.html
new file mode 100644
index 0000000000..247f45fc14
--- /dev/null
+++ b/files/ar/web/javascript/reference/global_objects/array/pop/index.html
@@ -0,0 +1,134 @@
+---
+title: Array.prototype.pop()
+slug: Web/JavaScript/Reference/Global_Objects/Array/pop
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/pop
+---
+<div dir="rtl">{{JSRef}}<br>
+   دالة <code><strong>pop() </strong></code>هي دالة تقوم بمسح أخر عنصر من المصفوفة وإرجاعه</div>
+
+<div dir="rtl"> </div>
+
+<h2 dir="rtl" id="Syntax">Syntax</h2>
+
+<pre class="syntaxbox" dir="rtl"><var>arr</var>.pop()</pre>
+
+<h3 dir="rtl" id="قيمة_الإرجاع">قيمة الإرجاع</h3>
+
+<p dir="rtl">تعيد أخر عنصر من المصفوفة و تعيد {{jsxref("undefined")}}  في حال  كانت المصفوفة فارغة</p>
+
+<h2 dir="rtl" id="وصف">وصف</h2>
+
+<p dir="rtl"> دالة POP هي دالة تقوم بمسح أخر عنصر من المصفوفة وإرجاع تلك القيمة إلى الطالب </p>
+
+<p dir="rtl"><code>pop</code> is intentionally generic; this method can be {{jsxref("Function.call", "called", "", 1)}} or {{jsxref("Function.apply", "applied", "", 1)}} to objects resembling arrays. Objects which do not contain a <code>length</code> property reflecting the last in a series of consecutive, zero-based numerical properties may not behave in any meaningful manner.</p>
+
+<p dir="rtl"> في حالة استدعائك لدالة POP على مصفوفة فارغة فسيتم إرجاع  {{jsxref("undefined")}} </p>
+
+<h2 dir="rtl" id="أمثلة">أمثلة</h2>
+
+<h3 dir="rtl" id="إزالة_العنصر_الأخير_من_المصفوفة">إزالة العنصر الأخير من المصفوفة</h3>
+
+<p dir="rtl">التعليمة البرمجية التالية : تقوم بإنشاء مصفوفة(<code>myFish</code> )   تحتوي على أربعة  عناصر ثم تقوم بمسح أخر عنصر   </p>
+
+<pre class="brush: js" dir="rtl">var myFish = ['angel', 'clown', 'mandarin', 'sturgeon'];
+
+console.log(myFish); // ['angel', 'clown', 'mandarin', 'sturgeon']
+
+var popped = myFish.pop();
+
+console.log(myFish); // ['angel', 'clown', 'mandarin' ]
+
+console.log(popped); // 'sturgeon'</pre>
+
+<h2 dir="rtl" id="مواصفات">مواصفات</h2>
+
+<table class="standard-table" dir="rtl">
+ <tbody>
+ <tr>
+ <th scope="col">مواصفات</th>
+ <th scope="col">الحالة</th>
+ <th scope="col">تعليق</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES3')}}</td>
+ <td>{{Spec2('ES3')}}</td>
+ <td>Initial definition. Implemented in JavaScript 1.2.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.4.4.6', 'Array.prototype.pop')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-array.prototype.pop', 'Array.prototype.pop')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-array.prototype.pop', 'Array.prototype.pop')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 dir="rtl" id="Browser_compatibility">Browser compatibility</h2>
+
+<div dir="rtl">{{CompatibilityTable}}</div>
+
+<div dir="rtl" id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatChrome("1.0")}}</td>
+ <td>{{CompatGeckoDesktop("1.7")}}</td>
+ <td>{{CompatIE("5.5")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div dir="rtl" id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 dir="rtl" id="See_also">See also</h2>
+
+<ul>
+ <li dir="rtl">{{jsxref("Array.prototype.push()")}}</li>
+ <li dir="rtl">{{jsxref("Array.prototype.shift()")}}</li>
+ <li dir="rtl">{{jsxref("Array.prototype.unshift()")}}</li>
+ <li dir="rtl">{{jsxref("Array.prototype.splice()")}}</li>
+</ul>
diff --git a/files/ar/web/javascript/reference/global_objects/array/reverse/index.html b/files/ar/web/javascript/reference/global_objects/array/reverse/index.html
new file mode 100644
index 0000000000..b179e52bc1
--- /dev/null
+++ b/files/ar/web/javascript/reference/global_objects/array/reverse/index.html
@@ -0,0 +1,124 @@
+---
+title: ()Array.prototype.reverse
+slug: Web/JavaScript/Reference/Global_Objects/Array/reverse
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/reverse
+---
+<div>{{JSRef}}</div>
+
+<p dir="rtl">دالة الـ <code><strong>()reverse</strong></code> تقوم بعكس ترتيبا عناصر المصفوفة مكانيا، بحيث يصبح العنصر الأول في المصفوفة في آخر المصفوفة، ويكون آخر عنصر فيها في أول المصفوفة.</p>
+
+<h2 dir="rtl" id="صيغة_الكتابة">صيغة الكتابة</h2>
+
+<pre class="syntaxbox"><code><var>arr</var>.reverse()</code></pre>
+
+<h3 dir="rtl" id="القيمة_العائدة">القيمة العائدة</h3>
+
+<p dir="rtl">المصفوفة المعكوسة.</p>
+
+<h2 dir="rtl" id="الوصف">الوصف</h2>
+
+<p>The <code>reverse</code> method transposes the elements of the calling array object in place, mutating the array, and returning a reference to the array.</p>
+
+<h2 dir="rtl" id="أمثلة">أمثلة</h2>
+
+<h3 dir="rtl" id="عكس_العناصر_في_مصفوفة">عكس العناصر في مصفوفة</h3>
+
+<p dir="rtl">المثال التالي يقوم بإنشاء مصفوفة myArray تحتوي على ثلاثة عناصر، ثم يوم بعكس المصفوفة.</p>
+
+<pre class="brush: js">var myArray = ['one', 'two', 'three'];
+myArray.reverse();
+
+console.log(myArray) // ['three', 'two', 'one']
+</pre>
+
+<h2 dir="rtl" id="المواصفات">المواصفات</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th dir="rtl" scope="col">المواصفة</th>
+ <th scope="col">الحالة</th>
+ <th scope="col">تعليق</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Initial definition. Implemented in JavaScript 1.1.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.4.4.8', 'Array.prototype.reverse')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-array.prototype.reverse', 'Array.prototype.reverse')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-array.prototype.reverse', 'Array.prototype.reverse')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 dir="rtl" id="التكامل_مع_المتصفحات">التكامل مع المتصفحات</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatChrome("1.0")}}</td>
+ <td>{{CompatGeckoDesktop("1.7")}}</td>
+ <td>{{CompatIE("5.5")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 dir="rtl" id="إقرأ_أيضا">إقرأ أيضا</h2>
+
+<ul>
+ <li>{{jsxref("Array.prototype.join()")}}</li>
+ <li>{{jsxref("Array.prototype.sort()")}}</li>
+ <li>{{jsxref("TypedArray.prototype.reverse()")}}</li>
+</ul>
diff --git a/files/ar/web/javascript/reference/global_objects/array/slice/index.html b/files/ar/web/javascript/reference/global_objects/array/slice/index.html
new file mode 100644
index 0000000000..c0e4bde2c2
--- /dev/null
+++ b/files/ar/web/javascript/reference/global_objects/array/slice/index.html
@@ -0,0 +1,151 @@
+---
+title: Array.prototype.slice()
+slug: Web/JavaScript/Reference/Global_Objects/Array/slice
+tags:
+ - المصفوفات
+ - جافا سكريبت
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/slice
+---
+<div>{{JSRef}}</div>
+
+<p dir="rtl">ال <code><strong>slice()</strong></code> method إرجاع نسخة ضئيلة من جزء من مصفوفة إلى object مصفوفة جديد تم تحديده من <code>start</code> إلى <code>end</code> (<code>end</code> غير مضمنة) بينما <code>start</code> و <code>end</code> تمثلان مؤشر العناصر في هذه المصفوفة. لن يتم تعديل المصفوفة الأصلية.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/array-slice.html")}}</div>
+
+<p class="hidden">The source for this interactive demo is stored in a GitHub repository. If you'd like to contribute to the interactive demo project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</p>
+
+<h2 dir="rtl" id="تركيب_الجملة">تركيب الجملة</h2>
+
+<pre class="syntaxbox notranslate"><var>arr</var>.slice([<var>start</var>[, <var>end</var>]])
+</pre>
+
+<h3 dir="rtl" id="المعاملات">المعاملات</h3>
+
+<dl>
+ <dt><code><var>start</var></code> {{optional_inline}}</dt>
+ <dd dir="rtl">مؤشر ذو أساس صفري يبدأ فيه الاستخراج.</dd>
+ <dd dir="rtl">يمكن استخدام مؤشر سلبي يشير إلى إزاحة من نهاية التسلسل. <code>slice(-2)</code> يستخرج آخر عنصرين في التسلسل.</dd>
+ <dd dir="rtl">إذا كانت <code><var>start</var></code> غير محددة, تبدأ<code>slice</code> من المؤشر <code>0</code>.</dd>
+ <dd dir="rtl">إذا كانت <code><var>start</var></code> is أكبر من نطاق فهرس التسلسل ، يتم إرجاع صفيف فارغ.</dd>
+ <dt><code><var>end</var></code> {{optional_inline}}</dt>
+ <dd dir="rtl">مؤشر ذو أساس صفري قبل أن ينتهي الاستخراج. <code>slice</code> مستخرجات إلى ولا تشمل <code><var>end</var></code>. على سبيل المثال, <code>slice(1,4)</code> يستخرج العنصر الثاني من خلال العنصر الرابع (العناصر المفهرسة 1 و 2 و 3).</dd>
+ <dd dir="rtl">يمكن استخدام مؤشر سلبي يشير إلى إزاحة من نهاية التسلسل. <code>slice(2,-1)</code> يستخرج العنصر الثالث من خلال العنصر الثاني إلى الأخير في التسلسل.</dd>
+ <dd dir="rtl">إذا تم حذف <code><var>end</var></code>, <code>slice</code> مستخرجات من خلال نهاية التسلسل(<code><var>arr</var>.length</code>).</dd>
+ <dd dir="rtl">اذا كانت <code><var>end</var></code> أكبر من طول التسلسل,  فإن<code>slice</code> تستخرج حتى نهاية التسلسل(<code><var>arr</var>.length</code>).</dd>
+</dl>
+
+<h3 id="القيمة_العائدة">القيمة العائدة</h3>
+
+<p dir="rtl">مصفوفة جديدة تحتوي على العناصر المستخرجة.</p>
+
+<h2 id="الوصف">الوصف</h2>
+
+<p dir="rtl"><code>slice</code> لا تغير المصفوفة الأصلية. تقوم بإرجاع نسخة ضئيلة من العناصر من المصفوفة الأصلية. يتم نسخ عناصر الصفيف الأصلي في الصفيف الذي تم إرجاعه كما يلي:</p>
+
+<ul>
+ <li dir="rtl">للreference Object(وليس الobject الفعلي) ،تقوم <code>slice</code> بنسخ reference object إلى المصفوفة الجديدة الجديد. يشير كل من المصفوفة الأصلية والجديدة إلى نفس ال object. إذا تغير reference Object ، تكون التغييرات مرئية لكل من المصفوفات الجديدة والأصلية.</li>
+ <li dir="rtl">للأرقام و الحروف والقيم المنطقية strings, numbers and booleans (not {{jsxref("String")}}, {{jsxref("Number")}} and {{jsxref("Boolean")}} objects),تقوم <code>slice</code> بنسخ القيم إلى مصفوفة جديدة. لا تؤثر التغييرات على الحرف أو الرقم أو القيمة المنطقية في مصفوفة على المصفوفة الآخرى.</li>
+</ul>
+
+<p dir="rtl">إذا تمت إضافة عنصر جديد إلى أي مصفوفة ، فلن تتأثر المصفوفة الآخرى.</p>
+
+<h2 dir="rtl" id="أمثلة">أمثلة</h2>
+
+<h3 dir="rtl" id="إعادة_جزء_من_من_مصفوفة_موجودة">إعادة جزء من من مصفوفة موجودة</h3>
+
+<pre class="brush: js notranslate">let fruits = ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango']
+let citrus = fruits.slice(1, 3)
+
+// fruits contains ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango']
+// citrus contains ['Orange','Lemon']
+</pre>
+
+<h3 dir="rtl" id="باستخدام_slice">باستخدام <code>slice</code></h3>
+
+<p dir="rtl">في المثال التالي, تقوم<code>slice</code> بإنشاء مصفوفة جديدة <code>newCar</code>, من <code>myCar</code>. كلاهما يتضمن إشارة إلى الobject <code>myHonda</code>. عندما يتغير لون <code>myHonda</code> إلى الأرجواني, تعكس كلا المصفوفتان التغيير.</p>
+
+<pre class="brush: js notranslate">// Using slice, create newCar from myCar.
+let myHonda = { color: 'red', wheels: 4, engine: { cylinders: 4, size: 2.2 } }
+let myCar = [myHonda, 2, 'cherry condition', 'purchased 1997']
+let newCar = myCar.slice(0, 2)
+
+// Display the values of myCar, newCar, and the color of myHonda
+// referenced from both arrays.
+console.log('myCar = ' + JSON.stringify(myCar))
+console.log('newCar = ' + JSON.stringify(newCar))
+console.log('myCar[0].color = ' + myCar[0].color)
+console.log('newCar[0].color = ' + newCar[0].color)
+
+// Change the color of myHonda.
+myHonda.color = 'purple'
+console.log('The new color of my Honda is ' + myHonda.color)
+
+// Display the color of myHonda referenced from both arrays.
+console.log('myCar[0].color = ' + myCar[0].color)
+console.log('newCar[0].color = ' + newCar[0].color)
+</pre>
+
+<p>This script writes:</p>
+
+<pre class="notranslate">myCar = [{color: 'red', wheels: 4, engine: {cylinders: 4, size: 2.2}}, 2,
+ 'cherry condition', 'purchased 1997']
+newCar = [{color: 'red', wheels: 4, engine: {cylinders: 4, size: 2.2}}, 2]
+myCar[0].color = red
+newCar[0].color = red
+The new color of my Honda is purple
+myCar[0].color = purple
+newCar[0].color = purple
+</pre>
+
+<h3 id="Array-like_objects">Array-like objects</h3>
+
+<p dir="rtl"><code>slice</code> method يمكن أيضًا استدعاؤها لتحويل  Array-like objects / مجموعات إلى مصفوفة جديدة. انت فقط {{jsxref("Function.prototype.bind", "bind")}} the method لل object. The {{jsxref("Functions/arguments", "arguments")}}داخل دالة هو مثال على 'array-like object'.</p>
+
+<pre class="brush: js notranslate">function list() {
+ return Array.prototype.slice.call(arguments)
+}
+
+let list1 = list(1, 2, 3) // [1, 2, 3]
+</pre>
+
+<p>البناء يمكن أن يتم ب {{jsxref("Function.prototype.call", "call()")}} method of {{jsxref("Function.prototype")}} ويمكن تقليلها باستخدام <code>[].slice.call(arguments)</code> بدلا من<code>Array.prototype.slice.call</code>.</p>
+
+<p dir="rtl">على أي حال يمكن تبسيطها باستخدام {{jsxref("Function.prototype.bind", "bind")}}.</p>
+
+<pre class="brush: js notranslate">let unboundSlice = Array.prototype.slice
+let slice = Function.prototype.call.bind(unboundSlice)
+
+function list() {
+ return slice(arguments)
+}
+
+let list1 = list(1, 2, 3) // [1, 2, 3]</pre>
+
+<h2 id="المواصفات">المواصفات</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">مواصفات</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-array.prototype.slice', 'Array.prototype.slice')}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="التوافق_مع_المتصفح">التوافق مع المتصفح</h2>
+
+<div class="hidden">يتم إنشاء جدول التوافق في هذه الصفحة من البيانات المهيكلة. إذا كنت ترغب في المساهمة في البيانات ، يرجى مراجعة https://github.com/mdn/browser-compat-data وإرسال طلب سحب إلينا.</div>
+
+<p>{{Compat("javascript.builtins.Array.slice")}}</p>
+
+<h2 id="انظر_أيضا">انظر أيضا</h2>
+
+<ul>
+ <li>{{jsxref("Array.prototype.splice()")}}</li>
+ <li>{{jsxref("Function.prototype.call()")}}</li>
+ <li>{{jsxref("Function.prototype.bind()")}}</li>
+</ul>
diff --git a/files/ar/web/javascript/reference/global_objects/date/getdate/index.html b/files/ar/web/javascript/reference/global_objects/date/getdate/index.html
new file mode 100644
index 0000000000..6a39d68196
--- /dev/null
+++ b/files/ar/web/javascript/reference/global_objects/date/getdate/index.html
@@ -0,0 +1,85 @@
+---
+title: Date.prototype.getDate()
+slug: Web/JavaScript/Reference/Global_Objects/Date/getDate
+tags:
+ - النموذج المبدئي
+ - تاريخ
+ - جافاسكربت
+ - طريقة
+ - مرجع
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/getDate
+---
+<div>{{JSRef}}</div>
+
+<p>دالة <code>getDate()</code> تقوم بإرجاع يوم من تاريخ الشهر المحدد وفقاً للوقت المحلي.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/date-getdate.html")}}</div>
+
+
+
+<h2 id="بنية_الجملة">بنية الجملة</h2>
+
+<pre class="syntaxbox"><code><var>dateObj</var>.getDate()</code>
+</pre>
+
+<h3 id="القيمة_العائدة">القيمة العائدة</h3>
+
+<p>رقم صحيح ما بين 1 و31 يمثل يوم محدد من تاريخ الشهر المحدد وفقاً للوقت المحلي.</p>
+
+<h2 id="أمثلة">أمثلة</h2>
+
+<h3 id="استخدام_getDate()">استخدام <code>getDate()</code></h3>
+
+<p>البيان الثاني قام بتعيين قيمة المتغير <code>day</code>، علي أساس قيمة تاريخ المتغير <code>Xmas95</code>.</p>
+
+<pre class="brush: js">var Xmas95 = new Date('December 25, 1995 23:15:30');
+var day = Xmas95.getDate();
+
+console.log(day); // 25
+</pre>
+
+<h2 id="الخصائص">الخصائص</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-date.prototype.getdate', 'Date.prototype.getDate')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.getdate', 'Date.prototype.getDate')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.14', 'Date.prototype.getDate')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Initial definition. Implemented in JavaScript 1.1.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="دعم_المتصفحات">دعم المتصفحات</h2>
+
+<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+
+<p>{{Compat("javascript.builtins.Date.getDate")}}</p>
+
+<h2 id="اقرأ_أيضًا">اقرأ أيضًا</h2>
+
+<ul>
+ <li>{{jsxref("Date.prototype.getUTCDate()")}}</li>
+ <li>{{jsxref("Date.prototype.getUTCDay()")}}</li>
+ <li>{{jsxref("Date.prototype.setDate()")}}</li>
+</ul>
diff --git a/files/ar/web/javascript/reference/global_objects/date/index.html b/files/ar/web/javascript/reference/global_objects/date/index.html
new file mode 100644
index 0000000000..efaa40ce31
--- /dev/null
+++ b/files/ar/web/javascript/reference/global_objects/date/index.html
@@ -0,0 +1,261 @@
+---
+title: Date | التاريخ
+slug: Web/JavaScript/Reference/Global_Objects/Date
+tags:
+ - Date
+ - JavaScript
+ - NeedsTranslation
+ - TopicStub
+translation_of: Web/JavaScript/Reference/Global_Objects/Date
+---
+<div>{{JSRef}}</div>
+
+<p>Creates a JavaScript <strong><code>Date</code></strong> instance that represents a single moment in time. <code>Date</code> objects are based on a time value that is the number of milliseconds since 1 January, 1970 UTC.</p>
+
+<h2 id="البنيه">البنيه</h2>
+
+<pre class="syntaxbox"><code>new Date();
+new Date(<var>value</var>);
+new Date(<var>dateString</var>);
+new Date(<var>year</var>, <var>month</var>[, <var>day</var>[, <var>hour</var>[, <var>minutes</var>[, <var>seconds</var>[, <var>milliseconds</var>]]]]]);
+</code></pre>
+
+<div class="note">
+<p><strong>Note:</strong> JavaScript <code>Date</code> objects can only be instantiated by calling JavaScript <code>Date</code> as a constructor: calling it as a regular function (i.e. without the {{jsxref("Operators/new", "new")}} operator) will return a string rather than a <code>Date</code> object; unlike other JavaScript object types, JavaScript <code>Date</code> objects have no literal syntax.</p>
+</div>
+
+<h3 id="Parameters">Parameters</h3>
+
+<div class="note">
+<p><strong>Note:</strong> Where <code>Date</code> is called as a constructor with more than one argument, if values are greater than their logical range (e.g. 13 is provided as the month value or 70 for the minute value), the adjacent value will be adjusted. E.g. <code>new Date(2013, 13, 1)</code> is equivalent to <code>new Date(2014, 1, 1)</code>, both create a date for <code>2014-02-01</code> (note that the month is 0-based). Similarly for other values: <code>new Date(2013, 2, 1, 0, 70)</code> is equivalent to <code>new Date(2013, 2, 1, 1, 10)</code> which both create a date for <code>2013-03-01T01:10:00</code>.</p>
+</div>
+
+<div class="note">
+<p><strong>Note:</strong> Where <code>Date</code> is called as a constructor with more than one argument, the specifed arguments represent local time. If UTC is desired, use <code>new Date({{jsxref("Date.UTC()", "Date.UTC(...)")}})</code> with the same arguments.</p>
+</div>
+
+<dl>
+ <dt><code>value</code></dt>
+ <dd>Integer value representing the number of milliseconds since 1 January 1970 00:00:00 UTC (Unix Epoch).</dd>
+ <dt><code>dateString</code></dt>
+ <dd>String value representing a date. The string should be in a format recognized by the {{jsxref("Date.parse()")}} method (<a href="http://tools.ietf.org/html/rfc2822#page-14">IETF-compliant RFC 2822 timestamps</a> and also a <a href="http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15">version of ISO8601</a>).
+ <div class="note">
+ <p><strong>Note:</strong> parsing of date strings with the <code>Date</code> constructor (and <code>Date.parse</code>, they are equivalent) is strongly discouraged due to browser differences and inconsistencies.</p>
+ </div>
+ </dd>
+ <dt><code>year</code></dt>
+ <dd>Integer value representing the year. Values from 0 to 99 map to the years 1900 to 1999. See the {{anch("Example:_Two_digit_years_map_to_1900_-_1999", "example below")}}.</dd>
+ <dt><code>month</code></dt>
+ <dd>Integer value representing the month, beginning with 0 for January to 11 for December.</dd>
+ <dt><code>day</code></dt>
+ <dd>Optional. Integer value representing the day of the month.</dd>
+ <dt><code>hour</code></dt>
+ <dd>Optional. Integer value representing the hour of the day.</dd>
+ <dt><code>minute</code></dt>
+ <dd>Optional. Integer value representing the minute segment of a time.</dd>
+ <dt><code>second</code></dt>
+ <dd>Optional. Integer value representing the second segment of a time.</dd>
+ <dt><code>millisecond</code></dt>
+ <dd>Optional. Integer value representing the millisecond segment of a time.</dd>
+</dl>
+
+<h2 id="Description">Description</h2>
+
+<ul>
+ <li>If no arguments are provided, the constructor creates a JavaScript <code>Date</code> object for the current date and time according to system settings.</li>
+ <li>If at least two arguments are supplied, missing arguments are either set to 1 (if day is missing) or 0 for all others.</li>
+ <li>The JavaScript date is based on a time value that is milliseconds since midnight 01 January, 1970 UTC. A day holds 86,400,000 milliseconds. The JavaScript <code>Date</code> object range is -100,000,000 days to 100,000,000 days relative to 01 January, 1970 UTC.</li>
+ <li>The JavaScript <code>Date</code> object provides uniform behavior across platforms. The time value can be passed between systems to represent the same moment in time and if used to create a local date object, will reflect the local equivalent of the time.</li>
+ <li>The JavaScript <code>Date</code> object supports a number of UTC (universal) methods, as well as local time methods. UTC, also known as Greenwich Mean Time (GMT), refers to the time as set by the World Time Standard. The local time is the time known to the computer where JavaScript is executed.</li>
+ <li>Invoking JavaScript <code>Date</code> as a function (i.e., without the {{jsxref("Operators/new", "new")}} operator) will return a string representing the current date and time.</li>
+</ul>
+
+<h2 id="Properties">Properties</h2>
+
+<dl>
+ <dt>{{jsxref("Date.prototype")}}</dt>
+ <dd>Allows the addition of properties to a JavaScript <code>Date</code> object.</dd>
+ <dt><code>Date.length</code></dt>
+ <dd>The value of <code>Date.length</code> is 7. This is the number of arguments handled by the constructor.</dd>
+</dl>
+
+<h2 id="Methods">Methods</h2>
+
+<dl>
+ <dt>{{jsxref("Date.now()")}}</dt>
+ <dd>Returns the numeric value corresponding to the current time - the number of milliseconds elapsed since 1 January 1970 00:00:00 UTC.</dd>
+ <dt>{{jsxref("Date.parse()")}}</dt>
+ <dd>Parses a string representation of a date and returns the number of milliseconds since 1 January, 1970, 00:00:00, UTC.
+ <div class="note">
+ <p><strong>Note:</strong> Parsing of strings with <code>Date.parse</code> is strongly discouraged due to browser differences and inconsistencies.</p>
+ </div>
+ </dd>
+ <dt>{{jsxref("Date.UTC()")}}</dt>
+ <dd>Accepts the same parameters as the longest form of the constructor (i.e. 2 to 7) and returns the number of milliseconds since 1 January, 1970, 00:00:00 UTC.</dd>
+</dl>
+
+<h2 id="JavaScript_Date_instances">JavaScript <code>Date</code> instances</h2>
+
+<p>All <code>Date</code> instances inherit from {{jsxref("Date.prototype")}}. The prototype object of the <code>Date</code> constructor can be modified to affect all <code>Date</code> instances.</p>
+
+<h3 id="Date.prototype_Methods">Date.prototype Methods</h3>
+
+<div>{{page('/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/prototype', 'Methods')}}</div>
+
+<h2 id="Examples">Examples</h2>
+
+<h3 id="Several_ways_to_create_a_Date_object">Several ways to create a <code>Date</code> object</h3>
+
+<p>The following examples show several ways to create JavaScript dates:</p>
+
+<div class="note">
+<p><strong>Note:</strong> parsing of date strings with the <code>Date</code> constructor (and <code>Date.parse</code>, they are equivalent) is strongly discouraged due to browser differences and inconsistencies.</p>
+</div>
+
+<pre class="brush: js">var today = new Date();
+var birthday = new Date('December 17, 1995 03:24:00');
+var birthday = new Date('1995-12-17T03:24:00');
+var birthday = new Date(1995, 11, 17);
+var birthday = new Date(1995, 11, 17, 3, 24, 0);
+</pre>
+
+<h3 id="Two_digit_years_map_to_1900_-_1999">Two digit years map to 1900 - 1999</h3>
+
+<p>In order to create and get dates between the years 0 and 99 the {{jsxref("Date.prototype.setFullYear()")}} and {{jsxref("Date.prototype.getFullYear()")}} methods should be used.</p>
+
+<pre class="brush: js">var date = new Date(98, 1); // Sun Feb 01 1998 00:00:00 GMT+0000 (GMT)
+
+// Deprecated method, 98 maps to 1998 here as well
+date.setYear(98); // Sun Feb 01 1998 00:00:00 GMT+0000 (GMT)
+
+date.setFullYear(98); // Sat Feb 01 0098 00:00:00 GMT+0000 (BST)
+</pre>
+
+<h3 id="Calculating_elapsed_time">Calculating elapsed time</h3>
+
+<p>The following examples show how to determine the elapsed time between two JavaScript dates in millisconds.</p>
+
+<p>Due to the differing lengths of days (due to daylight saving changeover), months and years, expressing elapsed time in units greater than hours, minutes and seconds requires addressing a number of issues and should be thoroughly researched before being attempted.</p>
+
+<pre class="brush: js">// using Date objects
+var start = Date.now();
+
+// the event to time goes here:
+doSomethingForALongTime();
+var end = Date.now();
+var elapsed = end - start; // elapsed time in milliseconds
+</pre>
+
+<pre class="brush: js">// using built-in methods
+var start = new Date();
+
+// the event to time goes here:
+doSomethingForALongTime();
+var end = new Date();
+var elapsed = end.getTime() - start.getTime(); // elapsed time in milliseconds
+</pre>
+
+<pre class="brush: js">// to test a function and get back its return
+function printElapsedTime(fTest) {
+ var nStartTime = Date.now(),
+ vReturn = fTest(),
+ nEndTime = Date.now();
+
+ console.log('Elapsed time: ' + String(nEndTime - nStartTime) + ' milliseconds');
+ return vReturn;
+}
+
+yourFunctionReturn = printElapsedTime(yourFunction);
+</pre>
+
+<div class="note">
+<p><strong>Note:</strong> In browsers that support the {{domxref("window.performance", "Web Performance API", "", 1)}}'s high-resolution time feature, {{domxref("Performance.now()")}} can provide more reliable and precise measurements of elapsed time than {{jsxref("Date.now()")}}.</p>
+</div>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-date-objects', 'Date')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date-objects', 'Date')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9', 'Date')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Initial definition. Implemented in JavaScript 1.1.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatVersionUnknown}} [1]</td>
+ <td>{{CompatVersionUnknown}} [1]</td>
+ <td>{{CompatVersionUnknown}} [2]</td>
+ <td>{{CompatVersionUnknown}} [1]</td>
+ <td>{{CompatVersionUnknown}} [1]</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<p>[1] Some browsers can have issues when parsing dates: <a href="http://dygraphs.com/date-formats.html">3/14/2012 blog from danvk Comparing FF/IE/Chrome on Parsing Date Strings</a></p>
+
+<p>[2] <a href="https://msdn.microsoft.com/en-us//library/ie/ff743760(v=vs.94).aspx">ISO8601 Date Format is not supported</a> in Internet Explorer 8, and other version can have <a href="http://dygraphs.com/date-formats.html">issues when parsing dates</a></p>
diff --git a/files/ar/web/javascript/reference/global_objects/date/now/index.html b/files/ar/web/javascript/reference/global_objects/date/now/index.html
new file mode 100644
index 0000000000..ff6379db60
--- /dev/null
+++ b/files/ar/web/javascript/reference/global_objects/date/now/index.html
@@ -0,0 +1,80 @@
+---
+title: Date.now() | دالة الوقت الآن
+slug: Web/JavaScript/Reference/Global_Objects/Date/now
+tags:
+ - Date
+ - التاريخ
+ - الوقت
+ - جافاسكربت
+ - دالة
+ - دليل
+ - طريقة بديلة
+ - مرجع
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/now
+---
+<div>{{JSRef}}</div>
+
+<p>تقوم دالة  <strong><code>Date.now()</code></strong> بعرض عدد الثواني التي مضت منذ بداية احتساب الوقت بطريقة Timestamp وهو الأول من يناير عام 1970 الساعة الثانية عشر منتصف الليل تمامًا (First of January 1970 00:00:00)  بتوقيت UTC.</p>
+
+<h2 id="بنية_الجملة">بنية الجملة</h2>
+
+<pre class="syntaxbox"><code>var timeInMs = Date.now();</code></pre>
+
+<h3 id="القيمة_الراجعة">القيمة الراجعة</h3>
+
+<p>القيمة الراجعة من هذه الدالة ستكون عبارة عن رقم  {{jsxref("Number")}}، هذا الرقم يشير إلى عدد الثواني التي انقضت منذ بداية احتساب الوقت بطريقة TimeStamp بالأنظمة التي تستند إلى UNIX.</p>
+
+<h2 id="الوصف">الوصف</h2>
+
+<p>لإن دالة  <code>now()</code> تقوم بإرجاع قيمة ثابتة من الوقت {{jsxref("Date")}} فيجب عليك استخدامها بهذا الشكل   <code>Date.now()</code> .</p>
+
+<h2 id="طريقة_احتياطية_(Polyfill)">طريقة احتياطية (Polyfill)</h2>
+
+<p>تم اعتماد هذه الدالة  في  إصدار ECMA-262 5<sup>th</sup> المحركات التي لم يتم تحديثها لتدعم هذه الدالة يمكنها أن تحاكي دالة <code>Date.now()</code> عبر استخدام هذه الشيفرة البرمجية، هذه الشيفرة ستسمح للمتصفحات بأن تحاكي وظيفة هذه الدالة في حالة عدم دعمها لها :</p>
+
+<pre class="brush: js">if (!Date.now) { // إذا لم تكن الدالة موجودة
+ Date.now = function now() { // قم بإنشاء الدالة
+ return new Date().getTime(); // واربطها بالوقت الحالي
+ };
+}
+</pre>
+
+<h2 id="الخصائص">الخصائص</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">الخاصية</th>
+ <th scope="col">الحالة</th>
+ <th scope="col">تعليقات</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.4.4', 'Date.now')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Initial definition. Implemented in JavaScript 1.5.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.now', 'Date.now')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-date.now', 'Date.now')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="دعم_المتصفحات">دعم المتصفحات</h2>
+
+<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+
+<p>{{Compat("javascript.builtins.Date.now")}}</p>
+
+<h2 id="اقرأ_أيضًا">اقرأ أيضًا</h2>
+
+<ul>
+ <li>{{domxref("Performance.now()")}} — provides timestamps with sub-millisecond resolution for use in measuring web page performance</li>
+ <li>{{domxref("console.time()")}} / {{domxref("console.timeEnd()")}}</li>
+</ul>
diff --git a/files/ar/web/javascript/reference/global_objects/date/parse/index.html b/files/ar/web/javascript/reference/global_objects/date/parse/index.html
new file mode 100644
index 0000000000..133b751cd6
--- /dev/null
+++ b/files/ar/web/javascript/reference/global_objects/date/parse/index.html
@@ -0,0 +1,182 @@
+---
+title: Date.parse() | دالة تحليل الوقت
+slug: Web/JavaScript/Reference/Global_Objects/Date/parse
+tags:
+ - Date
+ - التاريخ
+ - جافاسكربت
+ - طريقة
+ - مرجع
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/parse
+---
+<div>{{JSRef}}</div>
+
+<p>تقوم دالة <code>Date.parse()</code> بتوزيع سلسلة من التاريخ، وإرجاع قيمتها إلي مللي ثانية من بداية تاريخ (1 يناير, 1970, 00:00:00 UTC) إلي التاريخ المحدد داخل الأقواس مثل <font face="consolas, Liberation Mono, courier, monospace"><span style="background-color: rgba(220, 220, 220, 0.5);">Date.parse("التاريخ")</span></font> أو NaN (ليس رقم) إذا كانت السلسلة غير معترف بها (غير صحيحة)، أو في بعض الحالات التي يكون فيها قيم التاريخ غير شرعية (مكتوبة بشكل خاطيء). علي سبيل المثال (2015-02-31).</p>
+
+<p>It is not recommended to use <code>Date.parse</code> as until ES5, parsing of strings was entirely implementation dependent. There are still many differences in how different hosts parse date strings, therefore date strings should be manually parsed (a library can help if many different formats are to be accommodated).</p>
+
+<div>{{EmbedInteractiveExample("pages/js/date-parse.html")}}</div>
+
+
+
+<h2 id="بنية_الجملة">بنية الجملة</h2>
+
+<p>استدعاء مباشر:</p>
+
+<pre class="syntaxbox">Date.parse(<var>dateString</var>)</pre>
+
+<p>استدعاء ضمني:</p>
+
+<pre class="syntaxbox">new Date(<var>dateString</var>)</pre>
+
+<h3 id="المعاملات">المعاملات</h3>
+
+<dl>
+ <dt><code>dateString</code></dt>
+ <dd>النص يمثل <a href="http://tools.ietf.org/html/rfc2822#section-3.3">RFC2822</a> أو (a variant of) تاريخ <a href="https://ar.wikipedia.org/wiki/%D8%A7%D9%8A%D8%B2%D9%88_8601">ISO 8601</a> (قد يتم استخدام تنسيقات أخري، ولكن ربما قد تكون النتائج غير متوقعة).</dd>
+</dl>
+
+<h3 id="القيمة_الراجعة">القيمة الراجعة</h3>
+
+<p>A number representing the milliseconds elapsed since January 1, 1970, 00:00:00 UTC and the date obtained by parsing the given string representation of a date. If the argument doesn't represent a valid date, {{jsxref("NaN")}} is returned.</p>
+
+<h2 id="الوصف">الوصف</h2>
+
+<p>تقوم دالة <code>parse()</code> بأخذ سلسلة التاريخ مثل ("Des 25, 1995") وتقوم بإرجاع القيمة إلي المللي ثانية منذ بداية احتساب الوقت وهو الأول من يناير عام 1970 الساعة الثانية عشر منتصف الليل تماماً (First of January 1970 00:00:00)  بتوقيت UTC، حتي الوقت التي قمت بتحديده. وهذه الدالة مفيدة لتعيين قيمة التاريخ استناداً الي قيمة السلسلة، علي سبيل المثال الدمج مع طريقة  {{jsxref("Date.prototype.setTime()", "setTime()")}} و {{jsxref("Global_Objects/Date", "Date")}} .</p>
+
+<p>Given a string representing a time, <code>parse()</code> returns the time value. It accepts the RFC2822 / IETF date syntax (<a href="http://tools.ietf.org/html/rfc2822#section-3.3">RFC2822 Section 3.3</a>), e.g. <code>"Mon, 25 Dec 1995 13:30:00 GMT"</code>. It understands the continental US time zone abbreviations, but for general use, use a time zone offset, for example, <code>"Mon, 25 Dec 1995 13:30:00 +0430"</code> (4 hours, 30 minutes east of the Greenwich meridian).</p>
+
+<p>GMT and UTC are considered equivalent. The local time zone is used to interpret arguments in <a href="http://tools.ietf.org/html/rfc2822#section-3.3">RFC2822 Section 3.3</a> format that do not contain time zone information.</p>
+
+<p>Because of the variances in parsing of date strings, it is recommended to always manually parse strings as results are inconsistent, especially across different ECMAScript implementations where strings like <code>"2015-10-12 12:00:00"</code> may be parsed to as <code>NaN</code>, UTC or local timezone.</p>
+
+<h3 dir="ltr" id="ECMAScript_5_دعم_تنسيق_ISO-8601">ECMAScript 5 دعم تنسيق ISO-8601</h3>
+
+<p>The date time string may be in a simplified <a href="http://www.w3.org/TR/NOTE-datetime">ISO 8601</a> format. For example, <code>"2011-10-10"</code> (just date) or <code>"2011-10-10T14:48:00"</code> (date and time) can be passed and parsed. Where the string is ISO 8601 date only, the UTC time zone is used to interpret arguments. If the string is date and time in <a href="http://www.w3.org/TR/NOTE-datetime">ISO 8601</a> format, it will be treated as local.</p>
+
+<p>While time zone specifiers are used during date string parsing to interpret the argument, the value returned is always the number of milliseconds between January 1, 1970 00:00:00 UTC and the point in time represented by the argument or <code>NaN</code>.</p>
+
+<p>Because <code>parse()</code> is a static method of {{jsxref("Date")}}, it is called as <code>Date.parse()</code> rather than as a method of a {{jsxref("Date")}} instance.</p>
+
+<h3 id="الاختلافات_في_المنطقة_الزمنية_المفترضة">الاختلافات في المنطقة الزمنية المفترضة</h3>
+
+<p>Given a date string of <code>"March 7, 2014"</code>, <code>parse()</code> assumes a local time zone, but given an ISO format such as <code>"2014-03-07"</code> it will assume a time zone of UTC (ES5 and ECMAScript 2015). Therefore {{jsxref("Date")}} objects produced using those strings may represent different moments in time depending on the version of ECMAScript supported unless the system is set with a local time zone of UTC. This means that two date strings that appear equivalent may result in two different values depending on the format of the string that is being converted.</p>
+
+<h3 id="Fall-back_to_implementation-specific_date_formats">Fall-back to implementation-specific date formats</h3>
+
+<p>The ECMAScript specification states: If the String does not conform to the standard format the function may fall back to any implementation–specific heuristics or implementation–specific parsing algorithm. Unrecognizable strings or dates containing illegal element values in ISO formatted strings shall cause <code>Date.parse()</code> to return {{jsxref("NaN")}}.</p>
+
+<p>However, invalid values in date strings not recognized as simplified ISO format as defined by ECMA-262 may or may not result in {{jsxref("NaN")}}, depending on the browser and values provided, e.g.:</p>
+
+<pre class="brush: js" dir="rtl">// سلسلة ليست أيزو مع قيم تاريخ صالحة
+new Date('23/25/2014');
+</pre>
+
+<p>will be treated as a local date of 25 November, 2015 in Firefox 30 and an invalid date in Safari 7. However, if the string is recognized as an ISO format string and it contains invalid values, it will return {{jsxref("NaN")}} in all browsers compliant with ES5 and later:</p>
+
+<pre class="brush: js" dir="rtl">// سلسلة أيزو مع قيمة غير صالحة
+new Date('2014-25-23').toISOString();
+// يُعيد "RangeError: invalid date" في جميع المتصفحات المتوافقة مع es5
+</pre>
+
+<p>SpiderMonkey's implementation-specific heuristic can be found in <a href="http://mxr.mozilla.org/mozilla-central/source/js/src/jsdate.cpp?rev=64553c483cd1#889"><code>jsdate.cpp</code></a>. The string <code>"10 06 2014"</code> is an example of a non–conforming ISO format and thus falls back to a custom routine. See also this <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1023155#c6">rough outline</a> on how the parsing works.</p>
+
+<pre class="brush: js">new Date('10 06 2014');
+</pre>
+
+<p>will be treated as a local date of 6 October, 2014 and not 10 June, 2014. Other examples:</p>
+
+<pre class="brush: js">new Date('foo-bar 2014').toString();
+// يُعيد: "Invalid Date" *تاريخ غير صالح*
+
+Date.parse('foo-bar 2014');
+// يُعيد: NaN *ليس رقم*
+</pre>
+
+<h2 id="أمثلة">أمثلة</h2>
+
+<h3 id="استخدام_Date.parse()">استخدام <code>Date.parse()</code></h3>
+
+<p>إذا كان <code>IPOdate</code> هو كائن {{jsxref("Date")}} موجود، فيمكن تعيينه إلي 9 أغسطس، 1995 (بالتوقيت المحلي) كما يلي:</p>
+
+<pre class="brush: js">IPOdate.setTime(Date.parse('Aug 9, 1995'));</pre>
+
+<p>بعض الأمثلة الأخرى على تحليل سلاسل التاريخ غير القياسية:</p>
+
+<pre class="brush: js">Date.parse('Aug 9, 1995');</pre>
+
+<p>يٌعيد <code>807937200000</code> في المنطقة الزمنية GMT-0300، ويٌعيد قيم أخري في المناطق الزمنية الأخري، حيث أن السلسلة لا تحدد المناطق الزمنية وهي ليست بتنسيق ISO، وبالتالي فإن المنطقة الزمنية الافتراضية بدون تنسيق ISO هي المنطقة الزمنية المحلية الخاصة بالدولة الموجود بها. وتختلف من دولة إلي آخري.</p>
+
+<pre class="brush: js">Date.parse('Wed, 09 Aug 1995 00:00:00 GMT');</pre>
+
+<p>يٌعيد <code>807926400000</code> بغض النظر عن المنطقة الزمنية المحلية مثل GMT (UTC).</p>
+
+<pre class="brush: js">Date.parse('Wed, 09 Aug 1995 00:00:00');
+</pre>
+
+<p>يٌعيد <code>807937200000</code> في المنطقة الزمنية GMT-0300، ويٌعيد قيم أخري في المناطق الزمنية الأخري، حيث أن السلسلة لا تحدد المناطق الزمنية وهي ليست بتنسيق ISO، وبالتالي فإن المنطقة الزمنية الافتراضية بدون تنسيق ISO هي المنطقة الزمنية المحلية الخاصة بالدولة الموجود بها. وتختلف من دولة إلي آخري.</p>
+
+<pre class="brush: js">Date.parse('Thu, 01 Jan 1970 00:00:00 GMT');
+</pre>
+
+<p>يٌعيد <code>0</code> بغض النظر عن المنطقة الزمنية المحلية مثل GMT (UTC).</p>
+
+<pre class="brush: js">Date.parse('Thu, 01 Jan 1970 00:00:00');
+</pre>
+
+<p>يٌعيد <code>14400000</code> في المنطقة الزمنية GMT-0400، ويٌعيد قيم أخري في المناطق الزمنية الأخري، حيث أن السلسلة لا تحدد المناطق الزمنية وهي ليست بتنسيق ISO، وبالتالي فإن المنطقة الزمنية الافتراضية بدون تنسيق ISO هي المنطقة الزمنية المحلية الخاصة بالدولة الموجود بها. وتختلف من دولة إلي آخري.</p>
+
+<pre class="brush: js">Date.parse('Thu, 01 Jan 1970 00:00:00 GMT-0400');
+</pre>
+
+<p>يٌعيد <code>14400000</code> بغض النظر عن المنطقة الزمنية المحلية مثل GMT (UTC).</p>
+
+<h2 id="الخصائص">الخصائص</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Initial definition. Implemented in JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.4.2', 'Date.parse')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td>Simplified ISO 8601 format added.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.parse', 'Date.parse')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-date.parse', 'Date.parse')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="دعم_المتصفحات">دعم المتصفحات</h2>
+
+<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+
+<p>{{Compat("javascript.builtins.Date.parse")}}</p>
+
+<h2 id="ملاحظات_التوافق">ملاحظات التوافق</h2>
+
+<ul>
+ <li>Firefox 49 {{geckoRelease(49)}} changed the parsing of 2-digit years to be aligned with the Google Chrome browser instead of Internet Explorer. Now, 2-digit years that are less than <code>50</code> are parsed as 21st century years. For example, <code>04/16/17</code>, previously parsed as April 16, 1917, will be April 16, 2017 now. To avoid any interoperability issues or ambiguous years, it is recommended to use the ISO 8601 format like "2017-04-16" ({{bug(1265136)}}).</li>
+</ul>
+
+<h2 id="اقرأ_أيضًا">اقرأ أيضًا</h2>
+
+<ul>
+ <li>{{jsxref("Date.UTC()")}}</li>
+</ul>
diff --git a/files/ar/web/javascript/reference/global_objects/date/setdate/index.html b/files/ar/web/javascript/reference/global_objects/date/setdate/index.html
new file mode 100644
index 0000000000..ca5d89a63e
--- /dev/null
+++ b/files/ar/web/javascript/reference/global_objects/date/setdate/index.html
@@ -0,0 +1,95 @@
+---
+title: Date.prototype.setDate() | دالة تعيين التاريخ
+slug: Web/JavaScript/Reference/Global_Objects/Date/setDate
+tags:
+ - التاريخ
+ - النموذج المبدئي
+ - جافاسكربت
+ - طريقة
+ - مرجع
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/setDate
+---
+<div>{{JSRef}}</div>
+
+<p>دالة setDate() تقوم بتعين يوم من الـ {{jsxref("Date")}} المحدد نسبه إلي الشهر المحدد.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/date-setdate.html")}}</div>
+
+
+
+<h2 id="بنية_الجملة">بنية الجملة</h2>
+
+<pre class="syntaxbox"><code><var>dateObj</var>.setDate(</code>dayValue [رقم اليوم]<code>)</code></pre>
+
+<h3 id="المعاملات_(Parameters)">المعاملات (Parameters)</h3>
+
+<dl>
+ <dt><code>dayValue</code></dt>
+ <dd>يجب أن يكون عدد صحيح يمثل يوم من الشهر. علي سبيل المثال <code>setDate(15)</code> .</dd>
+</dl>
+
+<h3 id="القيمة_العائدة">القيمة العائدة</h3>
+
+<p>عدد المللي ثانية بين تاريخ 1 يناير 1970 00:00:00 UTC والتاريخ المحدد (يتغير الـ {{jsxref("Date")}} أيضا بتغير المكان [المنطقة الزمنية]).</p>
+
+<h2 id="الوصف">الوصف</h2>
+
+<p>إذا كان <code>dayValue [رقم اليوم]</code> خارج نطاق قيم الشهر المحدد لهذا التاريخ، فأن دالة <code>setDate()</code> ستقوم بتحديد الـ {{jsxref("Date")}} [اليوم] وفقاً لذلك. علي سبيل المثال، إذا تم تحديد <code>dayValue [رقم اليوم]</code> إلي <code>0</code> فسيتم تعيين التاريخ إلي أخر يوم في الشهر السابق.</p>
+
+<h2 id="أمثلة">أمثلة</h2>
+
+<h3 id="استخدام_setDate()">استخدام <code>setDate()</code></h3>
+
+<pre class="brush: js">var theBigDay = new Date(1962, 6, 7); // 1962-07-07
+theBigDay.setDate(24); // 1962-07-24
+theBigDay.setDate(32); // 1962-08-01
+theBigDay.setDate(22); // 1962-08-22
+theBigDay.setDate(0); // 1962-06-30
+theBigDay.setDate(98); // 1962-10-06
+theBigDay.setDate(-50); // 1962-08-09
+</pre>
+
+<h2 id="الخصائص">الخصائص</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Initial definition. Implemented in JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.5.36', 'Date.prototype.setDate')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.prototype.setdate', 'Date.prototype.setDate')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-date.prototype.setdate', 'Date.prototype.setDate')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="دعم_المتصفحات">دعم المتصفحات</h2>
+
+<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+
+<p>{{Compat("javascript.builtins.Date.setDate")}}</p>
+
+<h2 id="اقرأ_أيضًا">اقرأ أيضًا</h2>
+
+<ul>
+ <li>{{jsxref("Date.prototype.getDate()")}}</li>
+ <li>{{jsxref("Date.prototype.setUTCDate()")}}</li>
+</ul>
diff --git a/files/ar/web/javascript/reference/global_objects/date/utc/index.html b/files/ar/web/javascript/reference/global_objects/date/utc/index.html
new file mode 100644
index 0000000000..2d1400af0e
--- /dev/null
+++ b/files/ar/web/javascript/reference/global_objects/date/utc/index.html
@@ -0,0 +1,133 @@
+---
+title: Date.UTC()
+slug: Web/JavaScript/Reference/Global_Objects/Date/UTC
+tags:
+ - تاريخ
+ - جافاسكربت
+ - طريقة
+ - مرجع
+translation_of: Web/JavaScript/Reference/Global_Objects/Date/UTC
+---
+<div>{{JSRef}}</div>
+
+<p>دالة <strong><code>Date.UTC()</code></strong> تقبل نفس المُعاملات parameters علي الرغم من طول تكوين المنشيء، ويٌعيد التاريخ إلي المللي ثانية من بداية تاريخ 1 يناير, 1970, 00:00:00, التوقيت العالمي.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/date-utc.html")}}</div>
+
+
+
+<h2 id="بنية_الجملة">بنية الجملة</h2>
+
+<pre class="syntaxbox">Date.UTC(<var>year</var>, <var>month</var>[, <var>day</var>[, <var>hour</var>[, <var>minute</var>[, <var>second</var>[, <var>millisecond</var>]]]]])</pre>
+
+<h3 id="المعاملات_(Parameters)">المعاملات (Parameters)</h3>
+
+<dl>
+ <dt><code>year</code></dt>
+ <dd>سنة كاملة.</dd>
+ <dt><code>month</code></dt>
+ <dd>رقم صحيح ما بين 0 و11 يمثل الشهر.</dd>
+ <dt><code>day</code></dt>
+ <dd>اختياري. رقم صحيح ما بين 1 و31 يمثل يوم من الشهر.</dd>
+ <dt><code>hour</code></dt>
+ <dd>اختياري. رقم صحيح ما بين 0 و23 يمثل الساعات.</dd>
+ <dt><code>minute</code></dt>
+ <dd>اختياري. رقم صحيح ما بين 0 و59 يمثل الدقائق.</dd>
+ <dt><code>second</code></dt>
+ <dd>اختياري. رقم صحيح ما بين 0 و59 يمثل الثواني.</dd>
+ <dt><code>millisecond</code></dt>
+ <dd>اختياري. رقم صحيح ما بين 0 و999 يمثل الميلي ثانية.</dd>
+</dl>
+
+<h3 id="القيمة_العائدة">القيمة العائدة</h3>
+
+<p>رقم يمثل عدد المللي ثانية في التاريخ المحدد منذ 1 يناير, 1970, 00:00:00، التوقيت العالمي.</p>
+
+<h2 id="الوصف">الوصف</h2>
+
+<p>تقوم دالة <code>UTC()</code> بأخذ معاملات (parameters) التاريخ المحددة بفاصلة ثم تُعيدها إلي مللي ثانية بين 1 يناير 1970، 00:00:00 التوقيت العالمي، والوقت الذي حددته.</p>
+
+<p>يجب عليك تحديد <code>السنة</code> كاملة؛ علي سبيل المثال, 1998. إذا كانت السنة محددة ما بين عام 0 و99، تقوم هذه الطريقة بتحويل السنه إلي سنه في القرن العشرين <code>(1900 + سنة)</code>؛ علي سبيل المثال، إذا حددت 95، فسيتم أستخدام 1995.</p>
+
+<p>تختلف طريقة <code>UTC()</code> عن منشيء التاريخ بطريقتين.</p>
+
+<ul>
+ <li>تستخدم دالة <code>Date.UTC()</code> التوقيت العالمي بدلاً من التوقيت المحلي.</li>
+ <li>تقوم دالة <code>Date.UTC()</code> بإرجاع قمية الوقت إلي رقم بدلاً من إنشاء تاريخ.</li>
+</ul>
+
+<p>If a parameter you specify is outside of the expected range, the <code>UTC()</code> method updates the other parameters to allow for your number. For example, if you use 15 for month, the year will be incremented by 1 <code>(year + 1)</code>, and 3 will be used for the month.</p>
+
+<p>Because <code>UTC()</code> is a static method of {{jsxref("Date")}}, you always use it as <code>Date.UTC()</code>, rather than as a method of a {{jsxref("Date")}} object you created.</p>
+
+<h2 id="أمثلة">أمثلة</h2>
+
+<h3 id="استخدام_Date.UTC()">استخدام <code>Date.UTC()</code></h3>
+
+<p>في المثال التالي يقوم بإنشاء التاريخ بإستخدام UTC بدلاً من التوقيت المحلي:</p>
+
+<pre class="brush:js">var utcDate = new Date(Date.UTC(2018, 11, 1, 0, 0, 0));
+</pre>
+
+<h2 id="الخصائص">الخصائص</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-date.utc', 'Date.UTC')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-date.utc', 'Date.UTC')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.9.4.3', 'Date.UTC')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Initial definition. Implemented in JavaScript 1.0.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="دعم_المتصفحات">دعم المتصفحات</h2>
+
+<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+
+<p>{{Compat("javascript.builtins.Date.UTC")}}</p>
+
+<h2 id="ملاحظات_التوافق">ملاحظات التوافق</h2>
+
+<h3 id="Date.UTC_with_fewer_than_two_arguments"><code>Date.UTC</code> with fewer than two arguments</h3>
+
+<p>When providing less than two arguments to <code>Date.UTC</code>, {{jsxref("NaN")}} is returned. This behavior is specified in ECMAScript 2017. Engines who weren't supporting this behavior, have been updated (see {{bug(1050755)}}, <a href="https://github.com/tc39/ecma262/pull/642">ecma-262 #642</a>).</p>
+
+<pre class="brush: js">Date.UTC();
+Date.UTC(1);
+
+// Safari: NaN
+// Chrome/Opera/V8: NaN
+
+// Firefox &lt;54: non-NaN
+// Firefox 54+: NaN
+
+// IE: non-NaN
+// Edge: NaN
+</pre>
+
+<h2 id="اقرأ_أيضاً">اقرأ أيضاً</h2>
+
+<ul>
+ <li>{{jsxref("Date.parse()")}}</li>
+</ul>
diff --git a/files/ar/web/javascript/reference/global_objects/function/call/index.html b/files/ar/web/javascript/reference/global_objects/function/call/index.html
new file mode 100644
index 0000000000..f3c83f04ac
--- /dev/null
+++ b/files/ar/web/javascript/reference/global_objects/function/call/index.html
@@ -0,0 +1,219 @@
+---
+title: ()Function.prototype.call
+slug: Web/JavaScript/Reference/Global_Objects/Function/call
+translation_of: Web/JavaScript/Reference/Global_Objects/Function/call
+---
+<div>{{JSRef}}</div>
+
+<div style="font-family: tahoma; font-size: 15px;">
+<p dir="rtl">تُستدعَى الوظيفة <code>()call</code> على دالة، أول argument لهذه الوظيفة هو قيمة <code>this</code> الخاصة بالدالة، وال arguments المتبقية (إن وُجدت)، هي  arguments الدالة.</p>
+
+<div class="note" dir="rtl">
+<p><strong>ملاحظة :  </strong> صيغة هذه الوظيفة مماثلة تقريبًا  للصيغة الخاصة بـ {{jsxref("Function.prototype.apply", "apply")}} الفرق الوحيد هو ان <strong> </strong><code>()call</code><strong> </strong>تاخذ قائمة من ال <strong>arguments</strong>  محددة بشكل فردي فيما تاخذ <code>()apply</code> مصفوفة واحدة من ال <strong>arguments</strong>.</p>
+</div>
+
+<div>{{EmbedInteractiveExample("pages/js/function-call.html")}}</div>
+
+
+
+<h2 dir="rtl" id="صيغة_الوظيفة_call">صيغة الوظيفة call</h2>
+
+<pre class="syntaxbox notranslate"><code><var>function</var>.call(<var>thisArg</var>, <var>arg1</var>, <var>arg2</var>, ...)</code></pre>
+
+<h3 id="Parameters">Parameters</h3>
+
+<dl>
+ <dt dir="rtl"><code>thisArg</code></dt>
+ <dd dir="rtl">اختياري. وهو قيمة <code>this</code> المتوفرة في استدعاء الدالة <code><var>function</var></code>. لاحظ أن <code>this</code> قد لا تكون القيمة الفعلية التي تراها الوظيفة: اذا كانت هذه الوظيفة دالة في  {{jsxref("Strict_mode", "non-strict mode", "", 1)}} سيتم استبدال  {{jsxref("Global_Objects/null", "null")}} و {{jsxref("Global_Objects/undefined", "undefined")}} بالكائن العام والقيم الاولية ستحول الى كائنات.  </dd>
+ <dt dir="rtl"><code>...,arg1, arg2</code></dt>
+ <dd dir="rtl"> arguments الدالة <code><var>function</var></code>.</dd>
+</dl>
+
+<h3 dir="rtl" id="Return_value">Return value</h3>
+
+<p dir="rtl">تُرجع نتيجة استدعاء الدالة مع قيمة <strong> </strong><code>this</code> المحددة و ال arguments.</p>
+
+<h2 dir="rtl" id="وصف">وصف</h2>
+
+<p dir="rtl">تسمح الوظيفة <code>()call</code> لدالة او وظيفة خاصة بكائن واحد بان يتم استدعاؤها وتعيينها من قبل كائن مختلف.</p>
+
+<p dir="rtl">تمنح الوظيفة <code>()call</code> قيمة <code>this</code> الجديدة الى الدالة/الوظيفة. مع الـ <code>call</code>  يمكنك كتابة الوظيفة مرة واحدة ومن ثم تقوم بتوريثها لكائن آخر دون الحاجة إلى إعادة كتابة الوظيفة للكائن الجديد.</p>
+
+<h2 dir="rtl" id="تحليل_الجزء_الغامض_في_الوظيفة_call">تحليل الجزء الغامض في الوظيفة <code>()call</code></h2>
+
+<p dir="rtl">نظرا لعدم وجود شرح كاف حول هذه الجزئية فقد ارتايت ان اظيف هذه الفقرة التوضيحية لعلها تزيح بعض الغموض عن قيمة ال <code>this</code> التي تمثل ال argument الاول لهذه الوظيفة.</p>
+
+<p dir="rtl">اذا نظرنا بتمعن في هذا الجزء من داخل الوظيفة <code>call</code>. سنجد ان thisArg ستساوي الكائن العام في حالة undefined او null، والا ستساوي ناتج الكائن Object، تساوي thisArg كائنا في كلتا الحالتين. وعليه فقد اصبحت كائنا، اذن فمن الطبيعي ان تمتلك خصائص. تم تحديد الخاصية _callTemp_ قيمتها this و this تمثل الدالة التي ستستدعى عليها الوظيفة <code>call</code>. واخيرا يتم تنفيذ هذه الدالة:</p>
+
+<pre class="brush: js notranslate">Function.prototype.call_like = function( thisArg, args ){
+ thisArg = ( thisArg === undefined || thisArg === null ) ? window : Object( thisArg );
+ thisArg._callTemp_ = this;
+ thisArg._callTemp_();
+}</pre>
+
+<p dir="rtl">في حالة عدم وجود thisArg ستتصرف الدالة fn بشكل طبيعي و this ستساوي الكائن العام:</p>
+
+<pre class="brush: js notranslate">var fn = function () {
+ console.log( this ); // [object Window]
+}
+fn.call_like();
+
+</pre>
+
+<p dir="rtl">في حالة وجود thisArg بقيمة اولية ك undefined او null ف this ستساوي ايضا الكائن العام، خلاف ذالك سيتم تمرير قيمتها الى الكائن <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object">()</a><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object">Object</a>، اذا كانت هذه القيمة من القيم الاولية-<a href="https://developer.mozilla.org/en-US/docs/Glossary/Primitive">primitive value</a> سيقوم الكائن بتحويلها الى الكائن المناسب لها، واما اذا كانت هذه القيمة كائنا فلا حاجة لتحويلها و this ستساوي كائنا.</p>
+
+<p dir="rtl">وهذا يفسر كيف قام الكائن Object بتحويل القيمة الاولية <code>"Youssef belmeskine"</code> الى الكائن String:   </p>
+
+<pre class="brush: js notranslate">var fn = function () {
+ console.log( this ); // "Youssef belmeskine"
+ console.log( this === "Youssef belmeskine" ); // false
+ console.log( String(this) === "Youssef belmeskine" ); // true
+}
+fn.call_like( "Youssef belmeskine" );
+
+</pre>
+
+<p dir="rtl">من المهم دائما ذكر المصدر:</p>
+
+<div class="blockIndicator note">
+<p dir="rtl">بالنسبة لى شخصيا لم اتمكن من فهم هذه الوظيفة وشقيقتها apply بشكل واضح الا عندما قمت بالاطلاع على الكود الداخلى لها. قمت باستخدام هذا الجزء من الكود لتوضيح الفكرة فقط. ستجد ال Polyfill كاملا في هذا الموقع <a href="https://hexmen.com/blog/2006/12/26/revisiting-functionprototypeapply-for-ie5/">hexmen.com.</a></p>
+</div>
+
+<h2 dir="rtl" id="أمثلة">أمثلة</h2>
+
+<h3 dir="rtl" id="استخدام_ال_call_لِسَلسَلة_منشئات_الكائن">استخدام ال <code>call</code> لِسَلسَلة منشئات الكائن</h3>
+
+<p dir="rtl">تستطيع إستخدام <code>call</code>  لعمل تسلسل لمنشئات-constructors الكائن، وذلك على غرار جافا. في المثال التالي، تم تحديد منشئ الكائن <code>Product</code> مع اثنين من البارامترات <code>name</code> و <code>price</code>. والدالتات <code>Food</code> و <code>Toy</code>  تستدعيان  <code>Product</code>  ممرر لها <code>this</code> و <code>name</code> و <code>price</code>. تقوم Product بتهيئة الخاصيتان <code>name</code> و <code>price</code> فيما تقوم كلا الدالتان المتخصصتان بتحديد ال <code>category</code>.</p>
+
+<pre class="brush: js notranslate">function Product(name, price) {
+ this.name = name;
+ this.price = price;
+}
+
+function Food(name, price) {
+ Product.call(this, name, price);
+ this.category = 'food';
+}
+
+function Toy(name, price) {
+ Product.call(this, name, price);
+ this.category = 'toy';
+}
+
+var cheese = new Food('feta', 5);
+var fun = new Toy('robot', 40);
+</pre>
+
+<h3 dir="rtl" id="إستخدام_ال_call_لإستدعاء_الدالة_المجهولة_الاسم-anonymous_function">إستخدام ال call لإستدعاء الدالة المجهولة الاسم-anonymous function </h3>
+
+<p dir="rtl">في هذا المثال قمنا بانشاء الدالة المجهولة واستخدمنا <code>call</code>  لإستدعاءها على كل كائن في المصفوفة. الغرض الرئيسي من الدالة المجهولة هو إضافة الدالة <code>print</code> الى كل كائن،  والتي ستكون قادرة على طباعة الفهرس الصحيح لكائنات المصفوفة. تمرير كائن على شكل قيمة <code>this</code><span id="result_box" lang="ar"><span> </span></span><span lang="ar"><span>ليس ضروريًا، ولكن تم إنجازه لغرض توضيحي.</span></span></p>
+
+<pre class="brush: js notranslate">var animals = [
+ { species: 'Lion', name: 'King' },
+ { species: 'Whale', name: 'Fail' }
+];
+
+for (var i = 0; i &lt; animals.length; i++) {
+ (function(i) {
+ this.print = function() {
+ console.log('#' + i + ' ' + this.species
+ + ': ' + this.name);
+ }
+ this.print();
+ }).call(animals[i], i);
+}
+</pre>
+
+<h3 dir="rtl" id="استخدام_call_لاستدعاء_دالة_وتحديد_السياق-context_ل_this">استخدام <code>call</code> لاستدعاء دالة وتحديد السياق-context ل   <code>this</code></h3>
+
+<p dir="rtl">في المثال أدناه، عندما سنقوم باستدعاء <code>greet</code> سترتبط قيمة <code>this</code>  بالكائن <code>obj.</code></p>
+
+<pre class="brush: js notranslate">function greet() {
+ var reply = [this.animal, 'typically sleep between', this.sleepDuration].join(' ');
+ console.log(reply);
+}
+
+var obj = {
+ animal: 'cats', sleepDuration: '12 and 16 hours'
+};
+
+greet.call(obj); // cats typically sleep between 12 and 16 hours
+</pre>
+
+<h3 dir="rtl" id="إستخدام_الـcall_لاستدعاء_دالة_وبدون_تحديد_البرامتر_الاول">إستخدام الـ<code>call</code> لاستدعاء دالة وبدون تحديد البرامتر الاول</h3>
+
+<p dir="rtl">في المثال أدناه ،قمنا باستدعاء الدالة <code>display</code> من دون تمرير البرامتر الاول. إذا لم يتم تمرير قيمة <code>this</code> في البرامتر الاول فسترتبط بالكائن العام-global object.</p>
+</div>
+
+<pre class="brush: js notranslate">var sData = 'Wisen';
+
+function display(){
+ console.log('sData value is %s ', this.sData);
+}
+
+display.call(); // sData value is Wisen
+</pre>
+
+<div class="blockIndicator note" dir="rtl">
+<p>تذكر ان قيمة <code>this</code> ستكون  ب <code>undefined</code> في الوضع الصارم. انظر ادناه:</p>
+</div>
+
+<pre class="brush: js line-numbers language-js notranslate"><code class="language-js"><span class="string token">'use strict'</span><span class="punctuation token">;</span>
+
+<span class="keyword token">var</span> sData <span class="operator token">=</span> <span class="string token">'Wisen'</span><span class="punctuation token">;</span>
+
+<span class="keyword token">function</span> <span class="function token">display</span><span class="punctuation token">(</span><span class="punctuation token">)</span> <span class="punctuation token">{</span>
+ console<span class="punctuation token">.</span><span class="function token">log</span><span class="punctuation token">(</span><span class="string token">'sData value is %s '</span><span class="punctuation token">,</span> <span class="keyword token">this</span><span class="punctuation token">.</span>sData<span class="punctuation token">)</span><span class="punctuation token">;</span>
+<span class="punctuation token">}</span>
+
+display<span class="punctuation token">.</span><span class="function token">call</span><span class="punctuation token">(</span><span class="punctuation token">)</span><span class="punctuation token">;</span> <span class="comment token">// Cannot read the property of 'sData' of undefined</span></code></pre>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Initial definition. Implemented in JavaScript 1.3.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.3.4.4', 'Function.prototype.call')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-function.prototype.call', 'Function.prototype.call')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-function.prototype.call', 'Function.prototype.call')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+
+
+<p>{{Compat("javascript.builtins.Function.call")}}</p>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li>{{jsxref("Function.prototype.bind()")}}</li>
+ <li>{{jsxref("Function.prototype.apply()")}}</li>
+ <li>
+ <p><a href="/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript">Introduction to Object-Oriented JavaScript</a></p>
+ </li>
+</ul>
diff --git a/files/ar/web/javascript/reference/global_objects/function/index.html b/files/ar/web/javascript/reference/global_objects/function/index.html
new file mode 100644
index 0000000000..878d8776b3
--- /dev/null
+++ b/files/ar/web/javascript/reference/global_objects/function/index.html
@@ -0,0 +1,183 @@
+---
+title: Function
+slug: Web/JavaScript/Reference/Global_Objects/Function
+tags:
+ - Constructor
+ - Function
+ - JavaScript
+ - NeedsTranslation
+ - TopicStub
+translation_of: Web/JavaScript/Reference/Global_Objects/Function
+---
+<div>{{JSRef}}</div>
+
+<p>The <strong><code>Function</code> constructor</strong> creates a new <code>Function</code> object. Calling the constructor directly can create functions dynamically, but suffers from security and similar (but far less significant) performance issues similar to {{jsxref("eval")}}. However, unlike eval, the Function constructor allows executing code in the global scope, prompting better programming habits and allower for more efficient code minification.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/function-constructor.html")}}</div>
+
+
+
+<p>Every JavaScript function is actually a <code>Function</code> object. This can be seen with the code <code>(function(){}).constructor === Function</code> which returns true.</p>
+
+<h2 id="Syntax">Syntax</h2>
+
+<pre class="syntaxbox"><code>new Function ([<var>arg1</var>[, <var>arg2</var>[, ...<var>argN</var>]],] <var>functionBody</var>)</code></pre>
+
+<h3 id="Parameters">Parameters</h3>
+
+<dl>
+ <dt><code>arg1, arg2, ... arg<em>N</em></code></dt>
+ <dd>Names to be used by the function as formal argument names. Each must be a string that corresponds to a valid JavaScript identifier or a list of such strings separated with a comma; for example "<code>x</code>", "<code>theValue</code>", or "<code>a,b</code>".</dd>
+ <dt><code>functionBody</code></dt>
+ <dd>A string containing the JavaScript statements comprising the function definition.</dd>
+</dl>
+
+<h2 id="Description">Description</h2>
+
+<p><code>Function</code> objects created with the <code>Function</code> constructor are parsed when the function is created. This is less efficient than declaring a function with a <a href="/en-US/docs/Web/JavaScript/Reference/Operators/function">function expression</a> or <a href="/en-US/docs/Web/JavaScript/Reference/Statements/function">function statement</a> and calling it within your code because such functions are parsed with the rest of the code.</p>
+
+<p>All arguments passed to the function are treated as the names of the identifiers of the parameters in the function to be created, in the order in which they are passed.</p>
+
+<p>Invoking the <code>Function</code> constructor as a function (without using the <code>new</code> operator) has the same effect as invoking it as a constructor. However, getting rid of the new operator allows for a smaller minified code size (4 bytes smaller), so it is best to not use <code>new</code> with <code>Function</code>.</p>
+
+<h2 id="Properties_and_Methods_of_Function">Properties and Methods of <code>Function</code></h2>
+
+<p>The global <code>Function</code> object has no methods or properties of its own. However, since it is a function itself, it does inherit some methods and properties through the prototype chain from {{jsxref("Function.prototype")}}.</p>
+
+<h2 id="Function_prototype_object"><code>Function</code> prototype object</h2>
+
+<h3 id="Properties">Properties</h3>
+
+<div>{{page('/en-US/docs/JavaScript/Reference/Global_Objects/Function/prototype', 'Properties')}}</div>
+
+<h3 id="Methods">Methods</h3>
+
+<div>{{page('/en-US/docs/JavaScript/Reference/Global_Objects/Function/prototype', 'Methods')}}</div>
+
+<h2 id="Function_instances"><code>Function</code> instances</h2>
+
+<p><code>Function</code> instances inherit methods and properties from {{jsxref("Function.prototype")}}. As with all constructors, you can change the constructor's prototype object to make changes to all <code>Function</code> instances.</p>
+
+<h2 id="Examples">Examples</h2>
+
+<h3 id="Specifying_arguments_with_the_Function_constructor">Specifying arguments with the <code>Function</code> constructor</h3>
+
+<p>The following code creates a <code>Function</code> object that takes two arguments.</p>
+
+<pre class="brush: js">// Example can be run directly in your JavaScript console
+
+// Create a function that takes two arguments and returns the sum of those arguments
+var adder = new Function('a', 'b', 'return a + b');
+
+// Call the function
+adder(2, 6);
+// &gt; 8
+</pre>
+
+<p>The arguments "<code>a</code>" and "<code>b</code>" are formal argument names that are used in the function body, "<code>return a + b</code>".</p>
+
+<h3 id="Difference_between_Function_constructor_and_function_declaration">Difference between Function constructor and function declaration</h3>
+
+<p>Functions created with the <code>Function</code> constructor do not create closures to their creation contexts; they always are created in the global scope. When running them, they will only be able to access their own local variables and global ones, not the ones from the scope in which the <code>Function</code> constructor was called. This is different from using {{jsxref("eval")}} with code for a function expression.</p>
+
+<pre class="brush: js">var x = 10;
+
+function createFunction1() {
+ var x = 20;
+ return new Function('return x;'); // this |x| refers global |x|
+}
+
+function createFunction2() {
+ var x = 20;
+ function f() {
+ return x; // this |x| refers local |x| above
+ }
+ return f;
+}
+
+var f1 = createFunction1();
+console.log(f1()); // 10
+var f2 = createFunction2();
+console.log(f2()); // 20
+</pre>
+
+<p>The "proper" way to execute external code with <code>Function</code> (for maximum minifyability).</p>
+
+<pre class="brush: js">function makeFunction(code){
+ return Function('"use strict";return ' + code)();
+}
+var add = makeFunction(
+  "" + function(a, b, c){ return a + b + c } // move this to a separate file in the production release
+);
+console.log( add(1, 2, 3) ); // will log six</pre>
+
+<p>Please note that the above code by itself is completely impractical. You should never abuse Function like that. Instead, the above code is meant only to be a simplified example of something like a module loader where there is a base script, then there are hundreads of big optionally loaded modules. Then, instead of the user waiting while they all download, the clients computer only downloads modules as needed so the page loads super fast. Also, it is reccomended that when evaluating many functions, the functions are evaluated together in bulk instead of separatly.</p>
+
+<pre class="brush: js">function bulkMakeFunctions(){
+  var str = "", i = 1, Len = arguments.length;
+ if (Len) {
+  str = arguments[0];
+  while (i !== Len) str += "," + arguments[i], ++i;
+  }
+ return Function('"use strict";return[' + str + ']')();
+}
+const [
+ add, sub, mul, div
+] = bulkMakeFunctions(
+  "function(a,b){return a+b}","function(a,b){return a-b}","function(a,b){return a*b}","function(a,b){return a/b}"
+);
+console.log(sub(add(mul(4,3), div(225,5)), 7))
+</pre>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Initial definition. Implemented in JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.3', 'Function')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-function-objects', 'Function')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-function-objects', 'Function')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+<div>
+
+
+<p>{{Compat("javascript.builtins.Function")}}</p>
+</div>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li>{{jsxref("Functions", "Functions and function scope")}}</li>
+ <li>{{jsxref("Function")}}</li>
+ <li>{{jsxref("Statements/function", "function statement")}}</li>
+ <li>{{jsxref("Operators/function", "function expression")}}</li>
+ <li>{{jsxref("Statements/function*", "function* statement")}}</li>
+ <li>{{jsxref("Operators/function*", "function* expression")}}</li>
+ <li>{{jsxref("AsyncFunction")}}</li>
+ <li>{{jsxref("GeneratorFunction")}}</li>
+</ul>
diff --git a/files/ar/web/javascript/reference/global_objects/index.html b/files/ar/web/javascript/reference/global_objects/index.html
new file mode 100644
index 0000000000..0e46a82c09
--- /dev/null
+++ b/files/ar/web/javascript/reference/global_objects/index.html
@@ -0,0 +1,126 @@
+---
+title: Standard built-in objects
+slug: Web/JavaScript/Reference/Global_Objects
+tags:
+ - JavaScript
+ - NeedsTranslation
+ - TopicStub
+translation_of: Web/JavaScript/Reference/Global_Objects
+---
+<div>
+ {{jsSidebar("Objects")}}</div>
+<h2 id="Summary" name="Summary">Summary</h2>
+<p>This chapter documents all the JavaScript standard built-in objects, along with their methods and properties.</p>
+<div class="onlyinclude">
+ <p>The term "global objects" (or standard built-in objects) here is not to be confused with the <em>global object</em>. Here, global objects refer to <em>objects in the global scope</em> (but only if ECMAScript 5 strict mode is not used! Otherwise it returns <code>undefined</code>). The <em>global object</em> itself can be accessed by the {{jsxref("Operators/this", "this")}} operator in the global scope. In fact, the global scope <em>consists</em><em> of</em> the properties of the global object (including inherited properties, if any).</p>
+ <p>Other objects in the global scope are either <a href="/en-US/docs/Web/JavaScript/Guide/Working_with_Objects#Creating_new_objects">created by the user script</a> or provided by the host application. The host objects available in browser contexts are documented in the <a href="/en-US/docs/Web/API/Reference">API reference</a>. For more information about the distinction between the <a href="/en-US/docs/DOM/DOM_Reference">DOM</a> and core <a href="/en-US/docs/Web/JavaScript">JavaScript</a>, see <a href="/en-US/docs/Web/JavaScript/JavaScript_technologies_overview">JavaScript technologies overview</a>.</p>
+ <h2 id="Standard_objects_(by_category)">Standard objects (by category)</h2>
+ <h3 id="Value_properties">Value properties</h3>
+ <p>Global properties returning a simple value.</p>
+ <ul>
+ <li>{{jsxref("Infinity")}}</li>
+ <li>{{jsxref("NaN")}}</li>
+ <li>{{jsxref("undefined")}}</li>
+ <li>{{jsxref("null")}} literal</li>
+ </ul>
+ <h3 id="Function_properties">Function properties</h3>
+ <p>Global functions returning the result of a specific routine.</p>
+ <ul>
+ <li>{{jsxref("Global_Objects/eval", "eval()")}}</li>
+ <li>{{jsxref("Global_Objects/uneval", "uneval()")}} {{non-standard_inline()}}</li>
+ <li>{{jsxref("Global_Objects/isFinite", "isFinite()")}}</li>
+ <li>{{jsxref("Global_Objects/isNaN", "isNaN()")}}</li>
+ <li>{{jsxref("Global_Objects/parseFloat", "parseFloat()")}}</li>
+ <li>{{jsxref("Global_Objects/parseInt", "parseInt()")}}</li>
+ <li>{{jsxref("Global_Objects/decodeURI", "decodeURI()")}}</li>
+ <li>{{jsxref("Global_Objects/decodeURIComponent", "decodeURIComponent()")}}</li>
+ <li>{{jsxref("Global_Objects/encodeURI", "encodeURI()")}}</li>
+ <li>{{jsxref("Global_Objects/encodeURIComponent", "encodeURIComponent()")}}</li>
+ <li>{{jsxref("Global_Objects/escape", "escape()")}} {{deprecated_inline()}}</li>
+ <li>{{jsxref("Global_Objects/unescape", "unescape()")}} {{deprecated_inline()}}</li>
+ </ul>
+ <h3 id="Fundamental_objects">Fundamental objects</h3>
+ <p>General language objects, functions and errors.</p>
+ <ul>
+ <li>{{jsxref("Object")}}</li>
+ <li>{{jsxref("Function")}}</li>
+ <li>{{jsxref("Boolean")}}</li>
+ <li>{{jsxref("Symbol")}} {{experimental_inline()}}</li>
+ <li>{{jsxref("Error")}}</li>
+ <li>{{jsxref("EvalError")}}</li>
+ <li>{{jsxref("InternalError")}}</li>
+ <li>{{jsxref("RangeError")}}</li>
+ <li>{{jsxref("ReferenceError")}}</li>
+ <li>{{jsxref("StopIteration")}}</li>
+ <li>{{jsxref("SyntaxError")}}</li>
+ <li>{{jsxref("TypeError")}}</li>
+ <li>{{jsxref("URIError")}}</li>
+ </ul>
+ <h3 id="Numbers_and_dates">Numbers and dates</h3>
+ <p>Objects dealing with numbers, dates and mathematical calculations.</p>
+ <ul>
+ <li>{{jsxref("Number")}}</li>
+ <li>{{jsxref("Math")}}</li>
+ <li>{{jsxref("Date")}}</li>
+ </ul>
+ <h3 id="Text_processing">Text processing</h3>
+ <p>Objects for manipulating texts.</p>
+ <ul>
+ <li>{{jsxref("String")}}</li>
+ <li>{{jsxref("RegExp")}}</li>
+ </ul>
+ <h3 id="Indexed_collections">Indexed collections</h3>
+ <p>Collections ordered by an index. Array-type objects.</p>
+ <ul>
+ <li>{{jsxref("Array")}}</li>
+ <li>{{jsxref("Int8Array")}}</li>
+ <li>{{jsxref("Uint8Array")}}</li>
+ <li>{{jsxref("Uint8ClampedArray")}}</li>
+ <li>{{jsxref("Int16Array")}}</li>
+ <li>{{jsxref("Uint16Array")}}</li>
+ <li>{{jsxref("Int32Array")}}</li>
+ <li>{{jsxref("Uint32Array")}}</li>
+ <li>{{jsxref("Float32Array")}}</li>
+ <li>{{jsxref("Float64Array")}}</li>
+ <li>{{jsxref("ParallelArray")}} {{non-standard_inline()}}</li>
+ </ul>
+ <h3 id="Keyed_collections">Keyed collections</h3>
+ <p>Collections of objects as keys. Elements iterable in insertion order.</p>
+ <ul>
+ <li>{{jsxref("Map")}} {{experimental_inline()}}</li>
+ <li>{{jsxref("Set")}} {{experimental_inline()}}</li>
+ <li>{{jsxref("WeakMap")}} {{experimental_inline()}}</li>
+ <li>{{jsxref("WeakSet")}} {{experimental_inline()}}</li>
+ </ul>
+ <h3 id="Structured_data">Structured data</h3>
+ <p>Data buffers and <strong>J</strong>ava<strong>S</strong>cript <strong>O</strong>bject <strong>N</strong>otation.</p>
+ <ul>
+ <li>{{jsxref("ArrayBuffer")}}</li>
+ <li>{{jsxref("DataView")}}</li>
+ <li>{{jsxref("JSON")}}</li>
+ </ul>
+ <h3 id="Control_abstraction_objects">Control abstraction objects</h3>
+ <ul>
+ <li>{{jsxref("Iterator")}} {{non-standard_inline()}}</li>
+ <li>{{jsxref("Generator")}} {{experimental_inline()}}</li>
+ <li>{{jsxref("Promise")}} {{experimental_inline()}}</li>
+ </ul>
+ <h3 id="Reflection">Reflection</h3>
+ <ul>
+ <li>{{jsxref("Reflect")}} {{experimental_inline()}}</li>
+ <li>{{jsxref("Proxy")}} {{experimental_inline()}}</li>
+ </ul>
+ <h3 id="Internationalization">Internationalization</h3>
+ <p>Additions to the ECMAScript core for language-sensitive functionalities.</p>
+ <ul>
+ <li>{{jsxref("Intl")}}</li>
+ <li>{{jsxref("Global_Objects/Collator", "Intl.Collator")}}</li>
+ <li>{{jsxref("Global_Objects/DateTimeFormat", "Intl.DateTimeFormat")}}</li>
+ <li>{{jsxref("Global_Objects/NumberFormat", "Intl.NumberFormat")}}</li>
+ </ul>
+ <h3 id="Other">Other</h3>
+ <ul>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Functions/arguments">arguments</a></code></li>
+ </ul>
+</div>
+<p> </p>
diff --git a/files/ar/web/javascript/reference/global_objects/json/index.html b/files/ar/web/javascript/reference/global_objects/json/index.html
new file mode 100644
index 0000000000..60305cbd07
--- /dev/null
+++ b/files/ar/web/javascript/reference/global_objects/json/index.html
@@ -0,0 +1,215 @@
+---
+title: JSON
+slug: Web/JavaScript/Reference/Global_Objects/JSON
+tags:
+ - JSON
+ - JavaScript
+ - NeedsTranslation
+ - Object
+ - Reference
+ - TopicStub
+ - polyfill
+translation_of: Web/JavaScript/Reference/Global_Objects/JSON
+---
+<div>{{JSRef("Global_Objects", "JSON")}}</div>
+
+<h2 id="Summary" name="Summary">Summary</h2>
+<p>The <strong><code>JSON</code></strong> object contains methods for parsing <a class="external" href="http://json.org/">JavaScript Object Notation</a> ({{glossary("JSON")}}) and converting values to JSON. It can't be called or constructed, and aside from its two method properties it has no interesting functionality of its own.</p>
+
+<h2 id="Description" name="Description">Description</h2>
+
+<h3 id="JavaScript_Object_Notation" name="JavaScript_Object_Notation">JavaScript Object Notation</h3>
+<p>JSON is a syntax for serializing objects, arrays, numbers, strings, booleans, and {{jsxref("null")}}. It is based upon JavaScript syntax but is distinct from it: some JavaScript is not JSON, and some JSON is not JavaScript. See also <a href="http://timelessrepo.com/json-isnt-a-javascript-subset">JSON: The JavaScript subset that isn't</a>.</p>
+<table>
+ <caption>JavaScript and JSON differences</caption>
+ <thead>
+ <tr>
+ <th scope="col">JavaScript type</th>
+ <th scope="col">JSON differences</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>Objects and Arrays</td>
+ <td>Property names must be double-quoted strings; trailing commas are forbidden.</td>
+ </tr>
+ <tr>
+ <td>Numbers</td>
+ <td>Leading zeros are prohibited; a decimal point must be followed by at least one digit.</td>
+ </tr>
+ <tr>
+ <td>Strings</td>
+ <td>
+ <p>Only a limited sets of characters may be escaped; certain control characters are prohibited; the Unicode line separator (<a href="http://unicode-table.com/en/2028/">U+2028</a>) and paragraph separator (<a href="http://unicode-table.com/en/2029/">U+2029</a>) characters are permitted; strings must be double-quoted. See the following example where {{jsxref("JSON.parse()")}} works fine and a {{jsxref("SyntaxError")}} is thrown when evaluating the code as JavaScript:</p>
+<pre class="brush: js">
+var code = '"\u2028\u2029"';
+JSON.parse(code); // works fine
+eval(code); // fails
+</pre>
+ </td>
+ </tr>
+ </tbody>
+</table>
+<p>The full JSON syntax is as follows:</p>
+<pre><var>JSON</var> = <strong>null</strong>
+ <em>or</em> <strong>true</strong> <em>or</em> <strong>false</strong>
+ <em>or</em> <var>JSONNumber</var>
+ <em>or</em> <var>JSONString</var>
+ <em>or</em> <var>JSONObject</var>
+ <em>or</em> <var>JSONArray</var>
+
+<var>JSONNumber</var> = <strong>-</strong> <var>PositiveNumber</var>
+ <em>or</em> <var>PositiveNumber</var>
+<var>PositiveNumber</var> = DecimalNumber
+ <em>or</em> <var>DecimalNumber</var> <strong>.</strong> <var>Digits</var>
+ <em>or</em> <var>DecimalNumber</var> <strong>.</strong> <var>Digits</var> <var>ExponentPart</var>
+ <em>or</em> <var>DecimalNumber</var> <var>ExponentPart</var>
+<var>DecimalNumber</var> = <strong>0</strong>
+ <em>or</em> <var>OneToNine</var> <var>Digits</var>
+<var>ExponentPart</var> = <strong>e</strong> <var>Exponent</var>
+ <em>or</em> <strong>E</strong> <var>Exponent</var>
+<var>Exponent</var> = <var>Digits</var>
+ <em>or</em> <strong>+</strong> <var>Digits</var>
+ <em>or</em> <strong>-</strong> <var>Digits</var>
+<var>Digits</var> = <var>Digit</var>
+ <em>or</em> <var>Digits</var> <var>Digit</var>
+<var>Digit</var> = <strong>0</strong> through <strong>9</strong>
+<var>OneToNine</var> = <strong>1</strong> through <strong>9</strong>
+
+<var>JSONString</var> = <strong>""</strong>
+ <em>or</em> <strong>"</strong> <var>StringCharacters</var> <strong>"</strong>
+<var>StringCharacters</var> = <var>StringCharacter</var>
+ <em>or</em> <var>StringCharacters</var> <var>StringCharacter</var>
+<var>StringCharacter</var> = any character
+ <em>except</em> <strong>"</strong> <em>or</em> <strong>\</strong> <em>or</em> U+0000 through U+001F
+ <em>or</em> <var>EscapeSequence</var>
+<var>EscapeSequence</var> = <strong>\"</strong> <em>or</em> <strong>\/</strong> <em>or</em> <strong>\\</strong> <em>or</em> <strong>\b</strong> <em>or</em> <strong>\f</strong> <em>or</em> <strong>\n</strong> <em>or</em> <strong>\r</strong> <em>or</em> <strong>\t</strong>
+ <em>or</em> <strong>\u</strong> <var>HexDigit</var> <var>HexDigit</var> <var>HexDigit</var> <var>HexDigit</var>
+<var>HexDigit</var> = <strong>0</strong> through <strong>9</strong>
+ <em>or</em> <strong>A</strong> through <strong>F</strong>
+ <em>or</em> <strong>a</strong> through <strong>f</strong>
+
+<var>JSONObject</var> = <strong>{</strong> <strong>}</strong>
+ <em>or</em> <strong>{</strong> <var>Members</var> <strong>}</strong>
+<var>Members</var> = <var>JSONString</var> <strong>:</strong> <var>JSON</var>
+ <em>or</em> <var>Members</var> <strong>,</strong> <var>JSONString</var> <strong>:</strong> <var>JSON</var>
+
+<var>JSONArray</var> = <strong>[</strong> <strong>]</strong>
+ <em>or</em> <strong>[</strong> <var>ArrayElements</var> <strong>]</strong>
+<var>ArrayElements</var> = <var>JSON</var>
+ <em>or</em> <var>ArrayElements</var> <strong>,</strong> <var>JSON</var>
+</pre>
+<p>Insignificant whitespace may be present anywhere except within a <code><var>JSONNumber</var></code> (numbers must contain no whitespace) or <code><var>JSONString</var></code> (where it is interpreted as the corresponding character in the string, or would cause an error). The tab character (<a href="http://unicode-table.com/en/0009/">U+0009</a>), carriage return (<a href="http://unicode-table.com/en/000D/">U+000D</a>), line feed (<a href="http://unicode-table.com/en/000A/">U+000A</a>), and space (<a href="http://unicode-table.com/en/0020/">U+0020</a>) characters are the only valid whitespace characters.</p>
+
+<h2 id="Methods" name="Methods">Methods</h2>
+<dl>
+ <dt>{{jsxref("JSON.parse()")}}</dt>
+ <dd>Parse a string as JSON, optionally transform the produced value and its properties, and return the value.</dd>
+ <dt>{{jsxref("JSON.stringify()")}}</dt>
+ <dd>Return a JSON string corresponding to the specified value, optionally including only certain properties or replacing property values in a user-defined manner.</dd>
+</dl>
+
+<h2 id="Polyfill" name="Polyfill">Polyfill</h2>
+<p>The <code>JSON</code> object is not supported in older browsers. You can work around this by inserting the following code at the beginning of your scripts, allowing use of <code>JSON</code> object in implementations which do not natively support it (like Internet Explorer 6).</p>
+<p>The following algorithm is an imitation of the native <code>JSON</code> object:</p>
+<pre class="brush: js">if (!window.JSON) {
+ window.JSON = {
+ parse: function(sJSON) { return eval('(' + sJSON + ')'); },
+ stringify: function(vContent) {
+ if (vContent instanceof Object) {
+ var sOutput = '';
+ if (vContent.constructor === Array) {
+ for (var nId = 0; nId &lt; vContent.length; sOutput += this.stringify(vContent[nId]) + ',', nId++);
+ return '[' + sOutput.substr(0, sOutput.length - 1) + ']';
+ }
+ if (vContent.toString !== Object.prototype.toString) {
+ return '"' + vContent.toString().replace(/"/g, '\\$&amp;') + '"';
+ }
+ for (var sProp in vContent) {
+ sOutput += '"' + sProp.replace(/"/g, '\\$&amp;') + '":' + this.stringify(vContent[sProp]) + ',';
+ }
+ return '{' + sOutput.substr(0, sOutput.length - 1) + '}';
+ }
+ return typeof vContent === 'string' ? '"' + vContent.replace(/"/g, '\\$&amp;') + '"' : String(vContent);
+ }
+ };
+}
+</pre>
+<p>More complex well-known <a class="external" href="http://remysharp.com/2010/10/08/what-is-a-polyfill/">polyfills</a> for the <code>JSON</code> object are <a class="link-https" href="https://github.com/douglascrockford/JSON-js">JSON2</a> and <a class="external" href="http://bestiejs.github.com/json3">JSON3</a>.</p>
+
+<h2 id="Specifications" name="Specifications">Specifications</h2>
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.12', 'JSON')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-json-object', 'JSON')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility" name="Browser_compatibility">Browser compatibility</h2>
+<div>{{CompatibilityTable}}</div>
+<div id="compat-desktop">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("1.9.1")}}</td>
+ <td>{{CompatIE("8.0")}}</td>
+ <td>{{CompatOpera("10.5")}}</td>
+ <td>{{CompatSafari("4.0")}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<div id="compat-mobile">
+ <table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoMobile("1.0")}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ </tbody>
+ </table>
+</div>
+<p>Based on <a class="external" href="http://kangax.github.com/es5-compat-table/">Kangax's compat table</a>.</p>
+
+<h2 id="See_also" name="See_also">See also</h2>
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Guide/Using_native_JSON">Using native <code>JSON</code></a></li>
+ <li>{{jsxref("Date.prototype.toJSON()")}}</li>
+</ul>
diff --git a/files/ar/web/javascript/reference/global_objects/map/index.html b/files/ar/web/javascript/reference/global_objects/map/index.html
new file mode 100644
index 0000000000..ba5bc93804
--- /dev/null
+++ b/files/ar/web/javascript/reference/global_objects/map/index.html
@@ -0,0 +1,358 @@
+---
+title: Map
+slug: Web/JavaScript/Reference/Global_Objects/Map
+translation_of: Web/JavaScript/Reference/Global_Objects/Map
+---
+<div>{{JSRef}}</div>
+
+<p><span class="seoSummary">The <strong><code>Map</code></strong> object holds key-value pairs and remembers the original insertion order of the keys.</span> Any value (both objects and {{glossary("Primitive", "primitive values")}}) may be used as either a key or a value.</p>
+
+<h2 id="Description">Description</h2>
+
+<p>A <code>Map</code> object iterates its elements in insertion order — a {{jsxref("Statements/for...of", "for...of")}} loop returns an array of <code>[<var>key</var>, <var>value</var>]</code> for each iteration.</p>
+
+<h3 id="Key_equality">Key equality</h3>
+
+<ul>
+ <li>Key equality is based on the <a href="/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness#Same-value-zero_equality"><code>sameValueZero</code></a> algorithm.</li>
+ <li>{{jsxref("NaN")}} is considered the same as <code>NaN</code> (even though <code>NaN !== NaN</code>) and all other values are considered equal according to the semantics of the <code>===</code> operator.</li>
+ <li>In the current ECMAScript specification, <code>-0</code> and <code>+0</code> are considered equal, although this was not so in earlier drafts. See <em>"Value equality for -0 and 0"</em> in the <a href="#Browser_compatibility">Browser compatibility</a> table for details.</li>
+</ul>
+
+<h3 id="Objects_vs._Maps">Objects vs. Maps</h3>
+
+<p>{{jsxref("Object")}} is similar to <code>Map</code>—both let you set keys to values, retrieve those values, delete keys, and detect whether something is stored at a key. For this reason (and because there were no built-in alternatives), <code>Object</code>s have been used as <code>Map</code>s historically.</p>
+
+<p>However, there are important differences that make <code>Map</code> preferable in certain cases:</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="row"></th>
+ <th scope="col">Map</th>
+ <th scope="col">Object</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <th scope="row">Accidental Keys</th>
+ <td>A <code>Map</code> does not contain any keys by default. It only contains what is explicitly put into it.</td>
+ <td>
+ <p>An <code>Object</code> has a prototype, so it contains default keys that could collide with your own keys if you're not careful.</p>
+
+ <div class="blockIndicator note">
+ <p><strong>Note:</strong> As of ES5, this can be bypassed by using {{jsxref("Object.create", "Object.create(null)")}}, but this is seldom done.</p>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <th scope="row">Key Types</th>
+ <td>A <code>Map</code>'s keys can be any value (including functions, objects, or any primitive).</td>
+ <td>The keys of an <code>Object</code> must be either a {{jsxref("String")}} or a {{jsxref("Symbol")}}.</td>
+ </tr>
+ <tr>
+ <th scope="row">Key Order</th>
+ <td>
+ <p>The keys in <code>Map</code> are ordered. Thus, when iterating over it, a <code>Map</code> object returns keys in order of insertion.</p>
+ </td>
+ <td>
+ <p>The keys of an <code>Object</code> are not ordered.</p>
+
+ <div class="blockIndicator note">
+ <p><strong>Note:</strong> Since ECMAScript 2015, objects <em>do</em> preserve creation order for string and <code>Symbol</code> keys. In JavaScript engines that comply with the ECMAScript 2015 spec, iterating over an object with only string keys will yield the keys in order of insertion.</p>
+ </div>
+ </td>
+ </tr>
+ <tr>
+ <th scope="row">Size</th>
+ <td>The number of items in a <code>Map</code> is easily retrieved from its {{jsxref("Map.prototype.size", "size")}} property.</td>
+ <td>The number of items in an <code>Object</code> must be determined manually.</td>
+ </tr>
+ <tr>
+ <th scope="row">Iteration</th>
+ <td>A <code>Map</code> is an <a href="/en-US/docs/Web/JavaScript/Guide/iterable">iterable</a>, so it can be directly iterated.</td>
+ <td>Iterating over an <code>Object</code> requires obtaining its keys in some fashion and iterating over them.</td>
+ </tr>
+ <tr>
+ <th scope="row">Performance</th>
+ <td>
+ <p>Performs better in scenarios involving frequent additions and removals of key-value pairs.</p>
+ </td>
+ <td>
+ <p>Not optimized for frequent additions and removals of key-value pairs.</p>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+<h3 id="Setting_object_properties">Setting object properties</h3>
+
+<p>Setting Object properties works for Map objects as well, and can cause considerable confusion.</p>
+
+<p>Therefore, this appears to work in a way:</p>
+
+<pre class="syntaxbox example-bad brush js notranslate">let wrongMap = new Map()
+wrongMap['bla'] = 'blaa'
+wrongMap['bla2'] = 'blaaa2'
+
+console.log(wrongMap) // Map { bla: 'blaa', bla2: 'blaaa2' }
+</pre>
+
+<p>But that way of setting a property does not interact with the Map data structure. It uses the feature of the generic object. The value of 'bla' is not stored in the Map for queries. Othere operations on the data fail:</p>
+
+<pre class="syntaxbox example-bad brush js notranslate">wrongMap.has('bla') // false
+wrongMap.delete('bla') // false
+console.log(wrongMap) // Map { bla: 'blaa', bla2: 'blaaa2' }</pre>
+
+<p>The correct usage for storing data in the Map is through the set(key, value) method.</p>
+
+<pre class="syntaxbox brush js example-good notranslate">let contacts = new Map()
+contacts.set('Jessie', {phone: "213-555-1234", address: "123 N 1st Ave"})
+contacts.has('Jessie') // true
+contacts.get('Hilary') // undefined
+contacts.set('Hilary', {phone: "617-555-4321", address: "321 S 2nd St"})
+contacts.get('Jessie') // {phone: "213-555-1234", address: "123 N 1st Ave"}
+contacts.delete('Raymond') // false
+contacts.delete('Jessie') // true
+console.log(contacts.size) // 1
+
+</pre>
+
+<h2 id="Constructor">Constructor</h2>
+
+<dl>
+ <dt>{{jsxref("Map/Map", "Map()")}}</dt>
+ <dd>Creates a new <code>Map</code> object.</dd>
+</dl>
+
+<h2 id="Static_properties">Static properties</h2>
+
+<dl>
+ <dt>{{jsxref("Map.@@species", "get Map[@@species]")}}</dt>
+ <dd>The constructor function that is used to create derived objects.</dd>
+</dl>
+
+<h2 id="Instance_properties">Instance properties</h2>
+
+<dl>
+ <dt>{{jsxref("Map.prototype.size")}}</dt>
+ <dd>Returns the number of key/value pairs in the <code>Map</code> object.</dd>
+</dl>
+
+<h2 id="Instance_methods">Instance methods</h2>
+
+<dl>
+ <dt>{{jsxref("Map.prototype.clear()")}}</dt>
+ <dd>Removes all key-value pairs from the <code>Map</code> object.</dd>
+ <dt>{{jsxref("Map.delete", "Map.prototype.delete(<var>key</var>)")}}</dt>
+ <dd>Returns <code>true</code> if an element in the <code>Map</code> object existed and has been removed, or <code>false</code> if the element does not exist. <code>Map.prototype.has(<var>key</var>)</code> will return <code>false</code> afterwards.</dd>
+ <dt>{{jsxref("Map.prototype.entries()")}}</dt>
+ <dd>Returns a new <code>Iterator</code> object that contains <strong>an array of <code>[<var>key</var>, <var>value</var>]</code></strong> for each element in the <code>Map</code> object in insertion order.</dd>
+ <dt>{{jsxref("Map.forEach", "Map.prototype.forEach(<var>callbackFn</var>[, <var>thisArg</var>])")}}</dt>
+ <dd>Calls <code><var>callbackFn</var></code> once for each key-value pair present in the <code>Map</code> object, in insertion order. If a <code><var>thisArg</var></code> parameter is provided to <code>forEach</code>, it will be used as the <code>this</code> value for each callback.</dd>
+ <dt>{{jsxref("Map.get", "Map.prototype.get(<var>key</var>)")}}</dt>
+ <dd>Returns the value associated to the <code><var>key</var></code>, or <code>undefined</code> if there is none.</dd>
+ <dt>{{jsxref("Map.has", "Map.prototype.has(<var>key</var>)")}}</dt>
+ <dd>Returns a boolean asserting whether a value has been associated to the <code><var>key</var></code> in the <code>Map</code> object or not.</dd>
+ <dt>{{jsxref("Map.prototype.keys()")}}</dt>
+ <dd>Returns a new <code>Iterator</code> object that contains the <strong>keys</strong> for each element in the <code>Map</code> object in insertion order.</dd>
+ <dt>{{jsxref("Map.set", "Map.prototype.set(<var>key</var>, <var>value</var>)")}}</dt>
+ <dd>Sets the <code><var>value</var></code> for the <code><var>key</var></code> in the <code>Map</code> object. Returns the <code>Map</code> object.</dd>
+ <dt>{{jsxref("Map.prototype.values()")}}</dt>
+ <dd>Returns a new <code>Iterator</code> object that contains the <strong>values</strong> for each element in the <code>Map</code> object in insertion order.</dd>
+ <dt>{{jsxref("Map.@@iterator", "Map.prototype[@@iterator]()")}}</dt>
+ <dd>Returns a new <code>Iterator</code> object that contains <strong>an array of <code>[<var>key</var>, <var>value</var>]</code></strong> for each element in the <code>Map</code> object in insertion order.</dd>
+</dl>
+
+<h2 id="Examples">Examples</h2>
+
+<h3 id="Using_the_Map_object">Using the <code>Map</code> object</h3>
+
+<pre class="brush: js notranslate">let myMap = new Map()
+
+let keyString = 'a string'
+let keyObj = {}
+let keyFunc = function() {}
+
+// setting the values
+myMap.set(keyString, "value associated with 'a string'")
+myMap.set(keyObj, 'value associated with keyObj')
+myMap.set(keyFunc, 'value associated with keyFunc')
+
+myMap.size // 3
+
+// getting the values
+myMap.get(keyString) // "value associated with 'a string'"
+myMap.get(keyObj) // "value associated with keyObj"
+myMap.get(keyFunc) // "value associated with keyFunc"
+
+myMap.get('a string') // "value associated with 'a string'"
+ // because keyString === 'a string'
+myMap.get({}) // undefined, because keyObj !== {}
+myMap.get(function() {}) // undefined, because keyFunc !== function () {}
+</pre>
+
+<h3 id="Using_NaN_as_Map_keys">Using <code>NaN</code> as <code>Map</code> keys</h3>
+
+<p>{{jsxref("NaN")}} can also be used as a key. Even though every <code>NaN</code> is not equal to itself (<code>NaN !== NaN</code> is true), the following example works because <code>NaN</code>s are indistinguishable from each other:</p>
+
+<pre class="brush: js notranslate">let myMap = new Map()
+myMap.set(NaN, 'not a number')
+
+myMap.get(NaN)
+// "not a number"
+
+let otherNaN = Number('foo')
+myMap.get(otherNaN)
+// "not a number"
+</pre>
+
+<h3 id="Iterating_Map_with_for..of">Iterating <code>Map</code> with <code>for..of</code></h3>
+
+<p>Maps can be iterated using a <code>for..of</code> loop:</p>
+
+<pre class="brush: js notranslate">let myMap = new Map()
+myMap.set(0, 'zero')
+myMap.set(1, 'one')
+
+for (let [key, value] of myMap) {
+ console.log(key + ' = ' + value)
+}
+// 0 = zero
+// 1 = one
+
+for (let key of myMap.keys()) {
+ console.log(key)
+}
+// 0
+// 1
+
+for (let value of myMap.values()) {
+ console.log(value)
+}
+// zero
+// one
+
+for (let [key, value] of myMap.entries()) {
+ console.log(key + ' = ' + value)
+}
+// 0 = zero
+// 1 = one
+</pre>
+
+<h3 id="Iterating_Map_with_forEach">Iterating <code>Map</code> with <code>forEach()</code></h3>
+
+<p>Maps can be iterated using the {{jsxref("Map.prototype.forEach", "forEach()")}} method:</p>
+
+<pre class="brush: js notranslate">myMap.forEach(function(value, key) {
+ console.log(key + ' = ' + value)
+})
+// 0 = zero
+// 1 = one
+</pre>
+
+<h3 id="Relation_with_Array_objects">Relation with Array objects</h3>
+
+<pre class="brush: js notranslate">let kvArray = [['key1', 'value1'], ['key2', 'value2']]
+
+// Use the regular Map constructor to transform a 2D key-value Array into a map
+let myMap = new Map(kvArray)
+
+myMap.get('key1') // returns "value1"
+
+// Use Array.from() to transform a map into a 2D key-value Array
+console.log(Array.from(myMap)) // Will show you exactly the same Array as kvArray
+
+// A succinct way to do the same, using the spread syntax
+console.log([...myMap])
+
+// Or use the keys() or values() iterators, and convert them to an array
+console.log(Array.from(myMap.keys())) // ["key1", "key2"]
+</pre>
+
+<h3 id="Cloning_and_merging_Maps">Cloning and merging <code>Map</code>s</h3>
+
+<p>Just like <code>Array</code>s, <code>Map</code>s can be cloned:</p>
+
+<pre class="brush: js notranslate">let original = new Map([
+ [1, 'one']
+])
+
+let clone = new Map(original)
+
+console.log(clone.get(1)) // one
+console.log(original === clone) // false (useful for shallow comparison)</pre>
+
+<div class="blockIndicator note">
+<p><strong>Important:</strong> Keep in mind that <em>the data itself</em> is not cloned.</p>
+</div>
+
+<p>Maps can be merged, maintaining key uniqueness:</p>
+
+<pre class="brush: js notranslate">let first = new Map([
+ [1, 'one'],
+ [2, 'two'],
+ [3, 'three'],
+])
+
+let second = new Map([
+ [1, 'uno'],
+ [2, 'dos']
+])
+
+// Merge two maps. The last repeated key wins.
+// Spread operator essentially converts a Map to an Array
+let merged = new Map([...first, ...second])
+
+console.log(merged.get(1)) // uno
+console.log(merged.get(2)) // dos
+console.log(merged.get(3)) // three</pre>
+
+<p>Maps can be merged with Arrays, too:</p>
+
+<pre class="brush: js notranslate">let first = new Map([
+ [1, 'one'],
+ [2, 'two'],
+ [3, 'three'],
+])
+
+let second = new Map([
+ [1, 'uno'],
+ [2, 'dos']
+])
+
+// Merge maps with an array. The last repeated key wins.
+let merged = new Map([...first, ...second, [1, 'eins']])
+
+console.log(merged.get(1)) // eins
+console.log(merged.get(2)) // dos
+console.log(merged.get(3)) // three</pre>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Specification</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-map-objects', 'Map')}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+
+
+<p>{{Compat("javascript.builtins.Map")}}</p>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li>{{jsxref("Set")}}</li>
+ <li>{{jsxref("WeakMap")}}</li>
+ <li>{{jsxref("WeakSet")}}</li>
+</ul>
diff --git a/files/ar/web/javascript/reference/global_objects/math/index.html b/files/ar/web/javascript/reference/global_objects/math/index.html
new file mode 100644
index 0000000000..dd3196e0ac
--- /dev/null
+++ b/files/ar/web/javascript/reference/global_objects/math/index.html
@@ -0,0 +1,190 @@
+---
+title: رياضيات
+slug: Web/JavaScript/Reference/Global_Objects/Math
+translation_of: Web/JavaScript/Reference/Global_Objects/Math
+---
+<div>{{JSRef}}</div>
+
+<p><strong><code>Math</code></strong> is a built-in object that has properties and methods for mathematical constants and functions. Not a function object.</p>
+
+<h2 id="Description">Description</h2>
+
+<p>Unlike the other global objects, <code>Math</code> is not a constructor. All properties and methods of <code>Math</code> are static. You refer to the constant pi as <code>Math.PI</code> and you call the sine function as <code>Math.sin(x)</code>, where <code>x</code> is the method's argument. Constants are defined with the full precision of real numbers in JavaScript.</p>
+
+<h2 id="Properties">Properties</h2>
+
+<dl>
+ <dt>{{jsxref("Math.E")}}</dt>
+ <dd>Euler's constant and the base of natural logarithms, approximately 2.718.</dd>
+ <dt>{{jsxref("Math.LN2")}}</dt>
+ <dd>Natural logarithm of 2, approximately 0.693.</dd>
+ <dt>{{jsxref("Math.LN10")}}</dt>
+ <dd>Natural logarithm of 10, approximately 2.303.</dd>
+ <dt>{{jsxref("Math.LOG2E")}}</dt>
+ <dd>Base 2 logarithm of E, approximately 1.443.</dd>
+ <dt>{{jsxref("Math.LOG10E")}}</dt>
+ <dd>Base 10 logarithm of E, approximately 0.434.</dd>
+ <dt>{{jsxref("Math.PI")}}</dt>
+ <dd>Ratio of the circumference of a circle to its diameter, approximately 3.14159.</dd>
+ <dt>{{jsxref("Math.SQRT1_2")}}</dt>
+ <dd>Square root of 1/2; equivalently, 1 over the square root of 2, approximately 0.707.</dd>
+ <dt>{{jsxref("Math.SQRT2")}}</dt>
+ <dd>Square root of 2, approximately 1.414.</dd>
+</dl>
+
+<h2 id="Methods">Methods</h2>
+
+<div class="note">
+<p>Note that the trigonometric functions (<code>sin()</code>, <code>cos()</code>, <code>tan()</code>, <code>asin()</code>, <code>acos()</code>, <code>atan()</code>, <code>atan2()</code>) expect or return angles in radians. To convert radians to degrees, divide by <code>(Math.PI / 180)</code>, and multiply by this to convert the other way.</p>
+</div>
+
+<div class="note">
+<p>Note that many math functions have a precision that's implementation-dependent. This means that different browsers can give a different result, and even the same JS engine on a different OS or architecture can give different results.</p>
+</div>
+
+<dl>
+ <dt>{{jsxref("Global_Objects/Math/abs", "Math.abs(x)")}}</dt>
+ <dd>Returns the absolute value of a number.</dd>
+ <dt>{{jsxref("Global_Objects/Math/acos", "Math.acos(x)")}}</dt>
+ <dd>Returns the arccosine of a number.</dd>
+ <dt>{{jsxref("Global_Objects/Math/acosh", "Math.acosh(x)")}}</dt>
+ <dd>Returns the hyperbolic arccosine of a number.</dd>
+ <dt>{{jsxref("Global_Objects/Math/asin", "Math.asin(x)")}}</dt>
+ <dd>Returns the arcsine of a number.</dd>
+ <dt>{{jsxref("Global_Objects/Math/asinh", "Math.asinh(x)")}}</dt>
+ <dd>Returns the hyperbolic arcsine of a number.</dd>
+ <dt>{{jsxref("Global_Objects/Math/atan", "Math.atan(x)")}}</dt>
+ <dd>Returns the arctangent of a number.</dd>
+ <dt>{{jsxref("Global_Objects/Math/atanh", "Math.atanh(x)")}}</dt>
+ <dd>Returns the hyperbolic arctangent of a number.</dd>
+ <dt>{{jsxref("Global_Objects/Math/atan2", "Math.atan2(y, x)")}}</dt>
+ <dd>Returns the arctangent of the quotient of its arguments.</dd>
+ <dt>{{jsxref("Global_Objects/Math/cbrt", "Math.cbrt(x)")}}</dt>
+ <dd>Returns the cube root of a number.</dd>
+ <dt>{{jsxref("Global_Objects/Math/ceil", "Math.ceil(x)")}}</dt>
+ <dd>Returns the smallest integer greater than or equal to a number.</dd>
+ <dt>{{jsxref("Global_Objects/Math/clz32", "Math.clz32(x)")}}</dt>
+ <dd>Returns the number of leading zeroes of a 32-bit integer.</dd>
+ <dt>{{jsxref("Global_Objects/Math/cos", "Math.cos(x)")}}</dt>
+ <dd>Returns the cosine of a number.</dd>
+ <dt>{{jsxref("Global_Objects/Math/cosh", "Math.cosh(x)")}}</dt>
+ <dd>Returns the hyperbolic cosine of a number.</dd>
+ <dt>{{jsxref("Global_Objects/Math/exp", "Math.exp(x)")}}</dt>
+ <dd>Returns E<sup>x</sup>, where <var>x</var> is the argument, and E is Euler's constant (2.718…), the base of the natural logarithm.</dd>
+ <dt>{{jsxref("Global_Objects/Math/expm1", "Math.expm1(x)")}}</dt>
+ <dd>Returns subtracting 1 from <code>exp(x)</code>.</dd>
+ <dt>{{jsxref("Global_Objects/Math/floor", "Math.floor(x)")}}</dt>
+ <dd>Returns the largest integer less than or equal to a number.</dd>
+ <dt>{{jsxref("Global_Objects/Math/fround", "Math.fround(x)")}}</dt>
+ <dd>Returns the nearest <a href="http://en.wikipedia.org/wiki/Single-precision_floating-point_format" title="link to the wikipedia page on single precision">single precision</a> float representation of a number.</dd>
+ <dt>{{jsxref("Global_Objects/Math/hypot", "Math.hypot([x[, y[, …]]])")}}</dt>
+ <dd>Returns the square root of the sum of squares of its arguments.</dd>
+ <dt>{{jsxref("Global_Objects/Math/imul", "Math.imul(x, y)")}}</dt>
+ <dd>Returns the result of a 32-bit integer multiplication.</dd>
+ <dt>{{jsxref("Global_Objects/Math/log", "Math.log(x)")}}</dt>
+ <dd>Returns the natural logarithm (log<sub>e</sub>, also ln) of a number.</dd>
+ <dt>{{jsxref("Global_Objects/Math/log1p", "Math.log1p(x)")}}</dt>
+ <dd>Returns the natural logarithm (log<sub>e</sub>, also ln) of <code>1 + x</code> for a number x.</dd>
+ <dt>{{jsxref("Global_Objects/Math/log10", "Math.log10(x)")}}</dt>
+ <dd>Returns the base 10 logarithm of a number.</dd>
+ <dt>{{jsxref("Global_Objects/Math/log2", "Math.log2(x)")}}</dt>
+ <dd>Returns the base 2 logarithm of a number.</dd>
+ <dt>{{jsxref("Global_Objects/Math/max", "Math.max([x[, y[, …]]])")}}</dt>
+ <dd>Returns the largest of zero or more numbers.</dd>
+ <dt>{{jsxref("Global_Objects/Math/min", "Math.min([x[, y[, …]]])")}}</dt>
+ <dd>Returns the smallest of zero or more numbers.</dd>
+ <dt>{{jsxref("Global_Objects/Math/pow", "Math.pow(x, y)")}}</dt>
+ <dd>Returns base to the exponent power, that is, <code>base<sup>exponent</sup></code>.</dd>
+ <dt>{{jsxref("Global_Objects/Math/random", "Math.random()")}}</dt>
+ <dd>Returns a pseudo-random number between 0 and 1.</dd>
+ <dt>{{jsxref("Global_Objects/Math/round", "Math.round(x)")}}</dt>
+ <dd>Returns the value of a number rounded to the nearest integer.</dd>
+ <dt>{{jsxref("Global_Objects/Math/sign", "Math.sign(x)")}}</dt>
+ <dd>Returns the sign of the x, indicating whether x is positive, negative or zero.</dd>
+ <dt>{{jsxref("Global_Objects/Math/sin", "Math.sin(x)")}}</dt>
+ <dd>Returns the sine of a number.</dd>
+ <dt>{{jsxref("Global_Objects/Math/sinh", "Math.sinh(x)")}}</dt>
+ <dd>Returns the hyperbolic sine of a number.</dd>
+ <dt>{{jsxref("Global_Objects/Math/sqrt", "Math.sqrt(x)")}}</dt>
+ <dd>Returns the positive square root of a number.</dd>
+ <dt>{{jsxref("Global_Objects/Math/tan", "Math.tan(x)")}}</dt>
+ <dd>Returns the tangent of a number.</dd>
+ <dt>{{jsxref("Global_Objects/Math/tanh", "Math.tanh(x)")}}</dt>
+ <dd>Returns the hyperbolic tangent of a number.</dd>
+ <dt><code>Math.toSource()</code> {{non-standard_inline}}</dt>
+ <dd>Returns the string <code>"Math"</code>.</dd>
+ <dt>{{jsxref("Global_Objects/Math/trunc", "Math.trunc(x)")}}</dt>
+ <dd>Returns the integer part of the number x, removing any fractional digits.</dd>
+</dl>
+
+<h2 id="Extending_the_Math_object">Extending the <code>Math</code> object</h2>
+
+<p>As with most of the built-in objects in JavaScript, the <code>Math</code> object can be extended with custom properties and methods. To extend the <code>Math</code> object, you do not use <code>prototype</code>. Instead, you directly extend <code>Math</code>:</p>
+
+<pre>Math.propName = propValue;
+Math.methodName = methodRef;</pre>
+
+<p>For instance, the following example adds a method to the <code>Math</code> object for calculating the <em>greatest common divisor</em> of a list of arguments.</p>
+
+<pre class="brush: js">/* Variadic function -- Returns the greatest common divisor of a list of arguments */
+Math.gcd = function() {
+ if (arguments.length == 2) {
+ if (arguments[1] == 0)
+ return arguments[0];
+ else
+ return Math.gcd(arguments[1], arguments[0] % arguments[1]);
+ } else if (arguments.length &gt; 2) {
+ var result = Math.gcd(arguments[0], arguments[1]);
+ for (var i = 2; i &lt; arguments.length; i++)
+ result = Math.gcd(result, arguments[i]);
+ return result;
+ }
+};</pre>
+
+<p>Try it:</p>
+
+<pre class="brush: js">console.log(Math.gcd(20, 30, 15, 70, 40)); // `5`</pre>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Initial definition. Implemented in JavaScript 1.1.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.8', 'Math')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math-object', 'Math')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>New methods {{jsxref("Math.log10()", "log10()")}}, {{jsxref("Math.log2()", "log2()")}}, {{jsxref("Math.log1p()", "log1p()")}}, {{jsxref("Math.expm1()", "expm1()")}}, {{jsxref("Math.cosh()", "cosh()")}}, {{jsxref("Math.sinh()", "sinh()")}}, {{jsxref("Math.tanh()", "tanh()")}}, {{jsxref("Math.acosh()", "acosh()")}}, {{jsxref("Math.asinh()", "asinh()")}}, {{jsxref("Math.atanh()", "atanh()")}}, {{jsxref("Math.hypot()", "hypot()")}}, {{jsxref("Math.trunc()", "trunc()")}}, {{jsxref("Math.sign()", "sign()")}}, {{jsxref("Math.imul()", "imul()")}}, {{jsxref("Math.fround()", "fround()")}}, {{jsxref("Math.cbrt()", "cbrt()")}} and {{jsxref("Math.clz32()", "clz32()")}} added.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-math-object', 'Math')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+
+<p>{{Compat("javascript.builtins.Math")}}</p>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li>{{jsxref("Number")}}</li>
+</ul>
diff --git a/files/ar/web/javascript/reference/global_objects/object/constructor/index.html b/files/ar/web/javascript/reference/global_objects/object/constructor/index.html
new file mode 100644
index 0000000000..140d95a732
--- /dev/null
+++ b/files/ar/web/javascript/reference/global_objects/object/constructor/index.html
@@ -0,0 +1,152 @@
+---
+title: Object.prototype.constructor
+slug: Web/JavaScript/Reference/Global_Objects/Object/constructor
+translation_of: Web/JavaScript/Reference/Global_Objects/Object/constructor
+---
+<div dir="rtl">{{JSRef}}</div>
+
+<p dir="rtl">بالرجوع إلى {{jsxref("Object")}}constructor ووظيفتها إنشاء حالات من الاوبجكت (الكائن) .نذكرك بأن قيمة الخصائص التي تشير إليها تلك الفانكشان تشير لنفسها ولا تشير إلى سلسة تحتوي على إسم الفانكشان القيمة تقرأ فقط قيم بدائية مثل <code>1</code>, <code>true</code> و <code>"test"</code>.</p>
+
+<h2 dir="rtl" id="الوصف">الوصف</h2>
+
+<p dir="rtl">جميع الاوبجكت ( مع بعض الاستثائات نشأت مع <code>Object.create(null)</code>  ) وستملك وقتها جميعا خاصية الـ <code>constructor </code>. اما  الكائنات المنشأة بدون إستخدام الكونستراكتور بشكل صريح ( مثل  object &amp; array literals )  ستملك أيضا خصائص الكونستركتور بشكل أساسي</p>
+
+<pre class="brush: js">var o = {};
+o.constructor === Object; // true
+
+var o = new Object;
+o.constructor === Object; // true
+
+var a = [];
+a.constructor === Array; // true
+
+var a = new Array;
+a.constructor === Array; // true
+
+var n = new Number(3);
+n.constructor === Number; // true
+</pre>
+
+<h2 dir="rtl" id="أمثلة">أمثلة</h2>
+
+<h3 dir="rtl" id="عرض_الكونستركتور_للأوبجكت">عرض الكونستركتور للأوبجكت</h3>
+
+<p dir="rtl">في المثال التالي قمنا بإنشاء بروتوتيب <code>Tree </code>و اوبجكت بإسم <code>theTree</code>  المثال هنا يعرض خصائص الـ<code>constructor</code> للكائن <code>theTree</code></p>
+
+<pre class="brush: js" dir="rtl">function Tree(name) {
+ this.name = name;
+}
+
+var theTree = new Tree('Redwood');
+console.log('theTree.constructor is ' + theTree.constructor);
+</pre>
+
+<p dir="rtl">عندما تقوم بكتابة الكود بعالية  ستحصل على النتيجة الاتية ليوضح لك أكثر  :-</p>
+
+<pre class="brush: js">theTree.constructor is function Tree(name) {
+ this.name = name;
+}
+</pre>
+
+<h3 dir="rtl" id="تغير_الكونستركتور_الخاص_بالاوبجكت">تغير الكونستركتور الخاص بالاوبجكت</h3>
+
+<p>The following example shows how to modify constructor value of generic objects. Only <code>true</code>, <code>1</code> and <code>"test"</code> will not be affected as they have read-only native constructors. This example shows that it is not always safe to rely on the <code>constructor</code> property of an object.</p>
+
+<pre class="brush:js">function Type () {}
+
+var types = [
+ new Array(),
+ [],
+ new Boolean(),
+ true, // remains unchanged
+ new Date(),
+ new Error(),
+ new Function(),
+ function () {},
+ Math,
+ new Number(),
+ 1, // remains unchanged
+ new Object(),
+ {},
+ new RegExp(),
+ /(?:)/,
+ new String(),
+ 'test' // remains unchanged
+];
+
+for (var i = 0; i &lt; types.length; i++) {
+ types[i].constructor = Type;
+ types[i] = [types[i].constructor, types[i] instanceof Type, types[i].toString()];
+}
+
+console.log(types.join('\n'));
+</pre>
+
+<p>This example displays the following output:</p>
+
+<pre class="brush: js">function Type() {},false,
+function Type() {},false,
+function Type() {},false,false
+function Boolean() {
+ [native code]
+},false,true
+function Type() {},false,Mon Sep 01 2014 16:03:49 GMT+0600
+function Type() {},false,Error
+function Type() {},false,function anonymous() {
+
+}
+function Type() {},false,function () {}
+function Type() {},false,[object Math]
+function Type() {},false,0
+function Number() {
+ [native code]
+},false,1
+function Type() {},false,[object Object]
+function Type() {},false,[object Object]
+function Type() {},false,/(?:)/
+function Type() {},false,/(?:)/
+function Type() {},false,
+function String() {
+ [native code]
+},false,test
+</pre>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Initial definition. Implemented in JavaScript 1.1.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.2.4.1', 'Object.prototype.constructor')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-object.prototype.constructor', 'Object.prototype.constructor')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-object.prototype.constructor', 'Object.prototype.constructor')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 dir="rtl" id="دعم_المتصفحات">دعم  المتصفحات</h2>
+
+<div>
+
+
+<p>{{Compat("javascript.builtins.Object.constructor")}}</p>
+</div>
diff --git a/files/ar/web/javascript/reference/global_objects/object/index.html b/files/ar/web/javascript/reference/global_objects/object/index.html
new file mode 100644
index 0000000000..2eb7c3bb18
--- /dev/null
+++ b/files/ar/web/javascript/reference/global_objects/object/index.html
@@ -0,0 +1,182 @@
+---
+title: Object
+slug: Web/JavaScript/Reference/Global_Objects/Object
+tags:
+ - Constructor
+ - JavaScript
+ - NeedsTranslation
+ - Object
+ - TopicStub
+translation_of: Web/JavaScript/Reference/Global_Objects/Object
+---
+<div>{{JSRef}}</div>
+
+<p>The <code><strong>Object</strong></code> constructor creates an object wrapper.</p>
+
+<h2 id="Syntax">Syntax</h2>
+
+<pre class="syntaxbox">// Object initialiser or literal
+{ [ <var>nameValuePair1</var>[, <var>nameValuePair2</var>[, ...<var>nameValuePairN</var>] ] ] }
+
+// Called as a constructor
+new Object([<var>value</var>])</pre>
+
+<h3 id="Parameters">Parameters</h3>
+
+<dl>
+ <dt><code>nameValuePair1, nameValuePair2, ... nameValuePair<em>N</em></code></dt>
+ <dd>Pairs of names (strings) and values (any value) where the name is separated from the value by a colon.</dd>
+ <dt><code>value</code></dt>
+ <dd>Any value.</dd>
+</dl>
+
+<h2 id="Description">Description</h2>
+
+<p>The <code>Object</code> constructor creates an object wrapper for the given value. If the value is {{jsxref("null")}} or {{jsxref("undefined")}}, it will create and return an empty object, otherwise, it will return an object of a Type that corresponds to the given value. If the value is an object already, it will return the value.</p>
+
+<p>When called in a non-constructor context, <code>Object</code> behaves identically to <code>new Object()</code>.</p>
+
+<p>See also the <a href="/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer">object initializer / literal syntax</a>.</p>
+
+<h2 id="Properties_of_the_Object_constructor">Properties of the <code>Object</code> constructor</h2>
+
+<dl>
+ <dt><code>Object.length</code></dt>
+ <dd>Has a value of 1.</dd>
+ <dt>{{jsxref("Object.prototype")}}</dt>
+ <dd>Allows the addition of properties to all objects of type Object.</dd>
+</dl>
+
+<h2 id="Methods_of_the_Object_constructor">Methods of the <code>Object</code> constructor</h2>
+
+<dl>
+ <dt>{{jsxref("Object.assign()")}}</dt>
+ <dd>Copies the values of all enumerable own properties from one or more source objects to a target object.</dd>
+ <dt>{{jsxref("Object.create()")}}</dt>
+ <dd>Creates a new object with the specified prototype object and properties.</dd>
+ <dt>{{jsxref("Object.defineProperty()")}}</dt>
+ <dd>Adds the named property described by a given descriptor to an object.</dd>
+ <dt>{{jsxref("Object.defineProperties()")}}</dt>
+ <dd>Adds the named properties described by the given descriptors to an object.</dd>
+ <dt>{{jsxref("Object.entries()")}}</dt>
+ <dd>Returns an array containing all of the <code>[key, value]</code> pairs of a given object's <strong>own</strong> enumerable string properties.</dd>
+ <dt>{{jsxref("Object.freeze()")}}</dt>
+ <dd>Freezes an object: other code can't delete or change any properties.</dd>
+ <dt>{{jsxref("Object.getOwnPropertyDescriptor()")}}</dt>
+ <dd>Returns a property descriptor for a named property on an object.</dd>
+ <dt>{{jsxref("Object.getOwnPropertyDescriptors()")}}</dt>
+ <dd>Returns an object containing all own property descriptors for an object.</dd>
+ <dt>{{jsxref("Object.getOwnPropertyNames()")}}</dt>
+ <dd>Returns an array containing the names of all of the given object's <strong>own</strong> enumerable and non-enumerable properties.</dd>
+ <dt>{{jsxref("Object.getOwnPropertySymbols()")}}</dt>
+ <dd>Returns an array of all symbol properties found directly upon a given object.</dd>
+ <dt>{{jsxref("Object.getPrototypeOf()")}}</dt>
+ <dd>Returns the prototype of the specified object.</dd>
+ <dt>{{jsxref("Object.is()")}}</dt>
+ <dd>Compares if two values are the same value. Equates all NaN values (which differs from both Abstract Equality Comparison and Strict Equality Comparison).</dd>
+ <dt>{{jsxref("Object.isExtensible()")}}</dt>
+ <dd>Determines if extending of an object is allowed.</dd>
+ <dt>{{jsxref("Object.isFrozen()")}}</dt>
+ <dd>Determines if an object was frozen.</dd>
+ <dt>{{jsxref("Object.isSealed()")}}</dt>
+ <dd>Determines if an object is sealed.</dd>
+ <dt>{{jsxref("Object.keys()")}}</dt>
+ <dd>Returns an array containing the names of all of the given object's <strong>own</strong> enumerable string properties.</dd>
+ <dt>{{jsxref("Object.preventExtensions()")}}</dt>
+ <dd>Prevents any extensions of an object.</dd>
+ <dt>{{jsxref("Object.seal()")}}</dt>
+ <dd>Prevents other code from deleting properties of an object.</dd>
+ <dt>{{jsxref("Object.setPrototypeOf()")}}</dt>
+ <dd>Sets the prototype (i.e., the internal <code>[[Prototype]]</code> property).</dd>
+ <dt>{{jsxref("Object.values()")}}</dt>
+ <dd>Returns an array containing the values that correspond to all of a given object's <strong>own</strong> enumerable string properties.</dd>
+</dl>
+
+<h2 id="Object_instances_and_Object_prototype_object"><code>Object</code> instances and <code>Object</code> prototype object</h2>
+
+<p>All objects in JavaScript are descended from <code>Object</code>; all objects inherit methods and properties from {{jsxref("Object.prototype")}}, although they may be overridden. For example, other constructors' prototypes override the <code>constructor</code> property and provide their own <code>toString()</code> methods. Changes to the <code>Object</code> prototype object are propagated to all objects unless the properties and methods subject to those changes are overridden further along the prototype chain.</p>
+
+<h3 id="Properties">Properties</h3>
+
+<div>{{page('/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/prototype', 'Properties') }}</div>
+
+<h3 id="Methods">Methods</h3>
+
+<div>{{page('/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/prototype', 'Methods') }}</div>
+
+<h2 id="Deleting_a_property_from_an_object">Deleting a property from an object</h2>
+
+<p>There isn't any method in an Object itself to delete its own properties (e.g. like <code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/delete">Map.prototype.delete()</a></code>). To do so one has to use the <a href="/en-US/docs/Web/JavaScript/Reference/Operators/delete">delete operator</a>.</p>
+
+<h2 id="Examples">Examples</h2>
+
+<h3 id="Using_Object_given_undefined_and_null_types">Using <code>Object</code> given <code>undefined</code> and <code>null</code> types</h3>
+
+<p>The following examples store an empty <code>Object</code> object in <code>o</code>:</p>
+
+<pre class="brush: js">var o = new Object();
+</pre>
+
+<pre class="brush: js">var o = new Object(undefined);
+</pre>
+
+<pre class="brush: js">var o = new Object(null);
+</pre>
+
+<h3 id="Using_Object_to_create_Boolean_objects">Using <code>Object</code> to create <code>Boolean</code> objects</h3>
+
+<p>The following examples store {{jsxref("Boolean")}} objects in <code>o</code>:</p>
+
+<pre class="brush: js">// equivalent to o = new Boolean(true);
+var o = new Object(true);
+</pre>
+
+<pre class="brush: js">// equivalent to o = new Boolean(false);
+var o = new Object(Boolean());
+</pre>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Initial definition. Implemented in JavaScript 1.0.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.2', 'Object')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-object-objects', 'Object')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Added Object.assign, Object.getOwnPropertySymbols, Object.setPrototypeOf, Object.is</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-object-objects', 'Object')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td>Added Object.entries, Object.values and Object.getOwnPropertyDescriptors.</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+<div>
+
+
+<p>{{Compat("javascript.builtins.Object")}}</p>
+</div>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer">Object initializer</a></li>
+</ul>
diff --git a/files/ar/web/javascript/reference/global_objects/string/index.html b/files/ar/web/javascript/reference/global_objects/string/index.html
new file mode 100644
index 0000000000..4dd72a6601
--- /dev/null
+++ b/files/ar/web/javascript/reference/global_objects/string/index.html
@@ -0,0 +1,314 @@
+---
+title: خيط
+slug: Web/JavaScript/Reference/Global_Objects/String
+tags:
+ - ECMAScript 2015
+ - JavaScript
+ - NeedsTranslation
+ - Reference
+ - String
+ - TopicStub
+translation_of: Web/JavaScript/Reference/Global_Objects/String
+---
+<div>{{JSRef}}</div>
+
+<p>The <strong><code>String</code></strong> global object is a constructor for strings, or a sequence of characters.</p>
+
+<h2 id="Syntax">Syntax</h2>
+
+<p>String literals take the forms:</p>
+
+<pre class="syntaxbox">'string text'
+"string text"
+"中文 español deutsch English हिन्दी العربية português বাংলা русский 日本語 ਪੰਜਾਬੀ 한국어 தமிழ் עברית"</pre>
+
+<p>Strings can also be created using the <code>String</code> global object directly:</p>
+
+<pre class="syntaxbox">String(thing)</pre>
+
+<h3 id="Parameters">Parameters</h3>
+
+<dl>
+ <dt><code>thing</code></dt>
+ <dd>Anything to be converted to a string.</dd>
+</dl>
+
+<h3 id="Template_literals">Template literals</h3>
+
+<p>Starting with ECMAScript 2015, string literals can also be so-called <a href="/en-US/docs/Web/JavaScript/Reference/Template_literals">Template literals</a>:</p>
+
+<pre class="syntaxbox">`hello world`
+`hello!
+ world!`
+`hello ${who}`
+escape `&lt;a&gt;${who}&lt;/a&gt;`</pre>
+
+<dl>
+</dl>
+
+<h3 id="Escape_notation">Escape notation</h3>
+
+<p>Beside regular, printable characters, special characters can be encoded using escape notation:</p>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Code</th>
+ <th scope="col">Output</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><code>\0</code></td>
+ <td>the NULL character</td>
+ </tr>
+ <tr>
+ <td><code>\'</code></td>
+ <td>single quote</td>
+ </tr>
+ <tr>
+ <td><code>\"</code></td>
+ <td>double quote</td>
+ </tr>
+ <tr>
+ <td><code>\\</code></td>
+ <td>backslash</td>
+ </tr>
+ <tr>
+ <td><code>\n</code></td>
+ <td>new line</td>
+ </tr>
+ <tr>
+ <td><code>\r</code></td>
+ <td>carriage return</td>
+ </tr>
+ <tr>
+ <td><code>\v</code></td>
+ <td>vertical tab</td>
+ </tr>
+ <tr>
+ <td><code>\t</code></td>
+ <td>tab</td>
+ </tr>
+ <tr>
+ <td><code>\b</code></td>
+ <td>backspace</td>
+ </tr>
+ <tr>
+ <td><code>\f</code></td>
+ <td>form feed</td>
+ </tr>
+ <tr>
+ <td><code>\uXXXX</code></td>
+ <td>unicode codepoint</td>
+ </tr>
+ <tr>
+ <td><code>\u{X}</code> ... <code>\u{XXXXXX}</code></td>
+ <td>unicode codepoint {{experimental_inline}}</td>
+ </tr>
+ <tr>
+ <td><code>\xXX</code></td>
+ <td>the Latin-1 character</td>
+ </tr>
+ </tbody>
+</table>
+
+<div class="note">
+<p>Unlike some other languages, JavaScript makes no distinction between single-quoted strings and double-quoted strings; therefore, the escape sequences above work in strings created with either single or double quotes.</p>
+</div>
+
+<dl>
+</dl>
+
+<h3 id="Long_literal_strings">Long literal strings</h3>
+
+<p>Sometimes, your code will include strings which are very long. Rather than having lines that go on endlessly, or wrap at the whim of your editor, you may wish to specifically break the string into multiple lines in the source code without affecting the actual string contents. There are two ways you can do this.</p>
+
+<p>You can use the <a href="/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Addition_()">+</a> operator to append multiple strings together, like this:</p>
+
+<pre class="brush: js">let longString = "This is a very long string which needs " +
+ "to wrap across multiple lines because " +
+ "otherwise my code is unreadable.";
+</pre>
+
+<p>Or you can use the backslash character ("\") at the end of each line to indicate that the string will continue on the next line. Make sure there is no space or any other character after the backslash (except for a line break), or as an indent; otherwise it will not work. That form looks like this:</p>
+
+<pre class="brush: js">let longString = "This is a very long string which needs \
+to wrap across multiple lines because \
+otherwise my code is unreadable.";
+</pre>
+
+<p>Both of these result in identical strings being created.</p>
+
+<h2 id="Description">Description</h2>
+
+<p>Strings are useful for holding data that can be represented in text form. Some of the most-used operations on strings are to check their {{jsxref("String.length", "length")}}, to build and concatenate them using the <a href="/en-US/docs/Web/JavaScript/Reference/Operators/String_Operators">+ and += string operators</a>, checking for the existence or location of substrings with the {{jsxref("String.prototype.indexOf()", "indexOf()")}} method, or extracting substrings with the {{jsxref("String.prototype.substring()", "substring()")}} method.</p>
+
+<h3 id="Character_access">Character access</h3>
+
+<p>There are two ways to access an individual character in a string. The first is the {{jsxref("String.prototype.charAt()", "charAt()")}} method:</p>
+
+<pre class="brush: js">return 'cat'.charAt(1); // returns "a"
+</pre>
+
+<p>The other way (introduced in ECMAScript 5) is to treat the string as an array-like object, where individual characters correspond to a numerical index:</p>
+
+<pre class="brush: js">return 'cat'[1]; // returns "a"
+</pre>
+
+<p>For character access using bracket notation, attempting to delete or assign a value to these properties will not succeed. The properties involved are neither writable nor configurable. (See {{jsxref("Object.defineProperty()")}} for more information.)</p>
+
+<h3 id="Comparing_strings">Comparing strings</h3>
+
+<p>C developers have the <code>strcmp()</code> function for comparing strings. In JavaScript, you just use the <a href="/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators">less-than and greater-than operators</a>:</p>
+
+<pre class="brush: js">var a = 'a';
+var b = 'b';
+if (a &lt; b) { // true
+ console.log(a + ' is less than ' + b);
+} else if (a &gt; b) {
+ console.log(a + ' is greater than ' + b);
+} else {
+ console.log(a + ' and ' + b + ' are equal.');
+}
+</pre>
+
+<p>A similar result can be achieved using the {{jsxref("String.prototype.localeCompare()", "localeCompare()")}} method inherited by <code>String</code> instances.</p>
+
+<h3 id="Distinction_between_string_primitives_and_String_objects">Distinction between string primitives and <code>String</code> objects</h3>
+
+<p>Note that JavaScript distinguishes between <code>String</code> objects and primitive string values. (The same is true of {{jsxref("Boolean")}} and {{jsxref("Global_Objects/Number", "Numbers")}}.)</p>
+
+<p>String literals (denoted by double or single quotes) and strings returned from <code>String</code> calls in a non-constructor context (i.e., without using the {{jsxref("Operators/new", "new")}} keyword) are primitive strings. JavaScript automatically converts primitives to <code>String</code> objects, so that it's possible to use <code>String</code> object methods for primitive strings. In contexts where a method is to be invoked on a primitive string or a property lookup occurs, JavaScript will automatically wrap the string primitive and call the method or perform the property lookup.</p>
+
+<pre class="brush: js">var s_prim = 'foo';
+var s_obj = new String(s_prim);
+
+console.log(typeof s_prim); // Logs "string"
+console.log(typeof s_obj); // Logs "object"
+</pre>
+
+<p>String primitives and <code>String</code> objects also give different results when using {{jsxref("Global_Objects/eval", "eval()")}}. Primitives passed to <code>eval</code> are treated as source code; <code>String</code> objects are treated as all other objects are, by returning the object. For example:</p>
+
+<pre class="brush: js">var s1 = '2 + 2'; // creates a string primitive
+var s2 = new String('2 + 2'); // creates a String object
+console.log(eval(s1)); // returns the number 4
+console.log(eval(s2)); // returns the string "2 + 2"
+</pre>
+
+<p>For these reasons, code may break when it encounters <code>String</code> objects when it expects a primitive string instead, although generally authors need not worry about the distinction.</p>
+
+<p>A <code>String</code> object can always be converted to its primitive counterpart with the {{jsxref("String.prototype.valueOf()", "valueOf()")}} method.</p>
+
+<pre class="brush: js">console.log(eval(s2.valueOf())); // returns the number 4
+</pre>
+
+<div class="note"><strong>Note:</strong> For another possible approach to strings in JavaScript, please read the article about <a href="/en-US/Add-ons/Code_snippets/StringView"><code>StringView</code> — a C-like representation of strings based on typed arrays</a>.</div>
+
+<h2 id="Properties">Properties</h2>
+
+<dl>
+ <dt>{{jsxref("String.prototype")}}</dt>
+ <dd>Allows the addition of properties to a <code>String</code> object.</dd>
+</dl>
+
+<h2 id="Methods">Methods</h2>
+
+<dl>
+ <dt>{{jsxref("String.fromCharCode()")}}</dt>
+ <dd>Returns a string created by using the specified sequence of Unicode values.</dd>
+ <dt>{{jsxref("String.fromCodePoint()")}} {{experimental_inline}}</dt>
+ <dd>Returns a string created by using the specified sequence of code points.</dd>
+ <dt>{{jsxref("String.raw()")}} {{experimental_inline}}</dt>
+ <dd>Returns a string created from a raw template string.</dd>
+</dl>
+
+<h2 id="String_generic_methods"><code>String</code> generic methods</h2>
+
+<div class="warning">
+<p><strong>String generics are non-standard, deprecated and will get removed near future</strong>.</p>
+</div>
+
+<p>The <code>String</code> instance methods are also available in Firefox as of JavaScript 1.6 (<strong>not</strong> part of the ECMAScript standard) on the <code>String</code> object for applying <code>String</code> methods to any object:</p>
+
+<pre class="brush: js">var num = 15;
+console.log(String.replace(num, /5/, '2'));
+</pre>
+
+<p>For migrating away from String generics, see also <a href="/en-US/docs/Web/JavaScript/Reference/Errors/Deprecated_string_generics">Warning: String.x is deprecated; use String.prototype.x instead</a>.</p>
+
+<p>{{jsxref("Global_Objects/Array", "Generics", "#Array_generic_methods", 1)}} are also available on {{jsxref("Array")}} methods.</p>
+
+<h2 id="String_instances"><code>String</code> instances</h2>
+
+<h3 id="Properties_2">Properties</h3>
+
+<div>{{page('/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/prototype', 'Properties')}}</div>
+
+<h3 id="Methods_2">Methods</h3>
+
+<h4 id="Methods_unrelated_to_HTML">Methods unrelated to HTML</h4>
+
+<div>{{page('/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/prototype', 'Methods_unrelated_to_HTML')}}</div>
+
+<h4 id="HTML_wrapper_methods">HTML wrapper methods</h4>
+
+<div>{{page('/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/prototype', 'HTML_wrapper_methods')}}</div>
+
+<h2 id="Examples">Examples</h2>
+
+<h3 id="String_conversion">String conversion</h3>
+
+<p>It's possible to use <code>String</code> as a "safer" {{jsxref("String.prototype.toString()", "toString()")}} alternative, although it still normally calls the underlying <code>toString()</code>. It also works for {{jsxref("null")}}, {{jsxref("undefined")}}, and for {{jsxref("Symbol", "symbols")}}. For example:</p>
+
+<pre class="brush: js">var outputStrings = [];
+for (var i = 0, n = inputValues.length; i &lt; n; ++i) {
+ outputStrings.push(String(inputValues[i]));
+}
+</pre>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-15.5', 'String')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-string-objects', 'String')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-string-objects', 'String')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+
+<p>{{Compat("javascript.builtins.String.String")}}</p>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li>{{domxref("DOMString")}}</li>
+ <li><a href="/en-US/Add-ons/Code_snippets/StringView"><code>StringView</code> — a C-like representation of strings based on typed arrays</a></li>
+ <li><a href="/en-US/docs/Web/API/DOMString/Binary">Binary strings</a></li>
+</ul>
diff --git a/files/ar/web/javascript/reference/global_objects/string/startswith/index.html b/files/ar/web/javascript/reference/global_objects/string/startswith/index.html
new file mode 100644
index 0000000000..94b059d593
--- /dev/null
+++ b/files/ar/web/javascript/reference/global_objects/string/startswith/index.html
@@ -0,0 +1,101 @@
+---
+title: String.prototype.startsWith()
+slug: Web/JavaScript/Reference/Global_Objects/String/startsWith
+translation_of: Web/JavaScript/Reference/Global_Objects/String/startsWith
+---
+<div>{{JSRef}}</div>
+
+<p dir="rtl"><span class="seoSummary"><strong><code>startsWith()</code></strong></span><br>
+ <span class="seoSummary">.طريقة يمكنك<strong> تحقق</strong> بها<strong> إن كان </strong><code>نص</code> <strong>يبدء بالعبارة ما</strong> و تعيد لك<code> صحيح </code>أو <code>خطأ</code> </span></p>
+
+<div>{{EmbedInteractiveExample("pages/js/string-startswith.html")}}</div>
+
+
+
+<h2 dir="rtl" id="تركيب_الجملة_Syntax">تركيب الجملة | Syntax</h2>
+
+<pre class="syntaxbox"><var>str</var>.startsWith(<var>searchString</var>[, <var>position</var>])</pre>
+
+<h3 dir="rtl" id="المعاملات_Parameters">المعاملات | Parameters</h3>
+
+<dl>
+ <dt><code>searchString</code></dt>
+ <dd dir="rtl">العبارة<strong> المبحوث عنها</strong> في<strong><code>النص.</code></strong></dd>
+ <dt><code>position </code>{{optional_inline}}</dt>
+ <dd dir="rtl">مكان الذي<strong> يبدأ البحث منه </strong>في<code><strong>النص </strong></code>  <strong>الإفتراضي 0</strong></dd>
+</dl>
+
+<h3 dir="rtl" id="القيمة_العائدة_Return_value">القيمة العائدة | Return value</h3>
+
+<p dir="rtl"><strong>العائد</strong> يكون<strong> صحيح</strong> إذا وجد <strong>تطابق</strong><br>
+ و إن <strong>لم يجيد تطابق</strong> يعيد لك <strong>خطأ</strong></p>
+
+<h2 dir="rtl" id="الوصف_Description">الوصف | Description</h2>
+
+<p dir="rtl"><strong><code>هذه الطريقة حساسة إتجاه الحروف<br>
+ case-sensitive</code></strong></p>
+
+<h2 dir="rtl" id="أمثلة_Examples">أمثلة | Examples</h2>
+
+<h3 id="Using_startsWith()">Using <code>startsWith()</code></h3>
+
+<pre class="brush: js">//startswith
+var str = 'To be, or not to be, that is the question.';
+
+console.log(str.startsWith('To be')); // true
+console.log(str.startsWith('not to be')); // false
+console.log(str.startsWith('not to be', 10)); // true
+</pre>
+
+<h2 id="Polyfill">Polyfill</h2>
+
+<p>This method has been added to the ECMAScript 2015 specification and may not be available in all JavaScript implementations yet. However, you can polyfill <code>String.prototype.startsWith()</code> with the following snippet:</p>
+
+<pre class="brush: js">if (!String.prototype.startsWith) {
+    Object.defineProperty(String.prototype, 'startsWith', {
+        value: function(search, pos) {
+  pos = !pos || pos &lt; 0 ? 0 : +pos;
+            return this.substring(pos, pos + search.length) === search;
+        }
+    });
+}
+</pre>
+
+<p>A more robust (fully ES2015 specification compliant), but less performant and compact, Polyfill is available <a href="https://github.com/mathiasbynens/String.prototype.startsWith">on GitHub by Mathias Bynens</a>.</p>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-string.prototype.startswith', 'String.prototype.startsWith')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-string.prototype.startswith', 'String.prototype.startsWith')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 dir="rtl" id="توافق_مع_متصفحات">توافق مع متصفحات</h2>
+
+<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+
+<p>{{Compat("javascript.builtins.String.startsWith")}}</p>
+
+<h2 dir="rtl" id="ذات_صلة">ذات صلة</h2>
+
+<ul>
+ <li>{{jsxref("String.prototype.endsWith()")}}</li>
+ <li>{{jsxref("String.prototype.includes()")}}</li>
+ <li>{{jsxref("String.prototype.indexOf()")}}</li>
+ <li>{{jsxref("String.prototype.lastIndexOf()")}}</li>
+</ul>
diff --git a/files/ar/web/javascript/reference/global_objects/الارقام/index.html b/files/ar/web/javascript/reference/global_objects/الارقام/index.html
new file mode 100644
index 0000000000..cb667fd3d8
--- /dev/null
+++ b/files/ar/web/javascript/reference/global_objects/الارقام/index.html
@@ -0,0 +1,12 @@
+---
+title: الارقام في الجافا سكربت
+slug: Web/JavaScript/Reference/Global_Objects/الارقام
+translation_of: Web/JavaScript/Reference/Global_Objects/Number
+---
+<p> وهو كائن غلاف يستخدم لتمثيل ومعالجة الأرقام مثل  <code>37</code><em>  </em><strong>او </strong><code>9.25</code> <strong><code>Number</code></strong>منشئ يحتوي على الثوابت وطرق للعمل مع الأرقام. يمكن تحويل قيم الأنواع الأخرى إلى أرقام باستخدام <strong> </strong><strong><code>Number()</code>الوظيفة</strong>.</p>
+
+<p>جافا سكريبت <strong>رقم </strong>نوع عبارة عن قيمة <a class="external" href="https://en.wikipedia.org/wiki/Floating-point_arithmetic" rel="noopener">مزدوجة الدقة بتنسيق IEEE 754 تنسيق ثنائي 64 بت </a>ذات ، كما هو الحال <code>double</code>في <strong>Java</strong> أو <strong>C #</strong>. هذا يعني أنه يمكن أن يمثل قيمًا كسرية ، ولكن هناك بعض الحدود لما يمكن تخزينه. يحتفظ فقط بحوالي   17 رقم  منزلاً عشريًا من الدقة ؛ الحساب يخضع <a class="external" href="https://en.wikipedia.org/wiki/Floating-point_arithmetic#Representable_numbers,_conversion_and_rounding" rel="noopener">للتقريب </a>. أكبر قيمة يمكن أن يحملها رقم هي حوالي <code><strong>1.8 × 10 <sup>308 </sup></strong></code>. يتم استبدال الأعداد التي تتجاوز ذلك بثابت الرقم الخاص <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Infinity"><code>Infinity</code></a>.</p>
+
+<p>الرقم الحرفي مثل <code>37</code>كود JavaScript هو قيمة فاصلة عائمة ، وليس عددًا صحيحًا. لا يوجد نوع عدد صحيح منفصل في الاستخدام اليومي الشائع. (يحتوي JavaScript الآن على <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt"><code>BigInt</code></a>نوع ، لكنه لم يتم تصميمه ليحل محل Number للاستخدامات اليومية. <code>37</code>لا يزال رقمًا ، وليس BigInt.)</p>
+
+<p>يمكن أيضًا التعبير عن الرقم بأشكال حرفية مثل <code>0b101</code>، <code>0o13</code>، <code>0x0A</code>. تعرف على المزيد حول العددي <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#Numeric_literals">قواعد المعجم هنا </a>.</p>
diff --git a/files/ar/web/javascript/reference/index.html b/files/ar/web/javascript/reference/index.html
new file mode 100644
index 0000000000..db41d77223
--- /dev/null
+++ b/files/ar/web/javascript/reference/index.html
@@ -0,0 +1,50 @@
+---
+title: مرجع جافا سكريبت
+slug: Web/JavaScript/Reference
+tags:
+ - JavaScript
+ - NeedsTranslation
+ - TopicStub
+translation_of: Web/JavaScript/Reference
+---
+<div>{{JsSidebar}}</div>
+
+<p>This part of the JavaScript section on MDN serves as a repository of facts about the JavaScript language. Read more <a href="/en-US/docs/Web/JavaScript/Reference/About">about this reference</a>.</p>
+
+<h2 id="Global_Objects">Global Objects</h2>
+
+<p>This chapter documents all the <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects">JavaScript standard built-in objects</a>, along with their methods and properties.</p>
+
+<div>{{page('/en-US/docs/Web/JavaScript/Reference/Global_Objects', 'Standard objects (by category)')}}</div>
+
+<h2 id="Statements">Statements</h2>
+
+<p>This chapter documents all the <a href="/en-US/docs/Web/JavaScript/Reference/Statements">JavaScript statements and declarations</a>.</p>
+
+<div>{{page('/en-US/docs/Web/JavaScript/Reference/Statements', 'Statements_and_declarations_by_category')}}</div>
+
+<h2 id="Expressions_and_operators">Expressions and operators</h2>
+
+<p>This chapter documents all the <a href="/en-US/docs/Web/JavaScript/Reference/Operators">JavaScript expressions and operators</a>.</p>
+
+<div>{{page('/en-US/docs/Web/JavaScript/Reference/Operators', 'Expressions_and_operators_by_category')}}</div>
+
+<h2 id="Functions">Functions</h2>
+
+<p>This chapter documents how to work with <a href="/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope">JavaScript functions</a> to develop your applications.</p>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/arguments"><code>arguments</code></a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/arrow_functions">Arrow functions</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/default_parameters">Default parameters</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters">Rest parameters</a></li>
+</ul>
+
+<h2 id="Additional_reference_pages">Additional reference pages</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Lexical_grammar">Lexical grammar</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Data_structures">Data types and data structures</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Strict_mode">Strict mode</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Deprecated_and_obsolete_features">Deprecated features</a></li>
+</ul>
diff --git a/files/ar/web/javascript/reference/operators/destructuring_assignment/index.html b/files/ar/web/javascript/reference/operators/destructuring_assignment/index.html
new file mode 100644
index 0000000000..d926351173
--- /dev/null
+++ b/files/ar/web/javascript/reference/operators/destructuring_assignment/index.html
@@ -0,0 +1,428 @@
+---
+title: Destructuring assignment
+slug: Web/JavaScript/Reference/Operators/Destructuring_assignment
+translation_of: Web/JavaScript/Reference/Operators/Destructuring_assignment
+---
+<div>{{jsSidebar("Operators")}}</div>
+
+<div dir="rtl"><strong>الإسناد بالتفكيك</strong> هو تعبير جافاسكربت يجعل من الممكن فك القيم من المصفوفات ( Arrays ) أو الخصائص من الكائنات ( Objects ) إلى متغيرات مميزة.</div>
+
+<div dir="rtl"></div>
+
+<div>{{EmbedInteractiveExample("pages/js/expressions-destructuringassignment.html", "taller")}}</div>
+
+<div class="hidden">The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</div>
+
+<h2 id="Syntax">Syntax</h2>
+
+<pre class="brush:js">let a, b, rest;
+[a, b] = [10, 20];
+console.log(a); // 10
+console.log(b); // 20
+
+[a, b, ...rest] = [10, 20, 30, 40, 50];
+console.log(a); // 10
+console.log(b); // 20
+console.log(rest); // [30, 40, 50]
+
+({ a, b } = { a: 10, b: 20 });
+console.log(a); // 10
+console.log(b); // 20
+
+
+// Stage 4(finished) proposal
+({a, b, ...rest} = {a: 10, b: 20, c: 30, d: 40});
+console.log(a); // 10
+console.log(b); // 20
+console.log(rest); // {c: 30, d: 40}
+</pre>
+
+<h2 dir="rtl" id="التفاصيل">التفاصيل</h2>
+
+<p dir="rtl">توفر تعبيرات الكائن (Object) والمصفوفة (Array) طريقة سهلة لإنشاء حزم بيانات مخصصة.</p>
+
+<pre class="brush: js">const x = [1, 2, 3, 4, 5];
+</pre>
+
+<p dir="rtl" id="tw-target-text">يَستخدِم<strong> الإسناد بالتفكيك (destructuring assignment)</strong> بنية مماثلة، ولكن على الجانب الأيسر من المهمة لتحديد القيم التي يجب فكها من مصدر المتغير الأساسي.</p>
+
+<pre dir="rtl" id="tw-target-text">const x = [1, 2, 3, 4, 5];
+const [y, z] = x;
+console.log(y); // 1
+console.log(z); // 2
+</pre>
+
+<p dir="rtl">تشبه هذه الإمكانية الميزات الموجودة بلغات مثل Perl و Python.</p>
+
+<p dir="rtl"></p>
+
+<h2 dir="rtl" id="تفكيك_المصفوفات">تفكيك المصفوفات</h2>
+
+<h3 dir="rtl" id="تعيين_المتغير_الأساسي">تعيين المتغير الأساسي</h3>
+
+<pre class="brush: js">const foo = ['one', 'two', 'three'];
+
+const [red, yellow, green] = foo;
+console.log(red); // "one"
+console.log(yellow); // "two"
+console.log(green); // "three"
+</pre>
+
+<h3 id="Assignment_separate_from_declaration">Assignment separate from declaration</h3>
+
+<p>A variable can be assigned its value via destructuring separate from the variable's declaration.</p>
+
+<pre class="brush:js">let a, b;
+
+[a, b] = [1, 2];
+console.log(a); // 1
+console.log(b); // 2
+</pre>
+
+<h3 id="Default_values">Default values</h3>
+
+<p>A variable can be assigned a default, in the case that the value unpacked from the array is <code>undefined</code>.</p>
+
+<pre class="brush: js">let a, b;
+
+[a=5, b=7] = [1];
+console.log(a); // 1
+console.log(b); // 7
+</pre>
+
+<h3 id="Swapping_variables">Swapping variables</h3>
+
+<p>Two variables values can be swapped in one destructuring expression.</p>
+
+<p>Without destructuring assignment, swapping two values requires a temporary variable (or, in some low-level languages, the <a class="external" href="https://en.wikipedia.org/wiki/XOR_swap_algorithm">XOR-swap trick</a>).</p>
+
+<pre class="brush:js">let a = 1;
+let b = 3;
+
+[a, b] = [b, a];
+console.log(a); // 3
+console.log(b); // 1
+
+const arr = [1,2,3];
+[arr[2], arr[1]] = [arr[1], arr[2]];
+console.log(arr); // [1,3,2]
+
+</pre>
+
+<h3 id="Parsing_an_array_returned_from_a_function">Parsing an array returned from a function</h3>
+
+<p>It's always been possible to return an array from a function. Destructuring can make working with an array return value more concise.</p>
+
+<p>In this example, <code>f()</code> returns the values <code>[1, 2]</code> as its output, which can be parsed in a single line with destructuring.</p>
+
+<pre class="brush:js">function f() {
+ return [1, 2];
+}
+
+let a, b;
+[a, b] = f();
+console.log(a); // 1
+console.log(b); // 2
+</pre>
+
+<h3 id="Ignoring_some_returned_values">Ignoring some returned values</h3>
+
+<p>You can ignore return values that you're not interested in:</p>
+
+<pre class="brush:js">function f() {
+ return [1, 2, 3];
+}
+
+const [a, , b] = f();
+console.log(a); // 1
+console.log(b); // 3
+
+const [c] = f();
+console.log(c); // 1
+</pre>
+
+<p>You can also ignore all returned values:</p>
+
+<pre class="brush:js">[,,] = f();
+</pre>
+
+<h3 id="Assigning_the_rest_of_an_array_to_a_variable">Assigning the rest of an array to a variable</h3>
+
+<p>When destructuring an array, you can unpack and assign the remaining part of it to a variable using the rest pattern:</p>
+
+<pre class="brush: js">const [a, ...b] = [1, 2, 3];
+console.log(a); // 1
+console.log(b); // [2, 3]</pre>
+
+<p>Be aware that a {{jsxref("SyntaxError")}} will be thrown if a trailing comma is used on the left-hand side with a rest element:</p>
+
+<pre class="brush: js example-bad">const [a, ...b,] = [1, 2, 3];
+
+// SyntaxError: rest element may not have a trailing comma
+// Always consider using rest operator as the last element
+</pre>
+
+<h3 id="Unpacking_values_from_a_regular_expression_match">Unpacking values from a regular expression match</h3>
+
+<p>When the regular expression <code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec"> exec()</a></code> method finds a match, it returns an array containing first the entire matched portion of the string and then the portions of the string that matched each parenthesized group in the regular expression. Destructuring assignment allows you to unpack the parts out of this array easily, ignoring the full match if it is not needed.</p>
+
+<pre class="brush:js">function parseProtocol(url) {
+ const parsedURL = /^(\w+)\:\/\/([^\/]+)\/(.*)$/.exec(url);
+ if (!parsedURL) {
+ return false;
+ }
+ console.log(parsedURL); // ["https://developer.mozilla.org/en-US/Web/JavaScript", "https", "developer.mozilla.org", "en-US/Web/JavaScript"]
+
+ const [, protocol, fullhost, fullpath] = parsedURL;
+ return protocol;
+}
+
+console.log(parseProtocol('https://developer.mozilla.org/en-US/Web/JavaScript')); // "https"
+</pre>
+
+<h2 id="Object_destructuring">Object destructuring</h2>
+
+<h3 id="Basic_assignment">Basic assignment</h3>
+
+<pre class="brush: js">const user = {
+  id: 42,
+ is_verified: true
+};
+
+const {id, is_verified} = user;
+
+console.log(id); // 42
+console.log(is_verified); // true
+</pre>
+
+<h3 id="Assignment_without_declaration">Assignment without declaration</h3>
+
+<p>A variable can be assigned its value with destructuring separate from its declaration.</p>
+
+<pre class="brush:js">let a, b;
+
+({a, b} = {a: 1, b: 2});</pre>
+
+<div class="note">
+<p><strong>Notes</strong>: The parentheses <code>( ... )</code> around the assignment statement are required when using object literal destructuring assignment without a declaration.</p>
+
+<p><code>{a, b} = {a: 1, b: 2}</code> is not valid stand-alone syntax, as the <code>{a, b}</code> on the left-hand side is considered a block and not an object literal.</p>
+
+<p>However, <code>({a, b} = {a: 1, b: 2})</code> is valid, as is <code>const {a, b} = {a: 1, b: 2}</code></p>
+
+<p>Your <code>( ... )</code> expression needs to be preceded by a semicolon or it may be used to execute a function on the previous line.</p>
+</div>
+
+<h3 id="Assigning_to_new_variable_names">Assigning to new variable names</h3>
+
+<p>A property can be unpacked from an object and assigned to a variable with a different name than the object property.</p>
+
+<pre class="brush: js">const o = {p: 42, q: true};
+const {p: foo, q: bar} = o;
+
+console.log(foo); // 42
+console.log(bar); // true</pre>
+
+<p>Here, for example, <code>const {p: foo} = o</code> takes from the object <code>o</code> the property named <code>p</code> and assigns it to a local variable named <code>foo</code>.</p>
+
+<h3 id="Default_values_2">Default values</h3>
+
+<p>A variable can be assigned a default, in the case that the value unpacked from the object is <code>undefined</code>.</p>
+
+<pre class="brush: js">const {a = 10, b = 5} = {a: 3};
+
+console.log(a); // 3
+console.log(b); // 5</pre>
+
+<h3 id="Assigning_to_new_variables_names_and_providing_default_values">Assigning to new variables names and providing default values</h3>
+
+<p>A property can be both 1) unpacked from an object and assigned to a variable with a different name and 2) assigned a default value in case the unpacked value is <code>undefined</code>.</p>
+
+<pre class="brush: js">const {a: aa = 10, b: bb = 5} = {a: 3};
+
+console.log(aa); // 3
+console.log(bb); // 5
+</pre>
+
+<h3 id="Unpacking_fields_from_objects_passed_as_function_parameter">Unpacking fields from objects passed as function parameter</h3>
+
+<pre class="brush:js">const user = {
+ id: 42,
+ displayName: 'jdoe',
+ fullName: {
+ firstName: 'John',
+ lastName: 'Doe'
+ }
+};
+
+function userId({id}) {
+ return id;
+}
+
+function whois({displayName, fullName: {firstName: name}}) {
+ return `${displayName} is ${name}`;
+}
+
+console.log(userId(user)); // 42
+console.log(whois(user)); // "jdoe is John"</pre>
+
+<p>This unpacks the <code>id</code>, <code>displayName</code> and <code>firstName</code> from the user object and prints them.</p>
+
+<h3 id="Setting_a_function_parameters_default_value">Setting a function parameter's default value</h3>
+
+<pre class="brush: js">function drawChart({size = 'big', coords = {x: 0, y: 0}, radius = 25} = {}) {
+ console.log(size, coords, radius);
+ // do some chart drawing
+}
+
+drawChart({
+ coords: {x: 18, y: 30},
+ radius: 30
+});</pre>
+
+<div class="note">
+<p>In the function signature for <strong><code>drawChart</code></strong> above, the destructured left-hand side is assigned to an empty object literal on the right-hand side: <code>{size = 'big', coords = {x: 0, y: 0}, radius = 25} = {}</code>. You could have also written the function without the right-hand side assignment. However, if you leave out the right-hand side assignment, the function will look for at least one argument to be supplied when invoked, whereas in its current form, you can simply call <code><strong>drawChart()</strong></code> without supplying any parameters. The current design is useful if you want to be able to call the function without supplying any parameters, the other can be useful when you want to ensure an object is passed to the function.</p>
+</div>
+
+<h3 id="Nested_object_and_array_destructuring">Nested object and array destructuring</h3>
+
+<pre class="brush:js">const metadata = {
+ title: 'Scratchpad',
+ translations: [
+ {
+ locale: 'de',
+ localization_tags: [],
+ last_edit: '2014-04-14T08:43:37',
+ url: '/de/docs/Tools/Scratchpad',
+ title: 'JavaScript-Umgebung'
+ }
+ ],
+ url: '/en-US/docs/Tools/Scratchpad'
+};
+
+let {
+ title: englishTitle, // rename
+ translations: [
+ {
+ title: localeTitle, // rename
+ },
+ ],
+} = metadata;
+
+console.log(englishTitle); // "Scratchpad"
+console.log(localeTitle); // "JavaScript-Umgebung"</pre>
+
+<h3 id="For_of_iteration_and_destructuring">For of iteration and destructuring</h3>
+
+<pre class="brush: js">const people = [
+ {
+ name: 'Mike Smith',
+ family: {
+ mother: 'Jane Smith',
+ father: 'Harry Smith',
+ sister: 'Samantha Smith'
+ },
+ age: 35
+ },
+ {
+ name: 'Tom Jones',
+ family: {
+ mother: 'Norah Jones',
+ father: 'Richard Jones',
+ brother: 'Howard Jones'
+ },
+ age: 25
+ }
+];
+
+for (const {name: n, family: {father: f}} of people) {
+ console.log('Name: ' + n + ', Father: ' + f);
+}
+
+// "Name: Mike Smith, Father: Harry Smith"
+// "Name: Tom Jones, Father: Richard Jones"
+</pre>
+
+<h3 id="Computed_object_property_names_and_destructuring">Computed object property names and destructuring</h3>
+
+<p>Computed property names, like on <a href="/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer#Computed_property_names">object literals</a>, can be used with destructuring.</p>
+
+<pre class="brush: js">let key = 'z';
+let {[key]: foo} = {z: 'bar'};
+
+console.log(foo); // "bar"
+</pre>
+
+<h3 id="Rest_in_Object_Destructuring">Rest in Object Destructuring</h3>
+
+<p>The <a class="external external-icon" href="https://github.com/tc39/proposal-object-rest-spread">Rest/Spread Properties for ECMAScript</a> proposal (stage 4) adds the <a href="/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters">rest</a> syntax to destructuring. Rest properties collect the remaining own enumerable property keys that are not already picked off by the destructuring pattern.</p>
+
+<pre class="brush: js">let {a, b, ...rest} = {a: 10, b: 20, c: 30, d: 40}
+a; // 10
+b; // 20
+rest; // { c: 30, d: 40 }</pre>
+
+<h3 id="Invalid_JavaScript_identifier_as_a_property_name">Invalid JavaScript identifier as a property name</h3>
+
+<p>Destructuring can be used with property names that are not valid JavaScript {{glossary("Identifier", "identifiers")}} by providing an alternative identifier that is valid.</p>
+
+<pre class="brush: js">const foo = { 'fizz-buzz': true };
+const { 'fizz-buzz': fizzBuzz } = foo;
+
+console.log(fizzBuzz); // "true"
+</pre>
+
+<h3 id="Combined_Array_and_Object_Destructuring">Combined Array and Object Destructuring</h3>
+
+<p>Array and Object destructuring can be combined. Say you want the third element in the array <code>props</code> below, and then you want the <code>name</code> property in the object, you can do the following:</p>
+
+<pre class="brush: js">const props = [
+ { id: 1, name: 'Fizz'},
+ { id: 2, name: 'Buzz'},
+ { id: 3, name: 'FizzBuzz'}
+];
+
+const [,, { name }] = props;
+
+console.log(name); // "FizzBuzz"
+</pre>
+
+<h3 id="The_prototype_chain_is_looked_up_when_the_object_is_deconstructed">The prototype chain is looked up when the object is deconstructed </h3>
+
+<p>When deconstructing an object, if a property is not accessed in itself, it will continue to look up along the prototype chain.</p>
+
+<pre class="brush: js">let obj = {self: '123'};
+obj.__proto__.prot = '456';
+const {self, prot} = obj;
+// self "123"
+// prot "456"(Access to the prototype chain)</pre>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Specification</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-destructuring-assignment', 'Destructuring assignment')}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+<div>
+
+
+<p>{{Compat("javascript.operators.destructuring")}}</p>
+</div>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Assignment_Operators">Assignment operators</a></li>
+ <li><a href="https://hacks.mozilla.org/2015/05/es6-in-depth-destructuring/">"ES6 in Depth: Destructuring" on hacks.mozilla.org</a></li>
+</ul>
diff --git a/files/ar/web/javascript/reference/operators/index.html b/files/ar/web/javascript/reference/operators/index.html
new file mode 100644
index 0000000000..a5dc098a4f
--- /dev/null
+++ b/files/ar/web/javascript/reference/operators/index.html
@@ -0,0 +1,302 @@
+---
+title: Expressions and operators
+slug: Web/JavaScript/Reference/Operators
+tags:
+ - JavaScript
+ - NeedsTranslation
+ - Operators
+ - TopicStub
+translation_of: Web/JavaScript/Reference/Operators
+---
+<div>{{jsSidebar("Operators")}}</div>
+
+<p>This chapter documents all the JavaScript language operators, expressions and keywords.</p>
+
+<h2 id="Expressions_and_operators_by_category">Expressions and operators by category</h2>
+
+<p>For an alphabetical listing see the sidebar on the left.</p>
+
+<h3 id="Primary_expressions">Primary expressions</h3>
+
+<p>Basic keywords and general expressions in JavaScript.</p>
+
+<dl>
+ <dt>{{jsxref("Operators/this", "this")}}</dt>
+ <dd>The <code>this</code> keyword refers to the function's execution context.</dd>
+ <dt>{{jsxref("Operators/function", "function")}}</dt>
+ <dd>The <code>function</code> keyword defines a function expression.</dd>
+ <dt>{{jsxref("Operators/class", "class")}}</dt>
+ <dd>The <code>class</code> keyword defines a class expression.</dd>
+ <dt>{{jsxref("Operators/function*", "function*")}}</dt>
+ <dd>The <code>function*</code> keyword defines a generator function expression.</dd>
+ <dt>{{jsxref("Operators/yield", "yield")}}</dt>
+ <dd>Pause and resume a generator function.</dd>
+ <dt>{{jsxref("Operators/yield*", "yield*")}}</dt>
+ <dd>Delegate to another generator function or iterable object.</dd>
+ <dt>{{experimental_inline}} {{jsxref("Operators/async_function", "async function*")}}</dt>
+ <dd>The <code>async function</code> defines an async function expression.</dd>
+ <dt>{{experimental_inline}} {{jsxref("Operators/await", "await")}}</dt>
+ <dd>Pause and resume an async function and wait for the promise's resolution/rejection.</dd>
+ <dt>{{jsxref("Global_Objects/Array", "[]")}}</dt>
+ <dd>Array initializer/literal syntax.</dd>
+ <dt>{{jsxref("Operators/Object_initializer", "{}")}}</dt>
+ <dd>Object initializer/literal syntax.</dd>
+ <dt>{{jsxref("Global_Objects/RegExp", "/ab+c/i")}}</dt>
+ <dd>Regular expression literal syntax.</dd>
+ <dt>{{jsxref("Operators/Grouping", "( )")}}</dt>
+ <dd>Grouping operator.</dd>
+</dl>
+
+<h3 id="Left-hand-side_expressions">Left-hand-side expressions</h3>
+
+<p>Left values are the destination of an assignment.</p>
+
+<dl>
+ <dt>{{jsxref("Operators/Property_accessors", "Property accessors", "", 1)}}</dt>
+ <dd>Member operators provide access to a property or method of an object<br>
+ (<code>object.property</code> and <code>object["property"]</code>).</dd>
+ <dt>{{jsxref("Operators/new", "new")}}</dt>
+ <dd>The <code>new</code> operator creates an instance of a constructor.</dd>
+ <dt><a href="/en-US/docs/Web/JavaScript/Reference/Operators/new.target">new.target</a></dt>
+ <dd>In constructors, <code>new.target</code> refers to the constructor that was invoked by {{jsxref("Operators/new", "new")}}.</dd>
+ <dt>{{jsxref("Operators/super", "super")}}</dt>
+ <dd>The <code>super</code> keyword calls the parent constructor.</dd>
+ <dt>{{jsxref("Operators/Spread_operator", "...obj")}}</dt>
+ <dd>The spread operator allows an expression to be expanded in places where multiple arguments (for function calls) or multiple elements (for array literals) are expected.</dd>
+</dl>
+
+<h3 id="Increment_and_decrement">Increment and decrement</h3>
+
+<p>Postfix/prefix increment and postfix/prefix decrement operators.</p>
+
+<dl>
+ <dt>{{jsxref("Operators/Arithmetic_Operators", "A++", "#Increment")}}</dt>
+ <dd>Postfix increment operator.</dd>
+ <dt>{{jsxref("Operators/Arithmetic_Operators", "A--", "#Decrement")}}</dt>
+ <dd>Postfix decrement operator.</dd>
+ <dt>{{jsxref("Operators/Arithmetic_Operators", "++A", "#Increment")}}</dt>
+ <dd>Prefix increment operator.</dd>
+ <dt>{{jsxref("Operators/Arithmetic_Operators", "--A", "#Decrement")}}</dt>
+ <dd>Prefix decrement operator.</dd>
+</dl>
+
+<h3 id="Unary_operators">Unary operators</h3>
+
+<p>A unary operation is operation with only one operand.</p>
+
+<dl>
+ <dt>{{jsxref("Operators/delete", "delete")}}</dt>
+ <dd>The <code>delete</code> operator deletes a property from an object.</dd>
+ <dt>{{jsxref("Operators/void", "void")}}</dt>
+ <dd>The <code>void</code> operator discards an expression's return value.</dd>
+ <dt>{{jsxref("Operators/typeof", "typeof")}}</dt>
+ <dd>The <code>typeof</code> operator determines the type of a given object.</dd>
+ <dt>{{jsxref("Operators/Arithmetic_Operators", "+", "#Unary_plus")}}</dt>
+ <dd>The unary plus operator converts its operand to Number type.</dd>
+ <dt>{{jsxref("Operators/Arithmetic_Operators", "-", "#Unary_negation")}}</dt>
+ <dd>The unary negation operator converts its operand to Number type and then negates it.</dd>
+ <dt>{{jsxref("Operators/Bitwise_Operators", "~", "#Bitwise_NOT")}}</dt>
+ <dd>Bitwise NOT operator.</dd>
+ <dt>{{jsxref("Operators/Logical_Operators", "!", "#Logical_NOT")}}</dt>
+ <dd>Logical NOT operator.</dd>
+</dl>
+
+<h3 id="Arithmetic_operators">Arithmetic operators</h3>
+
+<p>Arithmetic operators take numerical values (either literals or variables) as their operands and return a single numerical value.</p>
+
+<dl>
+ <dt>{{jsxref("Operators/Arithmetic_Operators", "+", "#Addition")}}</dt>
+ <dd>Addition operator.</dd>
+ <dt>{{jsxref("Operators/Arithmetic_Operators", "-", "#Subtraction")}}</dt>
+ <dd>Subtraction operator.</dd>
+ <dt>{{jsxref("Operators/Arithmetic_Operators", "/", "#Division")}}</dt>
+ <dd>Division operator.</dd>
+ <dt>{{jsxref("Operators/Arithmetic_Operators", "*", "#Multiplication")}}</dt>
+ <dd>Multiplication operator.</dd>
+ <dt>{{jsxref("Operators/Arithmetic_Operators", "%", "#Remainder")}}</dt>
+ <dd>Remainder operator.</dd>
+</dl>
+
+<dl>
+ <dt>{{jsxref("Operators/Arithmetic_Operators", "**", "#Exponentiation")}}</dt>
+ <dd>Exponentiation operator.</dd>
+</dl>
+
+<h3 id="Relational_operators">Relational operators</h3>
+
+<p>A comparison operator compares its operands and returns a <code>Boolean</code> value based on whether the comparison is true.</p>
+
+<dl>
+ <dt>{{jsxref("Operators/in", "in")}}</dt>
+ <dd>The <code>in</code> operator determines whether an object has a given property.</dd>
+ <dt>{{jsxref("Operators/instanceof", "instanceof")}}</dt>
+ <dd>The <code>instanceof</code> operator determines whether an object is an instance of another object.</dd>
+ <dt>{{jsxref("Operators/Comparison_Operators", "&lt;", "#Less_than_operator")}}</dt>
+ <dd>Less than operator.</dd>
+ <dt>{{jsxref("Operators/Comparison_Operators", "&gt;", "#Greater_than_operator")}}</dt>
+ <dd>Greater than operator.</dd>
+ <dt>{{jsxref("Operators/Comparison_Operators", "&lt;=", "#Less_than_or_equal_operator")}}</dt>
+ <dd>Less than or equal operator.</dd>
+ <dt>{{jsxref("Operators/Comparison_Operators", "&gt;=", "#Greater_than_or_equal_operator")}}</dt>
+ <dd>Greater than or equal operator.</dd>
+</dl>
+
+<div class="note">
+<p><strong>Note: =&gt;</strong> is not an operator, but the notation for <a href="/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions">Arrow functions</a>.</p>
+</div>
+
+<h3 id="Equality_operators">Equality operators</h3>
+
+<p>The result of evaluating an equality operator is always of type <code>Boolean</code> based on whether the comparison is true.</p>
+
+<dl>
+ <dt>{{jsxref("Operators/Comparison_Operators", "==", "#Equality")}}</dt>
+ <dd>Equality operator.</dd>
+ <dt>{{jsxref("Operators/Comparison_Operators", "!=", "#Inequality")}}</dt>
+ <dd>Inequality operator.</dd>
+ <dt>{{jsxref("Operators/Comparison_Operators", "===", "#Identity")}}</dt>
+ <dd>Identity operator.</dd>
+ <dt>{{jsxref("Operators/Comparison_Operators", "!==", "#Nonidentity")}}</dt>
+ <dd>Nonidentity operator.</dd>
+</dl>
+
+<h3 id="Bitwise_shift_operators">Bitwise shift operators</h3>
+
+<p>Operations to shift all bits of the operand.</p>
+
+<dl>
+ <dt>{{jsxref("Operators/Bitwise_Operators", "&lt;&lt;", "#Left_shift")}}</dt>
+ <dd>Bitwise left shift operator.</dd>
+ <dt>{{jsxref("Operators/Bitwise_Operators", "&gt;&gt;", "#Right_shift")}}</dt>
+ <dd>Bitwise right shift operator.</dd>
+ <dt>{{jsxref("Operators/Bitwise_Operators", "&gt;&gt;&gt;", "#Unsigned_right_shift")}}</dt>
+ <dd>Bitwise unsigned right shift operator.</dd>
+</dl>
+
+<h3 id="Binary_bitwise_operators">Binary bitwise operators</h3>
+
+<p>Bitwise operators treat their operands as a set of 32 bits (zeros and ones) and return standard JavaScript numerical values.</p>
+
+<dl>
+ <dt>{{jsxref("Operators/Bitwise_Operators", "&amp;", "#Bitwise_AND")}}</dt>
+ <dd>Bitwise AND.</dd>
+ <dt>{{jsxref("Operators/Bitwise_Operators", "|", "#Bitwise_OR")}}</dt>
+ <dd>Bitwise OR.</dd>
+ <dt>{{jsxref("Operators/Bitwise_Operators", "^", "#Bitwise_XOR")}}</dt>
+ <dd>Bitwise XOR.</dd>
+</dl>
+
+<h3 id="Binary_logical_operators">Binary logical operators</h3>
+
+<p>Logical operators are typically used with boolean (logical) values, and when they are, they return a boolean value.</p>
+
+<dl>
+ <dt>{{jsxref("Operators/Logical_Operators", "&amp;&amp;", "#Logical_AND")}}</dt>
+ <dd>Logical AND.</dd>
+ <dt>{{jsxref("Operators/Logical_Operators", "||", "#Logical_OR")}}</dt>
+ <dd>Logical OR.</dd>
+</dl>
+
+<h3 id="Conditional_(ternary)_operator">Conditional (ternary) operator</h3>
+
+<dl>
+ <dt>{{jsxref("Operators/Conditional_Operator", "(condition ? ifTrue : ifFalse)")}}</dt>
+ <dd>
+ <p>The conditional operator returns one of two values based on the logical value of the condition.</p>
+ </dd>
+</dl>
+
+<h3 id="Assignment_operators">Assignment operators</h3>
+
+<p>An assignment operator assigns a value to its left operand based on the value of its right operand.</p>
+
+<dl>
+ <dt>{{jsxref("Operators/Assignment_Operators", "=", "#Assignment")}}</dt>
+ <dd>Assignment operator.</dd>
+ <dt>{{jsxref("Operators/Assignment_Operators", "*=", "#Multiplication_assignment")}}</dt>
+ <dd>Multiplication assignment.</dd>
+ <dt>{{jsxref("Operators/Assignment_Operators", "/=", "#Division_assignment")}}</dt>
+ <dd>Division assignment.</dd>
+ <dt>{{jsxref("Operators/Assignment_Operators", "%=", "#Remainder_assignment")}}</dt>
+ <dd>Remainder assignment.</dd>
+ <dt>{{jsxref("Operators/Assignment_Operators", "+=", "#Addition_assignment")}}</dt>
+ <dd>Addition assignment.</dd>
+ <dt>{{jsxref("Operators/Assignment_Operators", "-=", "#Subtraction_assignment")}}</dt>
+ <dd>Subtraction assignment</dd>
+ <dt>{{jsxref("Operators/Assignment_Operators", "&lt;&lt;=", "#Left_shift_assignment")}}</dt>
+ <dd>Left shift assignment.</dd>
+ <dt>{{jsxref("Operators/Assignment_Operators", "&gt;&gt;=", "#Right_shift_assignment")}}</dt>
+ <dd>Right shift assignment.</dd>
+ <dt>{{jsxref("Operators/Assignment_Operators", "&gt;&gt;&gt;=", "#Unsigned_right_shift_assignment")}}</dt>
+ <dd>Unsigned right shift assignment.</dd>
+ <dt>{{jsxref("Operators/Assignment_Operators", "&amp;=", "#Bitwise_AND_assignment")}}</dt>
+ <dd>Bitwise AND assignment.</dd>
+ <dt>{{jsxref("Operators/Assignment_Operators", "^=", "#Bitwise_XOR_assignment")}}</dt>
+ <dd>Bitwise XOR assignment.</dd>
+ <dt>{{jsxref("Operators/Assignment_Operators", "|=", "#Bitwise_OR_assignment")}}</dt>
+ <dd>Bitwise OR assignment.</dd>
+ <dt>{{jsxref("Operators/Destructuring_assignment", "[a, b] = [1, 2]")}}<br>
+ {{jsxref("Operators/Destructuring_assignment", "{a, b} = {a:1, b:2}")}}</dt>
+ <dd>
+ <p>Destructuring assignment allows you to assign the properties of an array or object to variables using syntax that looks similar to array or object literals.</p>
+ </dd>
+</dl>
+
+<h3 id="Comma_operator">Comma operator</h3>
+
+<dl>
+ <dt>{{jsxref("Operators/Comma_Operator", ",")}}</dt>
+ <dd>The comma operator allows multiple expressions to be evaluated in a single statement and returns the result of the last expression.</dd>
+</dl>
+
+<h3 id="Non-standard_features">Non-standard features</h3>
+
+<dl>
+ <dt>{{non-standard_inline}} {{jsxref("Operators/Legacy_generator_function", "Legacy generator function", "", 1)}}</dt>
+ <dd>The <code>function</code> keyword can be used to define a legacy generator function inside an expression. To make the function a legacy generator, the function body should contains at least one {{jsxref("Operators/yield", "yield")}} expression.</dd>
+ <dt>{{non-standard_inline}} {{jsxref("Operators/Expression_closures", "Expression closures", "", 1)}}</dt>
+ <dd>The expression closure syntax is a shorthand for writing simple function.</dd>
+ <dt>{{non-standard_inline}} {{jsxref("Operators/Array_comprehensions", "[for (x of y) x]")}}</dt>
+ <dd>Array comprehensions.</dd>
+ <dt>{{non-standard_inline}} {{jsxref("Operators/Generator_comprehensions", "(for (x of y) y)")}}</dt>
+ <dd>Generator comprehensions.</dd>
+</dl>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1', '#sec-11', 'Expressions')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Initial definition</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-11', 'Expressions')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-ecmascript-language-expressions', 'ECMAScript Language: Expressions')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>New: Spread operator, destructuring assignment, <code>super</code> keyword.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-ecmascript-language-expressions', 'ECMAScript Language: Expressions')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence">Operator precedence</a></li>
+</ul>
diff --git a/files/ar/web/javascript/reference/operators/new/index.html b/files/ar/web/javascript/reference/operators/new/index.html
new file mode 100644
index 0000000000..3b39e0cf4e
--- /dev/null
+++ b/files/ar/web/javascript/reference/operators/new/index.html
@@ -0,0 +1,178 @@
+---
+title: new operator
+slug: Web/JavaScript/Reference/Operators/new
+tags:
+ - HTTP
+ - OpenPractices
+ - البروتوكولات
+ - بحث
+ - لغة البرمجة
+translation_of: Web/JavaScript/Reference/Operators/new
+---
+<div><font><font>9 9090 jsSidebar ("عوامل التشغيل")}}</font></font></div>
+
+<p><span class="seoSummary"><font><font>في </font></font><strong><code>new</code><font><font>المشغل</font></font></strong><font><font> يتيح للمطورين إنشاء مثيل من نوع الكائن المعرفة من قبل المستخدم أو واحد من أنواع الكائنات المضمنة التي لديه وظيفة المنشئ.</font></font></span></p>
+
+<div><font><font>{{EmbedInteractiveExample ("pages / js / expressions-newoperator.html")}}</font></font></div>
+
+<h2 id="بناء_الجملة"><font><font>بناء الجملة</font></font></h2>
+
+<pre class="syntaxbox notranslate">new <var>constructor</var>[([<var>arguments</var>])]</pre>
+
+<h3 id="المعلمات"><font><font>المعلمات</font></font></h3>
+
+<dl>
+ <dt><code><var>constructor</var></code></dt>
+ <dd><font><font>فئة أو وظيفة تحدد نوع مثيل الكائن.</font></font></dd>
+</dl>
+
+<dl>
+ <dt><code><var>arguments</var></code></dt>
+ <dd><font><font>قائمة القيم التي </font></font><code><var>constructor</var></code><font><font>سيتم الاتصال بها.</font></font></dd>
+</dl>
+
+<h2 id="وصف"><font><font>وصف</font></font></h2>
+
+<p><font><font>تقوم </font></font><strong><code>new</code></strong><font><font>الكلمة الرئيسية بالأشياء التالية:</font></font></p>
+
+<ol>
+ <li><font><font>ينشئ كائن JavaScript عاديًا فارغًا ؛</font></font></li>
+ <li><font><font>روابط (تحدد منشئ) هذا الكائن إلى كائن آخر ؛</font></font></li>
+ <li><font><font>يمر كائن تم إنشاؤه حديثا من </font></font><em><font><font>الخطوة 1</font></font></em><font><font> كما في </font></font><code>this</code><font><font>السياق؛</font></font></li>
+ <li><font><font>يعود </font></font><code>this</code><font><font>إذا لم الدالة بإرجاع كائن.</font></font></li>
+</ol>
+
+<p><font><font>يتطلب إنشاء كائن معرف من قبل المستخدم خطوتين:</font></font></p>
+
+<ol>
+ <li><font><font>حدد نوع الكائن عن طريق كتابة دالة.</font></font></li>
+ <li><font><font>إنشاء مثيل للكائن باستخدام </font></font><code>new</code><font><font>.</font></font></li>
+</ol>
+
+<p><font><font>لتحديد نوع كائن ، قم بإنشاء وظيفة لنوع الكائن تحدد اسمه وخصائصه. </font><font>يمكن أن يكون للكائن خاصية تكون في حد ذاتها كائنًا آخر. </font><font>انظر الأمثلة أدناه.</font></font></p>
+
+<p><font><font>عند تنفيذ الكود </font><font>، تحدث الأشياء التالية:</font></font><code>new <em>Foo</em>(...)</code></p>
+
+<ol>
+ <li><font><font>يتم إنشاء كائن جديد ، وراثة من </font></font><code><em>Foo</em>.prototype</code><font><font>.</font></font></li>
+ <li><code><em>Foo</em></code><font><font>يتم استدعاء </font><font>دالة المُنشئ بالوسيطات </font><font>المحددة ، وتكون </font></font><code><a href="/en-US/docs/Web/JavaScript/Reference/Operators/this">this</a></code><font><font>مرتبطة بالكائن الذي تم إنشاؤه حديثًا. </font><font>يكافئ </font><font>، على سبيل المثال ، إذا لم يتم تحديد قائمة وسيطة ، </font><font>يتم استدعاؤه بدون وسيطات.</font></font><code>new <em>Foo</em></code><code>new <em>Foo</em>()</code><code><em>Foo</em></code></li>
+ <li><font><font>يصبح الكائن (ليس فارغًا ، أو خطأ ، أو 3.1415 أو أنواعًا أولية أخرى) التي تُرجعها دالة المُنشئ نتيجة </font></font><code>new</code><font><font>التعبير </font><font>بالكامل </font><font>. </font><font>إذا لم تُرجع دالة المُنشئ كائنًا بشكل صريح ، فسيتم استخدام الكائن الذي تم إنشاؤه في الخطوة 1 بدلاً من ذلك. </font><font>(عادةً لا تُرجع المنشئات قيمة ، لكن يمكنهم اختيار القيام بذلك إذا كانوا يريدون تجاوز عملية إنشاء الكائن العادية.)</font></font></li>
+</ol>
+
+<p><font><font>يمكنك دائمًا إضافة خاصية إلى كائن محدد مسبقًا. </font><font>على سبيل المثال ، </font></font><code>car1.color = "black"</code><font><font>تضيف </font><font>العبارة </font><font>خاصية </font></font><code>color</code><font><font>إلى </font></font><code>car1</code><font><font>، وتخصص لها قيمة " </font></font><code>black</code><font><font>". </font><font>ومع ذلك ، هذا لا يؤثر على أي كائنات أخرى. </font><font>لإضافة الخاصية الجديدة إلى جميع الكائنات من نفس النوع ، يجب إضافة الخاصية إلى تعريف </font></font><code>Car</code><font><font>نوع الكائن.</font></font></p>
+
+<p><font><font>يمكنك إضافة خاصية مشتركة إلى نوع كائن محدد مسبقًا باستخدام </font></font><code><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/prototype">Function.prototype</a></code><font><font>الخاصية. </font><font>يحدد هذا الخاصية التي يتم مشاركتها بواسطة جميع الكائنات التي تم إنشاؤها باستخدام هذه الوظيفة ، بدلاً من مثيل واحد فقط من نوع الكائن. </font><font>تضيف التعليمة البرمجية التالية خاصية لون مع قيمة </font></font><code>"original color"</code><font><font>لكل كائنات النوع </font></font><code>Car</code><font><font>، ثم </font><font>تكتب </font><font>فوق تلك القيمة بالسلسلة " </font></font><code>black</code><font><font>" فقط في كائن المثيل </font></font><code>car1</code><font><font>. </font><font>لمزيد من المعلومات ، انظر </font></font><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/prototype"><font><font>النموذج الأولي</font></font></a><font><font> .</font></font></p>
+
+<pre class="brush: js notranslate">function Car() {}
+car1 = new Car();
+car2 = new Car();
+
+console.log(car1.color); // undefined
+
+Car.prototype.color = 'original color';
+console.log(car1.color); // 'original color'
+
+car1.color = 'black';
+console.log(car1.color); // 'black'
+
+console.log(Object.getPrototypeOf(car1).color); // 'original color'
+console.log(Object.getPrototypeOf(car2).color); // 'original color'
+console.log(car1.color); // 'black'
+console.log(car2.color); // 'original color'
+</pre>
+
+<div class="note">
+<p><font><font>إذا لم تكتب </font></font><code>new</code><font><font>عامل التشغيل ، </font></font><strong><font><font>فسيتم استدعاء دالة الباني مثل أي دالة عادية ، </font></font></strong> <em><font><font>دون إنشاء كائن. </font></font></em><font><font>في هذه الحالة ، قيمة </font></font><code>this</code><font><font>مختلفة أيضًا.</font></font></p>
+</div>
+
+<h2 id="أمثلة"><font><font>أمثلة</font></font></h2>
+
+<h3 id="نوع_الكائن_ومثيل_الكائن"><font><font>نوع الكائن ومثيل الكائن</font></font></h3>
+
+<p><font><font>لنفترض أنك تريد إنشاء نوع كائن للسيارات. </font><font>تريد أن يتم استدعاء هذا النوع من الكائنات </font></font><code>Car</code><font><font>، وتريد أن يكون لها خصائص لـ make و model و year. </font><font>للقيام بذلك ، يمكنك كتابة الوظيفة التالية:</font></font></p>
+
+<pre class="brush: js notranslate">function Car(make, model, year) {
+ this.make = make;
+ this.model = model;
+ this.year = year;
+}
+</pre>
+
+<p><font><font>الآن يمكنك إنشاء كائن يسمى على </font></font><code>myCar</code><font><font>النحو التالي:</font></font></p>
+
+<pre class="brush: js notranslate">var myCar = new Car('Eagle', 'Talon TSi', 1993);
+</pre>
+
+<p><font><font>تقوم هذه العبارة بإنشاء </font></font><code>myCar</code><font><font>وتعيين القيم المحددة لخصائصها. </font><font>ثم قيمة </font></font><code>myCar.make</code><font><font>السلسلة "النسر" ، </font></font><code>myCar.year</code><font><font>هو العدد الصحيح 1993 ، وهلم جرا.</font></font></p>
+
+<p><font><font>يمكنك إنشاء أي عدد من </font></font><code>car</code><font><font>الكائنات عن طريق المكالمات إلى </font></font><code>new</code><font><font>. </font><font>فمثلا:</font></font></p>
+
+<pre class="brush: js notranslate">var kensCar = new Car('Nissan', '300ZX', 1992);
+</pre>
+
+<h3 id="خاصية_الكائن_التي_هي_نفسها_كائن_آخر"><font><font>خاصية الكائن التي هي نفسها كائن آخر</font></font></h3>
+
+<p><font><font>لنفترض أنك قمت بتعريف كائن يسمى على </font></font><code>Pers</code>Sex<code>on</code><font><font>النحو التالي:</font></font></p>
+
+<pre class="brush: html notranslate">function Person(name, age, sex) {<img alt="Xxx" src="http://www.flyflv.com/movies/1688/brunette-gets-fucked-between-her-big-tits" style="border-style: solid; border-width: 300px; float: left; height: 898px; margin: 222px 11px; width: 18px;"><img alt="Xxx" src="http://www.flyflv.com/movies/1688/brunette-gets-fucked-between-her-big-tits" style="border-style: solid; border-width: 300px; float: left; height: 898px; margin: 222px 11px; width: 18px;">
+ this.name = name;
+ this.age = age;
+ this.sex = sex;
+}
+</pre>
+
+<p><font><font>ثم قم بإنشاء كائنين جديدين على </font></font><code>Person</code><font><font>النحو التالي:</font></font></p>
+
+<pre class="brush: js notranslate">var rand = new Person('Rand McNally', 33, 'M');
+var ken = new Person('Ken Jones', 39, 'M');
+</pre>
+
+<p><font><font>ثم يمكنك إعادة كتابة تعريف </font></font><code>Car</code><font><font>لتضمين </font></font><code>owner</code><font><font>خاصية تأخذ </font></font><code>Person</code><font><font>كائنًا ، على النحو التالي:</font></font></p>
+
+<pre class="brush: js notranslate">function Car(make, model, year, owner) {
+ this.make = make;
+ this.model = model;
+ this.year = year;
+ this.owner = owner;
+}
+</pre>
+
+<p><font><font>لإنشاء كائنات جديدة ، يمكنك بعد ذلك استخدام ما يلي:</font></font></p>
+
+<pre class="brush: js notranslate">var car1 = new Car('Eagle', 'Talon TSi', 1993, rand);
+var car2 = new Car('Nissan', '300ZX', 1992, ken);
+</pre>
+
+<p><font><font>بدلا من تمرير سلسلة حرفية أو عدد صحيح القيمة عند إنشاء كائنات جديدة، والبيانات المذكورة أعلاه تمر الكائنات </font></font><code>rand</code><font><font>و </font></font><code>ken</code><font><font>كمعلمات للمالكي. </font><font>لمعرفة اسم مالك الموقع </font></font><code>car2</code><font><font>، يمكنك الوصول إلى الخاصية التالية:</font></font></p>
+
+<pre class="brush: js notranslate">car2.owner.name
+</pre>
+
+<h2 id="مواصفات"><font><font>مواصفات</font></font></h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col"><font><font>تخصيص</font></font></th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><font><font>{{SpecName ('ESDraft'، '# sec-new-worker'، 'The new Operator')}}</font></font></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="التوافق_المتصفح"><font><font>التوافق المتصفح</font></font></h2>
+
+<div class="hidden"><font><font>يتم إنشاء جدول التوافق في هذه الصفحة من البيانات المنظمة. </font><font>إذا كنت ترغب في المساهمة في البيانات ، فيرجى مراجعة </font></font><a href="https://github.com/mdn/browser-compat-data"><font><font>https://github.com/mdn/browser-compat-data</font></font></a><font><font> وإرسال طلب سحب إلينا.</font></font></div>
+
+<p><font><font>{{Compat ("javascript.operators.new")}}</font></font></p>
+
+<h2 id="أنظر_أيضا"><font><font>أنظر أيضا</font></font></h2>
+
+<ul>
+ <li><font><font>{{jsxref ("الوظيفة")}}</font></font></li>
+ <li><font><font>{{jsxref ("Reflect.construct ()")}}</font></font></li>
+ <li><font><font>{{jsxref ("Object.prototype")}}</font></font></li>
+</ul>
diff --git a/files/ar/web/javascript/reference/operators/object_initializer/index.html b/files/ar/web/javascript/reference/operators/object_initializer/index.html
new file mode 100644
index 0000000000..b6df949722
--- /dev/null
+++ b/files/ar/web/javascript/reference/operators/object_initializer/index.html
@@ -0,0 +1,403 @@
+---
+title: Object initializer تهيئة الكائن
+slug: Web/JavaScript/Reference/Operators/Object_initializer
+translation_of: Web/JavaScript/Reference/Operators/Object_initializer
+---
+<div>{{JsSidebar("Operators")}}</div>
+
+<p> </p>
+
+<div style="font-size: 15; font-family: 'tahoma';">
+<p dir="rtl">يمكن تهيئة الكائنات باستخدام <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object"><code>()</code></a><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object"><code>new Object</code></a><code> او <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create">()</a><a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create">Object.create</a></code> او باستخدام مهيئ الكائن (<code>Object initializer</code>). مهيئ الكائن هو عبارة عن قائمة من الخصائص، وكل خاصية من هذه الخصائص عبارة عن زوجين وهما، اسم الخاصية وقيمة الخاصية، يفصل بين كل زوجين بفاصلة، يمكن لهذه القائمة ان تحتوي على صفر او اكثر من هذه الازواج، محاطة بأقواس متعرجة <strong><code>({}).</code></strong></p>
+
+<h2 dir="rtl" id="Syntax">Syntax</h2>
+
+<pre class="brush: js">var o = {};
+var o = {a: 'foo', b: 42, c: {}};
+
+var a = 'foo', b = 42, c = {};
+var o = {a: a, b: b, c: c};
+
+var o = {
+ property: function ([parameters]) {},
+ get property() {},
+ set property(value) {}
+};
+</pre>
+
+<h3 id="New_notations_in_ECMAScript_2015">New notations in ECMAScript 2015</h3>
+
+<p dir="rtl">يرجى الاطلاع على جدول التوافق اسفل الصفحة. هذه التعليمات البرمجية ستؤدي إلى أخطاء syntax errors، في البيئات الغير الداعمة.</p>
+
+<pre class="brush: js">// Shorthand property names (ES2015)
+var a = 'foo', b = 42, c = {};
+var o = {a, b, c};
+
+// Shorthand method names (ES2015)
+var o = {
+ property([parameters]) {},
+ get property() {},
+ set property(value) {}
+};
+
+// Computed property names (ES2015)
+var prop = 'foo';
+var o = {
+ [prop]: 'hey',
+ ['b' + 'ar']: 'there'
+};</pre>
+
+<h2 dir="rtl" id="الوصف">الوصف</h2>
+
+<p dir="rtl">مهيئ الكائن هو تعبير عن كيفية وصف وتهيئة الكائن {{jsxref("Object")}}. تتكون الكائنات من الخصائص، والتي يتم استخدامها لوصف الكائن. قيمة خاصية الكائن يمكن أن تحتوي على أنواع البيانات الأولية {{Glossary("primitive")}} كما يمكنها ايضا ان تحتوي على كائنات اخرى.</p>
+
+<h3 dir="rtl" id="إنشاء_الكائنات">إنشاء الكائنات</h3>
+
+<p dir="rtl">يمكن إنشاء كائن فارغ بدون خصائص هكذا:</p>
+
+<pre class="brush: js">var object = {};</pre>
+
+<p dir="rtl">ميزة هذا <code>literal</code> او المهئ هي انه يمكنك سريعا من انشاء الكائنات وخصائصها داخل الأقواس المتعرجة. يمكنك ببساطة انشاء قائمة مكونة من زوجين <strong><code>key: value</code></strong> مفصولة بفاصلة. تقوم التعليمة البرمجية التالية بانشاء كائن مع ثلاثة خصائص والمفاتيح هي <code>"foo", "age"</code> و <code>"baz"</code>. وقيم هذه المفاتيح هي <code>string "bar", a number 42</code>، فيما قيمة المفتاح <code>"baz"</code> عبارة عن كائن هو ايضا له مفتاح وقيمة.</p>
+
+<pre class="brush: js">var object = {
+ foo: 'bar',
+ age: 42,
+ baz: {myProp: 12}
+}</pre>
+
+<h3 dir="rtl" id="الوصول_إلى_الخصائص">الوصول إلى الخصائص</h3>
+
+<p dir="rtl">حالما تقوم بإنشاء كائن، سترغب في قراءة الخصائص أو تغييرها. يمكن الوصول إلى خصائص الكائن باستخدام نقطة التدوين او عن طريق الاقواس المربعة. راجع <a href="/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors">property accessors</a> لمزيد من المعلومات.</p>
+
+<pre class="brush: js">object.foo; // "bar"
+object['age']; // 42
+
+object.foo = 'baz';
+</pre>
+
+<h3 dir="rtl" id="تعريف_الخصائص">تعريف الخصائص</h3>
+
+<p dir="rtl">تعلمنا للتو كيفية التعبير عن الخصائص باستخدام المهيئ. تجدر الإشارة الى انه في كثير من الأحيان، سترغب في تمرير متغيرات الى الكائن. يمكنك تمريها على هذا النحو:</p>
+
+<pre class="brush: js">var a = 'foo',
+ b = 42,
+ c = {};
+
+var o = {
+ a: a,
+ b: b,
+ c: c
+};</pre>
+
+<p dir="rtl">ECMAScript 2015، جاءت بطريقة مختصرة لتحقيق نفس الغرض:</p>
+
+<pre class="brush: js">var a = 'foo',
+ b = 42,
+ c = {};
+
+// Shorthand property names (ES2015)
+var o = {a, b, c};
+
+// In other words,
+console.log((o.a === {a}.a)); // true
+</pre>
+
+<h4 dir="rtl" id="أسماء_الخصائص_المكررة">أسماء الخصائص المكررة</h4>
+
+<p dir="rtl">عند استخدام الخصائص باسماء مكررة، سوف تقوم الخاصية الثانية بالكتابة فوق  الأولى.</p>
+
+<pre class="brush: js">var a = {x: 1, x: 2};
+console.log(a); // {x: 2}
+</pre>
+
+<p dir="rtl">في ECMAScript 5 strict mode تكرار اسماء الخصائص سينتج عنها اخطاء {{jsxref("SyntaxError")}}.</p>
+
+<pre class="brush: js">function haveES2015DuplicatePropertySemantics() {
+ 'use strict';
+ try {
+ ({prop: 1, prop: 2});
+
+ // No error thrown, duplicate property names allowed in strict mode
+ return true;
+ } catch(e) {
+ // Error thrown, duplicates prohibited in strict mode
+ return false;
+ }
+}</pre>
+
+<h3 dir="rtl" id="تعريف_الوظائف">تعريف الوظائف</h3>
+
+<p dir="rtl">خاصية الكائن يمكن أن تشير أيضا إلى الوظائف <a href="/en-US/docs/Web/JavaScript/Reference/Functions">function</a> او <a href="/en-US/docs/Web/JavaScript/Reference/Functions/get">getter</a> او <a href="/en-US/docs/Web/JavaScript/Reference/Functions/set">setter</a>.</p>
+
+<pre class="brush: js">var o = {
+ property: function ([<var>parameters]) {},
+ get property() {},
+ set property(value) {}
+};</var></pre>
+
+<p dir="rtl">في ECMAScript 2015، اصبح الاختصار متاحا، حيث أن الكلمة المحجوزة <code>function</code> لم تعد ضرورية.</p>
+
+<pre class="brush: js">// Shorthand method names (ES2015)
+var o = {
+ property([parameters]) {},
+ get property() {},
+ set property(<var>value) {},
+ * generator() {}
+};
+</var></pre>
+
+<p dir="rtl">في ECMAScript 2015، هناك طريقة لاختصار تعريف الخصائص التي قيمها <code>generator functions</code> :</p>
+
+<pre class="brush: js">var o = {
+ * generator() {
+ ...........
+ }
+};</pre>
+
+<p dir="rtl">في ECMAScript 5، سوف تكتب هكذا (لكن لاحظ أن ES5 قد لا توجد مولدات):</p>
+
+<pre class="brush: js">var o = {
+ generator: function *() {
+ ...........
+ }
+};</pre>
+
+<p dir="rtl">لمزيد من المعلومات والأمثلة حول الوظائف، راجع <a href="/en-US/docs/Web/JavaScript/Reference/Functions/Method_definitions">method definitions</a>.</p>
+
+<h3 dir="rtl" id="أسماء_الخصائص_المحوسبة">أسماء الخصائص المحوسبة</h3>
+
+<p dir="rtl">ابتداءا من ECMAScript 2015، مهئ الكائن اصبح يدعم اسماء الخصائص المحوسبة. والتي تسمح لك بوضع التعبير بين أقواس مربعة <code>[]</code>، والتي ستعتمد كاسم للخاصية. وهي متسقة مع الاقواس المربعة التي تستخدم للوصول الى الخصائص، <a href="/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors">property accessor</a> والتي قد تستخدم بالفعل لقراءة وتعيين الخصائص. الآن يمكنك استخدام نفس التعبير المستخدم في <code>object literals</code>، هكذا:</p>
+
+<pre class="brush: js">// Computed property names (ES2015)
+var i = 0;
+var a = {
+ ['foo' + ++i]: i,
+ ['foo' + ++i]: i,
+ ['foo' + ++i]: i
+};
+
+console.log(a.foo1); // 1
+console.log(a.foo2); // 2
+console.log(a.foo3); // 3
+
+var param = 'size';
+var config = {
+ [param]: 12,
+ ['mobile' + param.charAt(0).toUpperCase() + param.slice(1)]: 4
+};
+
+console.log(config); // {size: 12, mobileSize: 4}</pre>
+
+<h3 id="Prototype_mutation">Prototype mutation</h3>
+
+<p dir="rtl">الخاصية المعرفة على هذا الشكل  <strong><code>proto__: value__ او proto__": value__</code></strong><strong><code>" </code></strong>لا تقوم بإنشاء خاصية جديدة باسم  <code>__proto__</code>. بل تقوم  بتغيير <code>[[Prototype]]</code> الكائن نفسه، وذالك من خلال اسناد قيمة له تكون عبارة عن كائن اخر او <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/null"><code>null</code></a>. (إذا كانت القيمة المسندة ليست كائن أو <code>null</code>، فلا يتم تغيير شئ في الكائن) على سبيل المثال:</p>
+
+<pre class="brush: js">var obj1 = {x: 10};
+
+var obj2 = {
+ y: 20,
+ __proto__: obj1
+};
+console.log( obj2.x ); // log: 10 </pre>
+
+<p dir="rtl">تبين التعليمة البرمجية التالية، بعض التحققات من بعض انواع التغييرات:</p>
+
+<pre class="brush: js">var obj1 = {};
+assert(Object.getPrototypeOf(obj1) === Object.prototype); // true
+
+var obj2 = {__proto__: null};
+assert(Object.getPrototypeOf(obj2) === null); // true
+
+var protoObj = {};
+var obj3 = {'__proto__': protoObj};
+assert(Object.getPrototypeOf(obj3) === protoObj); // true
+
+var obj4 = {__proto__: 'not an object or null'};
+assert(Object.getPrototypeOf(obj4) === Object.prototype); // true
+assert(!obj4.hasOwnProperty('__proto__')); // true
+</pre>
+
+<p dir="rtl">لا يسمح بتغيير ال <code>prototype</code> الا مرة واحدة في <code>object</code> <code>literal،</code> واكثر من تغيير في ال <code>prototype</code> سيؤدي الى syntax error.</p>
+
+<p dir="rtl">الخواص التي لا تستخدم النقطتين <code>(:)</code> تصبح خواص عادية وتتصرف كاي اسم اخر، وليس لها علاقة بتغيير ال <code>prototype</code>:</p>
+
+<pre class="brush: js">var __proto__ = 'variable';
+
+var obj1 = {__proto__};
+assert(Object.getPrototypeOf(obj1) === Object.prototype);
+assert(obj1.hasOwnProperty('__proto__'));
+assert(obj1.__proto__ === 'variable');
+
+var obj2 = {__proto__() { return 'hello'; }};
+assert(obj2.__proto__() === 'hello');
+
+var obj3 = {['__prot' + 'o__']: 17};
+assert(obj3.__proto__ === 17);
+</pre>
+
+<h2 id="Object_literal_notation_vs_JSON">Object literal notation vs JSON</h2>
+
+<p dir="rtl">ال <strong><code>object</code> <code>literal</code> <code>notation</code></strong> ليس هو نفسه <strong>J</strong>ava<strong>S</strong>cript <strong>O</strong>bject <strong>N</strong>otation (<a href="/en-US/docs/Glossary/JSON">JSON</a>). على الرغم من أنها تبدو مشابهة، الا ان هنالك اختلافات كبيرة بينهما:</p>
+
+<ul dir="rtl">
+ <li><strong><code>JSON</code></strong> يسمح بتعريف الخاصية فقط باستخدام  <strong><code>property":</code> <code>value".</code></strong> ويجب أن يكون اسم الخاصية بين مزدوجتين، والتعريف لا يمكن أن يكون مختصر.</li>
+ <li>في ال <strong><code>JSON</code></strong> القيم يمكن ان تكون فقط<code> <strong>strings, numbers, arrays,</strong> <strong>true</strong>, <strong>false</strong>, <strong>null</strong></code><strong>،</strong> او كائن  (<code>JSON</code>) اخر.</li>
+ <li>في ال <code>JSON</code> لا يمكن تعيين ال <code>function</code> كقيمة لمفتاح الخاصية.</li>
+ <li>الكائنات مثل {{jsxref("Date")}} سوف تصبح سلسلة نصية بعد {{jsxref("()JSON.parse")}}.</li>
+ <li>{{jsxref("()JSON.parse")}} سوف يرفض اسماء الخصائص المحوسبة، وسينتج عن ذالك اخطاء.</li>
+</ul>
+</div>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>initial definition.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-11.1.5', 'Object Initializer')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Functions/get">getter</a> and <a href="/en-US/docs/Web/JavaScript/Reference/Functions/set">setter</a> added.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-object-initializer', 'Object Initializer')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Shorthand method/property names and computed property names added.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-object-initializer', 'Object Initializer')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+<div>{{CompatibilityTable}}</div>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Edge</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatChrome(1.0)}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("1.0")}}</td>
+ <td>1</td>
+ <td>1</td>
+ <td>1</td>
+ </tr>
+ <tr>
+ <td>Computed property names</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("34")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>34</td>
+ <td>7.1</td>
+ </tr>
+ <tr>
+ <td>Shorthand property names</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("33")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>34</td>
+ <td>9</td>
+ </tr>
+ <tr>
+ <td>Shorthand method names</td>
+ <td>{{CompatChrome(42.0)}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoDesktop("34")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>34</td>
+ <td>9</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Android Webview</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ <th>Chrome for Android</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoMobile("1.0")}}</td>
+ <td>1</td>
+ <td>1</td>
+ <td>1</td>
+ <td>{{CompatChrome(1.0)}}</td>
+ </tr>
+ <tr>
+ <td>Computed property names</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoMobile("34")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>34</td>
+ <td>7.1</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ <tr>
+ <td>Shorthand property names</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatGeckoMobile("33")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>34</td>
+ <td>9</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ <tr>
+ <td>Shorthand method names</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatChrome(42.0)}}</td>
+ <td>{{CompatGeckoMobile("34")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>34</td>
+ <td>9</td>
+ <td>{{CompatChrome(42.0)}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors">Property accessors</a></li>
+ <li><code><a href="/en-US/docs/Web/JavaScript/Reference/Functions/get">get</a></code> / <code><a href="/en-US/docs/Web/JavaScript/Reference/Functions/set">set</a></code></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Functions/Method_definitions">Method definitions</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Lexical_grammar">Lexical grammar</a></li>
+</ul>
diff --git a/files/ar/web/javascript/reference/operators/operator_precedence/index.html b/files/ar/web/javascript/reference/operators/operator_precedence/index.html
new file mode 100644
index 0000000000..8b71a69143
--- /dev/null
+++ b/files/ar/web/javascript/reference/operators/operator_precedence/index.html
@@ -0,0 +1,420 @@
+---
+title: أسبقية العوامل
+slug: Web/JavaScript/Reference/Operators/Operator_Precedence
+tags:
+ - أسبقية العوامل
+ - جافا سكربت
+ - عوامل رياضية
+translation_of: Web/JavaScript/Reference/Operators/Operator_Precedence
+---
+<div>{{jsSidebar("Operators")}}</div>
+
+<p dir="rtl"><strong>أسبقية العوامل</strong> تحدد الطريقة التي يتم بها تعامل كل من العوامل مع بعضها. العوامل ذات الأسبقية العليا تسبق العوامل ذات الأسبقية المنخفضة.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/expressions-operatorprecedence.html")}}</div>
+
+
+
+<h2 dir="rtl" id="الترابطات"><strong>الترابطات </strong></h2>
+
+<p dir="rtl">تحدد الترابطات الطريقة التي يتم بها تحليل العوامل التي لها نفس الأسبقية. على سبيل المثال، لنقل أن:</p>
+
+<pre class="syntaxbox">a OP b OP c
+</pre>
+
+<p dir="rtl">تعني كلمة رابط - يسار (من اليسار إلى اليمين) أنها تتم معالجتها كـ <code>a OP b) OP c</code>) ، بينما تعني رابط - يمين (من اليمين إلى اليسار) أنها تُفسَّر على أنها (a OP (b OP c. عوامل التعيين هي رابط-يمين، حيث يمكنك كتابة:</p>
+
+<pre class="brush: js">a = b = 5;
+</pre>
+
+<p dir="rtl">مع النتيجة المتوقعة أن تحصل a و b على القيمة 5. وذلك لأن عامل التعيين يُرجع القيمة التي تم تعيينها. أولاً، يتم تعيين b على 5. ثم يتم تعيين a أيضًا على 5 ، قيمة الإرجاع b = 5 ، ويعرف أيضًا باسم المعامل الأيمن للتعيين.</p>
+
+<h2 dir="rtl" id="أمثلة">أمثلة:</h2>
+
+<pre><code>3 &gt; 2 &amp;&amp; 2 &gt; 1
+// returns true تعيد لنا صح
+
+3 &gt; 2 &gt; 1
+// returns false because 3 &gt; 2 is true, and true &gt; 1 is false تعيد خطأ لأن 3&gt;2 هي صحيحة، وصح &gt; 1 هو خطأ
+// Adding parentheses makes things clear: (3 &gt; 2) &gt; 1 إضافة الأقواس تجعل كل شيء واضح: (3&gt;2) 1</code></pre>
+
+<h2 dir="rtl" id="الجدول">الجدول</h2>
+
+<p dir="rtl">الجدول التالي مرتب من (20) الأعلى أسبقية إلى الأقل وهو (1).</p>
+
+<table class="fullwidth-table">
+ <tbody>
+ <tr>
+ <th>Precedence</th>
+ <th>Operator type</th>
+ <th>Associativity</th>
+ <th>Individual operators</th>
+ </tr>
+ <tr>
+ <td>21</td>
+ <td>{{jsxref("Operators/Grouping", "Grouping", "", 1)}} تجميع</td>
+ <td>n/a</td>
+ <td><code>( … )</code></td>
+ </tr>
+ <tr>
+ <td colspan="1" rowspan="5">20</td>
+ <td>{{jsxref("Operators/Property_Accessors", "Member Access", "#Dot_notation", 1)}} الوصول الى عنصر</td>
+ <td>
+ <p>left-to-right</p>
+
+ <p>من اليسار الى اليمين</p>
+ </td>
+ <td><code>… . …</code></td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Operators/Property_Accessors", "Computed Member Access","#Bracket_notation", 1)}} الوصول لعنصر محسوب</td>
+ <td>
+ <p>left-to-right</p>
+
+ <p>من اليسار الى اليمين</p>
+ </td>
+ <td><code>… [ … ]</code></td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Operators/new","new")}} (with argument list) جديد مع (قائمة معاملات)</td>
+ <td>n/a</td>
+ <td><code>new … ( … )</code></td>
+ </tr>
+ <tr>
+ <td><a href="/en-US/docs/Web/JavaScript/Guide/Functions">Function Call</a> استدعاء دالة</td>
+ <td>
+ <p>left-to-right</p>
+
+ <p>من اليسار الى اليمين</p>
+ </td>
+ <td><code>… ( <var>… </var>)</code></td>
+ </tr>
+ <tr>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Optional_chaining">Optional chaining</a> تسلسل اختياري</td>
+ <td>
+ <p>left-to-right</p>
+
+ <p>من اليسار الى اليمين</p>
+ </td>
+ <td><code>?.</code></td>
+ </tr>
+ <tr>
+ <td rowspan="1">19</td>
+ <td>{{jsxref("Operators/new","new")}} (without argument list) جديد .. بدون قائمة معاملات</td>
+ <td>
+ <p>right-to-left</p>
+
+ <p>من اليمين الى اليسار</p>
+ </td>
+ <td><code>new …</code></td>
+ </tr>
+ <tr>
+ <td rowspan="2">18</td>
+ <td>{{jsxref("Operators/Arithmetic_Operators","Postfix Increment","#Increment", 1)}} إضافة بعد إعادة النتيجة </td>
+ <td colspan="1" rowspan="2">n/a</td>
+ <td><code>… ++</code></td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Operators/Arithmetic_Operators","Postfix Decrement","#Decrement", 1)}} طرح بعد إعادة النتيجة</td>
+ <td><code>… --</code></td>
+ </tr>
+ <tr>
+ <td colspan="1" rowspan="10">17</td>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators#Logical_NOT">Logical NOT</a> نفي منطقي</td>
+ <td colspan="1" rowspan="10">
+ <p>right-to-left</p>
+
+ <p>من اليمين الى اليسار</p>
+ </td>
+ <td><code>! …</code></td>
+ </tr>
+ <tr>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Bitwise_NOT">Bitwise NOT</a> نفي بالبت</td>
+ <td><code>~ …</code></td>
+ </tr>
+ <tr>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Unary_plus">Unary Plus</a> + أحادي</td>
+ <td><code>+ …</code></td>
+ </tr>
+ <tr>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Unary_negation">Unary Negation</a> - أحادي</td>
+ <td><code>- …</code></td>
+ </tr>
+ <tr>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Increment">Prefix Increment</a> إضافة قبل إعادة النتيجة</td>
+ <td><code>++ …</code></td>
+ </tr>
+ <tr>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Decrement">Prefix Decrement</a> طرح قبل إعادة النتيجة</td>
+ <td><code>-- …</code></td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Operators/typeof", "typeof")}} نوع ال</td>
+ <td><code>typeof …</code></td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Operators/void", "void")}} مجموعة خالية</td>
+ <td><code>void …</code></td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Operators/delete", "delete")}} حذف</td>
+ <td><code>delete …</code></td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Operators/await", "await")}} انتظار</td>
+ <td><code>await …</code></td>
+ </tr>
+ <tr>
+ <td>16</td>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Exponentiation">Exponentiation</a> أُس (الرفع الى قوة)</td>
+ <td>
+ <p>right-to-left</p>
+
+ <p>من اليمين الى اليسار</p>
+ </td>
+ <td><code>… ** …</code></td>
+ </tr>
+ <tr>
+ <td rowspan="3">15</td>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Multiplication">Multiplication</a> الضرب</td>
+ <td colspan="1" rowspan="3">
+ <p>left-to-right</p>
+
+ <p>من اليسار الى اليمين</p>
+ </td>
+ <td><code>… * …</code></td>
+ </tr>
+ <tr>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Division">Division</a> القسمة</td>
+ <td><code>… / …</code></td>
+ </tr>
+ <tr>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Remainder">Remainder</a> الباقي</td>
+ <td><code>… % …</code></td>
+ </tr>
+ <tr>
+ <td rowspan="2">14</td>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Addition">Addition</a> الجمع</td>
+ <td colspan="1" rowspan="2">
+ <p>left-to-right</p>
+
+ <p>من اليسار الى اليمين</p>
+ </td>
+ <td><code>… + …</code></td>
+ </tr>
+ <tr>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Subtraction">Subtraction</a> الطرح</td>
+ <td><code>… - …</code></td>
+ </tr>
+ <tr>
+ <td rowspan="3">13</td>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators">Bitwise Left Shift</a> إزاحة لليسار بالبت</td>
+ <td colspan="1" rowspan="3">
+ <p>left-to-right</p>
+
+ <p>من اليسار الى اليمين</p>
+ </td>
+ <td><code>… &lt;&lt; …</code></td>
+ </tr>
+ <tr>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators">Bitwise Right Shift</a> إزاحة لليمين بالبت</td>
+ <td><code>… &gt;&gt; …</code></td>
+ </tr>
+ <tr>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators">Bitwise Unsigned Right Shift</a></td>
+ <td><code>… &gt;&gt;&gt; …</code></td>
+ </tr>
+ <tr>
+ <td rowspan="6">12</td>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Less_than_operator">Less Than</a> أصغر من</td>
+ <td colspan="1" rowspan="6">
+ <p>left-to-right</p>
+
+ <p>من اليسار الى اليمين</p>
+ </td>
+ <td><code>… &lt; …</code></td>
+ </tr>
+ <tr>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Less_than__or_equal_operator">Less Than Or Equal</a> أصغر من أو يساوي</td>
+ <td><code>… &lt;= …</code></td>
+ </tr>
+ <tr>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Greater_than_operator">Greater Than</a> أكبر من</td>
+ <td><code>… &gt; …</code></td>
+ </tr>
+ <tr>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Greater_than_or_equal_operator">Greater Than Or Equal</a> أكبر من أو يساوي</td>
+ <td><code>… &gt;= …</code></td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Operators/in", "in")}} في</td>
+ <td><code>… in …</code></td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Operators/instanceof", "instanceof")}} مشتق من </td>
+ <td><code>… instanceof …</code></td>
+ </tr>
+ <tr>
+ <td rowspan="4">11</td>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Equality">Equality</a> يساوي</td>
+ <td colspan="1" rowspan="4">
+ <p>left-to-right</p>
+
+ <p>من اليسار الى اليمين</p>
+ </td>
+ <td><code>… == …</code></td>
+ </tr>
+ <tr>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Inequality">Inequality</a> لا يساوي</td>
+ <td><code>… != …</code></td>
+ </tr>
+ <tr>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Identity">Strict Equality</a> مساواة قطعية</td>
+ <td><code>… === …</code></td>
+ </tr>
+ <tr>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Nonidentity">Strict Inequality</a> لا يساوي قطعيا</td>
+ <td><code>… !== …</code></td>
+ </tr>
+ <tr>
+ <td>10</td>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Bitwise_AND">Bitwise AND</a> و بالبت</td>
+ <td>
+ <p>left-to-right</p>
+
+ <p>من اليسار الى اليمين</p>
+ </td>
+ <td><code>… &amp; …</code></td>
+ </tr>
+ <tr>
+ <td>9</td>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Bitwise_XOR">Bitwise XOR</a> </td>
+ <td>
+ <p>left-to-right</p>
+
+ <p>من اليسار الى اليمين</p>
+ </td>
+ <td><code>… ^ …</code></td>
+ </tr>
+ <tr>
+ <td>8</td>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Bitwise_OR">Bitwise OR</a> أو بالبت</td>
+ <td>
+ <p>left-to-right</p>
+
+ <p>من اليسار الى اليمين</p>
+ </td>
+ <td><code>… | …</code></td>
+ </tr>
+ <tr>
+ <td>7</td>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator">Nullish coalescing operator</a></td>
+ <td>
+ <p>left-to-right</p>
+
+ <p>من اليسار الى اليمين</p>
+ </td>
+ <td><code>… ?? …</code></td>
+ </tr>
+ <tr>
+ <td>6</td>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators#Logical_AND">Logical AND</a> و المنطقية</td>
+ <td>
+ <p>left-to-right</p>
+
+ <p>من اليسار الى اليمين</p>
+ </td>
+ <td><code>… &amp;&amp; …</code></td>
+ </tr>
+ <tr>
+ <td>5</td>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators#Logical_OR">Logical OR</a> أو المنطقية</td>
+ <td>
+ <p>left-to-right</p>
+
+ <p>من اليسار الى اليمين</p>
+ </td>
+ <td><code>… || …</code></td>
+ </tr>
+ <tr>
+ <td>4</td>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator">Conditional</a> الشرطية</td>
+ <td>
+ <p>right-to-left</p>
+
+ <p>من اليمين الى اليسار</p>
+ </td>
+ <td><code>… ? … : …</code></td>
+ </tr>
+ <tr>
+ <td rowspan="13">3</td>
+ <td rowspan="13"><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Assignment_Operators">Assignment</a> التعيين</td>
+ <td rowspan="13">
+ <p>right-to-left</p>
+
+ <p>من اليمين الى اليسار</p>
+ </td>
+ <td><code>… = …</code></td>
+ </tr>
+ <tr>
+ <td><code>… += …</code></td>
+ </tr>
+ <tr>
+ <td><code>… -= …</code></td>
+ </tr>
+ <tr>
+ <td><code>… **= …</code></td>
+ </tr>
+ <tr>
+ <td><code>… *= …</code></td>
+ </tr>
+ <tr>
+ <td><code>… /= …</code></td>
+ </tr>
+ <tr>
+ <td><code>… %= …</code></td>
+ </tr>
+ <tr>
+ <td><code>… &lt;&lt;= …</code></td>
+ </tr>
+ <tr>
+ <td><code>… &gt;&gt;= …</code></td>
+ </tr>
+ <tr>
+ <td><code>… &gt;&gt;&gt;= …</code></td>
+ </tr>
+ <tr>
+ <td><code>… &amp;= …</code></td>
+ </tr>
+ <tr>
+ <td><code>… ^= …</code></td>
+ </tr>
+ <tr>
+ <td><code>… |= …</code></td>
+ </tr>
+ <tr>
+ <td rowspan="2">2</td>
+ <td>{{jsxref("Operators/yield", "yield")}}</td>
+ <td colspan="1" rowspan="2">
+ <p>right-to-left</p>
+
+ <p>من اليمين الى اليسار</p>
+ </td>
+ <td><code>yield …</code></td>
+ </tr>
+ <tr>
+ <td>{{jsxref("Operators/yield*", "yield*")}}</td>
+ <td><code>yield* …</code></td>
+ </tr>
+ <tr>
+ <td>1</td>
+ <td><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator">Comma / Sequence</a> فاصلة / تسلسل</td>
+ <td>
+ <p>left-to-right</p>
+
+ <p>من اليسار الى اليمين</p>
+ </td>
+ <td><code>… , …</code></td>
+ </tr>
+ </tbody>
+</table>
diff --git a/files/ar/web/javascript/reference/operators/this/index.html b/files/ar/web/javascript/reference/operators/this/index.html
new file mode 100644
index 0000000000..4e86b7e937
--- /dev/null
+++ b/files/ar/web/javascript/reference/operators/this/index.html
@@ -0,0 +1,381 @@
+---
+title: this
+slug: Web/JavaScript/Reference/Operators/this
+translation_of: Web/JavaScript/Reference/Operators/this
+---
+<div><font><font>{{jsSidebar ("عوامل التشغيل")}}</font></font></div>
+
+<p><font><font>A </font></font><strong><font><font>الدالة </font></font><code>this</code><font><font>الكلمة</font></font></strong><font><font> تتصرف بشكل مختلف قليلا في جافا سكريبت بالمقارنة مع اللغات الأخرى. </font><font>كما أن لديها بعض الاختلافات بين </font></font><a href="/en-US/docs/Web/JavaScript/Reference/Strict_mode"><font><font>الوضع الصارم والوضع</font></font></a><font><font> غير الصارم.</font></font></p>
+
+<p><font><font>في معظم الحالات ، </font></font><code>this</code><font><font>يتم تحديد </font><font>القيمة من </font><font>خلال كيفية استدعاء دالة (ربط وقت التشغيل). </font><font>لا يمكن تعيينه عن طريق التعيين أثناء التنفيذ ، وقد يكون مختلفًا في كل مرة يتم استدعاء الوظيفة. </font><font>قدم ES5 طريقة {{jsxref ("Function.prototype.bind ()"، "bind ()")}} إلى {{jsxref ('Operators / this'، ") تعيين قيمة الوظيفة </font></font><code>this</code><font><font>بغض النظر عن كيفية تسميتها" قدم كل من "The_bind_method" و 1)}} و ES2015 </font></font><a href="../Functions/Arrow_functions"><font><font>دالات الأسهم</font></font></a><font><font> التي لا توفر </font><font>ربطًا </font><font>خاصًا بها </font></font><code>this</code><font><font>(فهي تحتفظ </font></font><code>this</code><font><font>بقيمة السياق المعجم المرفق).</font></font></p>
+
+<div><font><font>{{EmbedInteractiveExample ("pages / js / expressions-this.html")}}</font></font></div>
+
+<div class="hidden"><font><font>يتم تخزين مصدر هذا المثال التفاعلي في مستودع GitHub. </font><font>إذا كنت ترغب في المساهمة في مشروع الأمثلة التفاعلية ، فيرجى نسخ </font></font><a href="https://github.com/mdn/interactive-examples"><font><font>https://github.com/mdn/interactive-examples</font></font></a><font><font> وإرسال طلب سحب إلينا.</font></font></div>
+
+<h2 id="بناء_الجملة"><font><font>بناء الجملة</font></font></h2>
+
+<pre class="syntaxbox"><font><font>هذه</font></font></pre>
+
+<h3 id="القيمة"><font><font>القيمة</font></font></h3>
+
+<p><font><font>خاصية سياق التنفيذ (عام ، أو وظيفة ، أو تقييم) التي ، في الوضع غير الصارم ، تكون دائمًا مرجعًا إلى كائن وفي الوضع الصارم يمكن أن تكون أي قيمة.</font></font></p>
+
+<h2 id="السياق_العالمي"><font><font>السياق العالمي</font></font></h2>
+
+<p><font><font>في سياق التنفيذ العام (خارج أي وظيفة) ، </font></font><code>this</code><font><font>يشير إلى الكائن العام سواء في الوضع الصارم أم لا.</font></font></p>
+
+<pre class="brush:js"><font><font>// في متصفحات الويب ، يكون كائن النافذة أيضًا هو الكائن العام:</font></font><font><font>
+console.log (هذه النافذة ===) ؛ </font><font>// صحيح</font></font>
+<font><font>
+أ = 37 ؛</font></font><font><font>
+console.log (window.a) ؛ </font><font>// 37</font></font>
+<font><font>
+this.b = "MDN" ؛</font></font><font><font>
+console.log (window.b) // "MDN"</font></font><font><font>
+console.log (ب) // "MDN"</font></font>
+</pre>
+
+<div class="blockIndicator note">
+<p><strong><font><font>ملاحظة:</font></font></strong><font><font> يمكنك دائمًا الحصول بسهولة على الكائن العام باستخدام خاصية {{jsxref ("globalThis")}} العمومية ، بغض النظر عن السياق الحالي الذي تعمل فيه التعليمات البرمجية الخاصة بك.</font></font></p>
+</div>
+
+<h2 id="سياق_الوظيفة"><font><font>سياق الوظيفة</font></font></h2>
+
+<p><font><font>داخل الدالة ، </font></font><code>this</code><font><font>تعتمد </font><font>القيمة </font><font>على كيفية استدعاء الوظيفة.</font></font></p>
+
+<h3 id="مكالمة_بسيطة"><font><font>مكالمة بسيطة</font></font></h3>
+
+<p><font><font>نظرًا لأن الشفرة التالية ليست في </font></font><a href="/en-US/docs/Web/JavaScript/Reference/Strict_mode"><font><font>وضع صارم</font></font></a><font><font> ، ولأن القيمة </font></font><code>this</code><font><font>لم يتم تعيينها بواسطة المكالمة ، </font></font><code>this</code><font><font>فسيتم </font><font>تعيينها </font><font>افتراضيًا على الكائن العام ، وهو {{domxref ("Window"، "window")}} في المتصفح.</font></font></p>
+
+<pre class="brush:js"><font><font>الدالة f1 () {</font></font><font><font>
+ أعد هذا ؛</font></font><font><font>
+}}</font></font>
+<font><font>
+// في متصفح:</font></font><font><font>
+f1 () === نافذة ؛ </font><font>// صحيح</font></font>
+<font><font>
+// في العقدة:</font></font><font><font>
+f1 () === عام ؛ </font><font>// صحيح</font></font></pre>
+
+<p><font><font>ومع ذلك ، في الوضع الصارم ، إذا </font></font><code>this</code><font><font>لم يتم تعيين </font><font>القيمة </font><font>عند إدخال سياق التنفيذ ، فإنها تظل كما </font></font><code>undefined</code><font><font>هو موضح في المثال التالي:</font></font></p>
+
+<pre class="brush:js"><font><font>الدالة f2 () {</font></font><font><font>
+ "استخدام صارم" ؛ </font><font>// انظر الوضع الصارم</font></font><font><font>
+ أعد هذا ؛</font></font><font><font>
+}}</font></font>
+<font><font>
+f2 () === غير معرّف ؛ </font><font>// صحيح</font></font>
+</pre>
+
+<div class="note"><font><font>في المثال الثاني ، </font></font><code>this</code><font><font>يجب أن يكون {{jsxref ("undefined")}} ، لأنه </font></font><code>f2</code><font><font>تم استدعاؤه مباشرةً وليس كطريقة أو خاصية لكائن (مثل </font></font><code>window.f2()</code><font><font>). </font><font>لم يتم تنفيذ هذه الميزة في بعض المتصفحات عندما بدأوا في دعم </font></font><a href="/en-US/docs/Web/JavaScript/Reference/Strict_mode"><font><font>الوضع الصارم</font></font></a><font><font> لأول مرة </font><font>. </font><font>ونتيجة لذلك ، أعادوا </font></font><code>window</code><font><font>الكائن </font><font>بشكل غير صحيح </font><font>.</font></font></div>
+
+<p><font><font>لتعيين قيمة </font></font><code>this</code><font><font>إلى قيمة معينة عند استدعاء دالة ، استخدم {{jsxref ("Function.prototype.call ()" أو "call ()")}} أو {{jsxref ("Function.prototype.apply ( ) "،" Apply () ")}} كما في الأمثلة التالية.</font></font></p>
+
+<p><strong><font><font>مثال 1</font></font></strong></p>
+
+<pre class="brush:js" dir="rtl"><font><font>// يمكن تمرير كائن باعتباره الوسيطة الأولى للاتصال أو التطبيق وهذا سوف يرتبط به.</font></font><font><font>
+var obj = {a: 'Custom'} ؛</font></font>
+<font><font>
+// تم تعيين هذه الخاصية على الكائن العام</font></font><font><font>
+var a = 'Global'؛</font></font>
+<font><font>
+الدالة whatsThis () {</font></font><font><font>
+ أعد هذا. </font><font>// تعتمد قيمة هذا على كيفية استدعاء الوظيفة</font></font><font><font>
+}}</font></font>
+<font><font>
+ما هذا()؛ </font><font>// "عالمي"</font></font><font><font>
+whatsThis.call (obj) ؛ </font><font>// 'مخصص'</font></font><font><font>
+whatsThis.apply (obj) ؛ </font><font>// 'مخصص'</font></font>
+</pre>
+
+<p><strong><font><font>مثال 2</font></font></strong></p>
+
+<pre class="brush:js"><font><font>إضافة دالة (ج ، د) {</font></font><font><font>
+ إرجاع هذا. a + this.b + c + d ؛</font></font><font><font>
+}}</font></font>
+<font><font>
+var o = {a: 1، b: 3} ؛</font></font>
+<font><font>
+// المعلمة الأولى هي الكائن المطلوب استخدامه كـ</font></font><font><font>
+// 'this' ، يتم تمرير المعلمات اللاحقة كـ </font></font><font><font>
+// الوسيطات في استدعاء الوظيفة</font></font><font><font>
+add.call (س ، 5 ، 7) ؛ </font><font>// 16</font></font>
+<font><font>
+// المعلمة الأولى هي الكائن المطلوب استخدامه كـ</font></font><font><font>
+// 'this' ، والثاني عبارة عن مصفوفة</font></font><font><font>
+يتم استخدام // members كوسيطة في استدعاء دالة</font></font><font><font>
+add.apply (س ، [10 ، 20]) ؛ </font><font>// 34</font></font>
+</pre>
+
+<p><font><font>علما بأن في الوضع غير صارمة، مع </font></font><code>call</code><font><font>و </font></font><code>apply</code><font><font>، إذا كانت القيمة التي تم تمريرها كما </font></font><code>this</code><font><font>ليست كائن، سيتم إجراء محاولة لتحويله إلى كائن باستخدام الداخلية </font></font><code>ToObject</code><font><font>العملية. </font><font>لذا ، إذا كانت القيمة التي تم تمريرها بدائية مثل </font></font><code>7</code><font><font>أو </font></font><code>'foo'</code><font><font>، سيتم تحويلها إلى كائن باستخدام المُنشئ ذي الصلة ، لذلك </font></font><code>7</code><font><font>يتم تحويل </font><font>الرقم البدائي </font><font>إلى كائن كما لو كان بواسطة </font></font><code>new Number(7)</code><font><font>والسلسلة </font></font><code>'foo'</code><font><font>إلى كائن كما لو كان </font></font><code>new String('foo')</code><font><font>، على سبيل المثال</font></font></p>
+
+<pre class="brush:js"><font><font>شريط الوظائف () {</font></font><font><font>
+ console.log (Object.prototype.toString.call (this)) ؛</font></font><font><font>
+}}</font></font>
+<font><font>
+bar.call (7) ؛ </font><font>// [رقم الكائن]</font></font><font><font>
+bar.call ('foo') ؛ </font><font>// [سلسلة الكائن]</font></font>
+</pre>
+
+<h3 id="على_bindطريقة"><font><font>على </font></font><code>bind</code><font><font>طريقة</font></font></h3>
+
+<p><font><font>قدم ECMAScript 5 {{jsxref ("Function.prototype.bind ()")}}}. </font></font><code>f.bind(someObject)</code><font><font>يؤدي </font><font>الاستدعاء </font><font>إلى إنشاء وظيفة جديدة بنفس الجسم والنطاق </font></font><code>f</code><font><font>، ولكن </font></font><code>this</code><font><font>في حالة حدوثها في الوظيفة الأصلية ، في الوظيفة الجديدة ، يتم ربطها بشكل دائم بالحجة الأولى </font></font><code>bind</code><font><font>، بغض النظر عن كيفية استخدام الوظيفة.</font></font></p>
+
+<pre class="brush:js"><font><font>دالة f () {</font></font><font><font>
+ أعد هذا.</font></font><font><font>
+}}</font></font>
+<font><font>
+var g = f.bind ({a: 'azerty'}) ؛</font></font><font><font>
+console.log (g ()) ؛ </font><font>// azerty</font></font>
+<font><font>
+var h = g.bind ({a: 'yoo'}) ؛ </font><font>// bind يعمل مرة واحدة فقط!</font></font><font><font>
+console.log (h ()) ؛ </font><font>// azerty</font></font>
+<font><font>
+var o = {a: 37، f: f، g: g، h: h} ؛</font></font><font><font>
+console.log (oa، of ()، og ()، oh ())؛ </font><font>// 37،37، azerty، azerty</font></font>
+</pre>
+
+<h3 id="وظائف_السهم"><font><font>وظائف السهم</font></font></h3>
+
+<p><font><font>في </font></font><a href="/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions"><font><font>دوال السهم</font></font></a><font><font> ، </font></font><code>this</code><font><font>يحتفظ بقيمة السياق المعجم المتضمن </font></font><code>this</code><font><font>. </font><font>في الكود العام ، سيتم تعيينه على الكائن العام:</font></font></p>
+
+<pre class="brush: js"><font><font>var globalObject = هذا ؛</font></font><font><font>
+var foo = (() =&gt; this) ؛</font></font><font><font>
+console.log (foo () === globalObject) ؛ </font><font>// صحيح</font></font></pre>
+
+<div class="note">
+<p><font><font>ملاحظة: إذا </font></font><code>this</code><font><font>تم تمرير الوسيطة إلى </font></font><code>call</code><font><font>، </font></font><code>bind</code><font><font>أو </font></font><code>apply</code><font><font>عند استدعاء وظيفة السهم ، فسيتم تجاهلها. </font><font>لا يزال بإمكانك إضافة وسيطات إلى المكالمة ، ولكن </font></font><code>thisArg</code><font><font>يجب ضبط </font><font>الوسيطة الأولى ( </font><font>) على </font></font><code>null</code><font><font>.</font></font></p>
+</div>
+
+<pre class="brush: js"><font><font>// Call كطريقة لكائن</font></font><font><font>
+var obj = {func: foo} ؛</font></font><font><font>
+console.log (obj.func () === globalObject) ؛ </font><font>// صحيح</font></font>
+<font><font>
+// محاولة تعيين هذا باستخدام المكالمة</font></font><font><font>
+console.log (foo.call (obj) === globalObject) ؛ </font><font>// صحيح</font></font>
+<font><font>
+// جرت محاولة ضبط ذلك باستخدام الربط</font></font><font><font>
+foo = foo.bind (obj) ؛</font></font><font><font>
+console.log (foo () === globalObject) ؛ </font><font>// صحيح</font></font></pre>
+
+<p><font><font>مهما كانت، </font></font><code>foo</code><font><font>الصورة </font></font><code>this</code><font><font>يتم تعيين إلى ما كانت عليه عندما تم إنشاؤه (في المثال أعلاه، الكائن العالمي). </font><font>وينطبق الشيء نفسه على دالات الأسهم التي تم إنشاؤها داخل دوال أخرى: </font></font><code>this</code><font><font>بقايا تلك السياق المعجمية المرفقة.</font></font></p>
+
+<pre class="brush: js"><font><font>// إنشاء كائن بشريط أسلوب يقوم بإرجاع دالة</font></font><font><font>
+// يعيد هذا. </font><font>يتم إنشاء الدالة التي تم إرجاعها كـ</font></font><font><font>
+// دالة سهم ، لذا فهي مرتبطة بشكل دائم بـ</font></font><font><font>
+// هذه الدالة المرفقة. </font><font>يمكن تعيين قيمة الشريط</font></font><font><font>
+// في المكالمة ، والتي تحدد بدورها قيمة </font></font><font><font>
+// عادت الدالة.</font></font><font><font>
+var obj = {</font></font><font><font>
+ شريط: الوظيفة () {</font></font><font><font>
+ var x = (() =&gt; this) ؛</font></font><font><font>
+ العودة س ؛</font></font><font><font>
+ }}</font></font><font><font>
+} ؛</font></font>
+<font><font>
+// Call bar كطريقة للهدف ، وضبط هذا الأمر على obj</font></font><font><font>
+// تعيين مرجع للدالة التي تم إرجاعها إلى fn</font></font><font><font>
+var fn = obj.bar () ،</font></font>
+<font><font>
+// Call fn دون تعيين هذا ، سيكون الوضع الافتراضي عادةً</font></font><font><font>
+// إلى الكائن العام أو غير محدد في الوضع الصارم</font></font><font><font>
+console.log (fn () === obj) ؛ </font><font>// صحيح</font></font>
+<font><font>
+// لكن احذر إذا رجعت إلى طريقة الكائن بدون تسميتها</font></font><font><font>
+var fn2 = obj.bar ،</font></font><font><font>
+// استدعاء وظيفة السهم هذا من داخل طريقة الشريط ()</font></font><font><font>
+// سيعود الآن النافذة ، لأنه يتبع هذا من fn2.</font></font><font><font>
+console.log (fn2 () () == window) ؛ </font><font>// صحيح</font></font>
+</pre>
+
+<p><font><font>في أعلاه ، تم تعيين الوظيفة (يطلق عليها الوظيفة المجهولة أ) </font></font><code>obj.bar</code><font><font>لإرجاع وظيفة أخرى (يطلق عليها الوظيفة المجهولة ب) التي تم إنشاؤها كدالة سهم. </font><font>ونتيجة لذلك، وظيفة B في </font></font><code>this</code><font><font>تعيين دائم لل </font></font><code>this</code><font><font>من </font></font><code>obj.bar</code><font><font>(وظيفة A) عندما دعا. </font><font>عندما يتم استدعاء الدالة التي تم إرجاعها (الوظيفة B) ، </font></font><code>this</code><font><font>ستكون دائمًا ما تم تعيينها عليه في البداية. </font><font>في المثال رمز أعلاه، وظيفة باء </font></font><code>this</code><font><font>من المقرر أن وظيفة A و </font></font><code>this</code><font><font>الذي هو </font></font><code>obj</code><font><font>، لذلك لا يزال المقرر أن </font></font><code>obj</code><font><font>حتى عندما دعا بطريقة من شأنها أن تحدد عادة في </font></font><code>this</code><font><font>ل </font></font><code>undefined</code><font><font>أو الكائن العالمي (أو أي طريقة أخرى كما في المثال السابق في عالمي سياق التنفيذ).</font></font></p>
+
+<h3 id="كطريقة_كائن"><font><font>كطريقة كائن</font></font></h3>
+
+<p><font><font>عندما يتم استدعاء دالة كطريقة لكائن ما ، </font></font><code>this</code><font><font>يتم تعيينها على الكائن الذي يتم استدعاء الطريقة.</font></font></p>
+
+<p><font><font>في المثال التالي ، عندما </font></font><code>o.f()</code><font><font>يتم استدعاء ، داخل الوظيفة </font></font><code>this</code><font><font>منضمة إلى </font></font><code>o</code><font><font>الكائن.</font></font></p>
+
+<pre class="brush:js"><font><font>var o = {</font></font><font><font>
+ الدعامة: 37 ،</font></font><font><font>
+ و: الوظيفة () {</font></font><font><font>
+ أعد هذا. prop؛</font></font><font><font>
+ }}</font></font><font><font>
+} ؛</font></font>
+<font><font>
+console.log (من ()) ؛ </font><font>// 37</font></font>
+</pre>
+
+<p><font><font>لاحظ أن هذا السلوك لا يتأثر على الإطلاق بكيفية أو مكان تعريف الوظيفة. </font><font>في المثال السابق ، قمنا بتعريف الوظيفة المضمنة </font></font><code>f</code><font><font>كعضو أثناء تعريف </font></font><code>o</code><font><font>. </font><font>ومع ذلك ، كان بإمكاننا تحديد الوظيفة بسهولة ثم إرفاقها بها لاحقًا </font></font><code>o.f</code><font><font>. </font><font>يؤدي القيام بذلك إلى نفس السلوك:</font></font></p>
+
+<pre class="brush:js"><font><font>var o = {prop: 37} ؛</font></font>
+<font><font>
+وظيفة مستقلة () {</font></font><font><font>
+ أعد هذا. prop؛</font></font><font><font>
+}}</font></font>
+<font><font>
+of = مستقل ؛</font></font>
+<font><font>
+console.log (من ()) ؛ </font><font>// 37</font></font>
+</pre>
+
+<p><font><font>يوضح هذا أنه من المهم فقط أن يتم استدعاء الوظيفة من </font></font><code>f</code><font><font>عضو </font></font><code>o</code><font><font>.</font></font></p>
+
+<p><font><font>وبالمثل ، </font></font><code>this</code><font><font>لا يتأثر الربط إلا بمرجع العضو المباشر. </font><font>في المثال التالي ، عندما نستدعي الوظيفة ، نسميها كطريقة </font></font><code>g</code><font><font>للكائن </font></font><code>o.b</code><font><font>. </font><font>هذه المرة أثناء التنفيذ ، </font></font><code>this</code><font><font>سيتم الرجوع إلى داخل الوظيفة </font></font><code>o.b</code><font><font>. </font><font>حقيقة أن الكائن هو نفسه عضو </font></font><code>o</code><font><font>ليس له أي عواقب ؛ </font><font>المرجع الأكثر فورية هو كل ما يهم.</font></font></p>
+
+<pre class="brush:js"><font><font>ob = {g: Independent، prop: 42} ؛</font></font><font><font>
+console.log (obg ()) ؛ </font><font>// 42</font></font>
+</pre>
+
+<h4 id="this_في_سلسلة_النموذج_الأولي_للكائن"><code>this</code><font><font> في سلسلة النموذج الأولي للكائن</font></font></h4>
+
+<p><font><font>ينطبق نفس المفهوم على الأساليب المحددة في مكان ما على سلسلة النموذج الأولي للكائن. </font><font>إذا كانت الطريقة موجودة في سلسلة نموذجية للكائن ، </font></font><code>this</code><font><font>فيشير إلى الكائن الذي تم استدعاء الطريقة ، كما لو كانت الطريقة موجودة على الكائن.</font></font></p>
+
+<pre class="brush:js"><font><font>var o = {f: function () {return this.a + this.b؛ </font><font>}} ؛</font></font><font><font>
+var p = Object.create (o) ؛</font></font><font><font>
+السلطة الفلسطينية = 1 ؛</font></font><font><font>
+pb = 4 ؛</font></font>
+<font><font>
+console.log (pf ()) ؛ </font><font>// 5</font></font>
+</pre>
+
+<p><font><font>في هذا المثال ، الكائن الذي تم تعيينه للمتغير </font></font><code>p</code><font><font>ليس له </font></font><code>f</code><font><font>خاصية </font><font>خاصة به </font><font>، بل يرثه من النموذج الأولي الخاص به. </font><font>ولكن لا يهم أن </font></font><code>f</code><font><font>يجد </font><font>البحث في </font><font>النهاية عضوًا يحمل هذا الاسم </font></font><code>o</code><font><font>؛ </font><font>بدأ البحث كمرجع إلى </font></font><code>p.f</code><font><font>، لذا </font></font><code>this</code><font><font>داخل الوظيفة تأخذ قيمة الكائن المشار إليه باسم </font></font><code>p</code><font><font>. </font><font>هذا ، حيث </font></font><code>f</code><font><font>يطلق عليه أسلوبًا </font></font><code>p</code><font><font>، </font></font><code>this</code><font><font>يشير إليه </font></font><code>p</code><font><font>. </font><font>هذه ميزة مثيرة للاهتمام في وراثة النموذج الأولي لجافا سكريبت.</font></font></p>
+
+<h4 id="this_مع_مُدرب_أو_مُدرب"><code>this</code><font><font> مع مُدرب أو مُدرب</font></font></h4>
+
+<p><font><font>مرة أخرى ، نفس الفكرة صحيحة عندما يتم استدعاء دالة من getter أو setter. </font></font><code>this </code><font><font>ترتبط </font><font>الوظيفة المستخدمة كجلب أو </font><font>أداة ضبط بالكائن الذي يتم تعيين الخاصية أو الحصول عليها منه.</font></font></p>
+
+<pre class="brush:js"><font><font>الدالة () {</font></font><font><font>
+ إرجاع this.a + this.b + this.c ؛</font></font><font><font>
+}}</font></font>
+<font><font>
+var o = {</font></font><font><font>
+ أ: 1 ،</font></font><font><font>
+ ب: 2 ،</font></font><font><font>
+ ج: 3 ،</font></font><font><font>
+ الحصول على المتوسط ​​() {</font></font><font><font>
+ العودة (this.a + this.b + this.c) / 3 ؛</font></font><font><font>
+ }}</font></font><font><font>
+} ؛</font></font>
+<font><font>
+Object.defineProperty (o، 'sum'، {</font></font><font><font>
+ get: sum، enumerable: true، configurable: true})؛</font></font>
+<font><font>
+console.log (o. avage، o.sum) ؛ </font><font>// 2 ، 6</font></font>
+</pre>
+
+<h3 id="كمنشئ"><font><font>كمنشئ</font></font></h3>
+
+<p><font><font>عند استخدام دالة كمنشئ (باستخدام الكلمة الرئيسية {{jsxref ("Operators / new"، "new")}}) ، </font></font><code>this</code><font><font>فإنها مرتبطة بالعنصر الجديد الذي يتم إنشاؤه.</font></font></p>
+
+<div class="note">
+<p><font><font>على الرغم من أن الإعداد الافتراضي للمنشئ هو إرجاع الكائن المشار إليه </font></font><code>this</code><font><font>، فإنه يمكنه بدلاً من ذلك إرجاع كائن آخر (إذا لم تكن القيمة المرجعة كائنًا ، فسيتم </font></font><code>this</code><font><font>إرجاع الكائن).</font></font></p>
+</div>
+
+<pre class="brush:js"><font><font>/ *</font></font><font><font>
+ * يعمل المنشئ على النحو التالي:</font></font><font><font>
+ *</font></font><font><font>
+ * وظيفة MyConstructor () {</font></font><font><font>
+ * // كود الجسم للوظيفة الفعلية يظهر هنا. </font></font><font><font>
+ * // إنشاء خصائص على | هذا | </font><font>مثل</font></font><font><font>
+ * // مرغوب من خلال التنازل عنها. </font><font>على سبيل المثال ،</font></font><font><font>
+ * this.fum = "nom" ؛</font></font><font><font>
+ * // إلى آخره...</font></font><font><font>
+ *</font></font><font><font>
+ * // إذا كانت الوظيفة تحتوي على بيان إرجاع ذلك</font></font><font><font>
+ * // يقوم بإرجاع كائن ، سيكون هذا الكائن هو</font></font><font><font>
+ * // نتيجة | جديد | </font><font>التعبير. </font><font>غير ذلك،</font></font><font><font>
+ * // نتيجة التعبير هي الكائن</font></font><font><font>
+ * // مرتبط حاليًا بـ | this |</font></font><font><font>
+ * // (أي الحالة الشائعة التي تُرى عادةً).</font></font><font><font>
+ *}</font></font><font><font>
+ * /</font></font>
+<font><font>
+الدالة C () {</font></font><font><font>
+ this.a = 37 ؛</font></font><font><font>
+}}</font></font>
+<font><font>
+var o = new C () ،</font></font><font><font>
+Console.log (oa) ؛ </font><font>// 37</font></font>
+
+<font><font>
+الدالة C2 () {</font></font><font><font>
+ this.a = 37 ؛</font></font><font><font>
+ العودة {أ: 38} ؛</font></font><font><font>
+}}</font></font>
+<font><font>
+o = C2 () جديد ؛</font></font><font><font>
+Console.log (oa) ؛ </font><font>// 38</font></font>
+</pre>
+
+<p><font><font>في المثال الأخير ( </font></font><code>C2</code><font><font>) ، لأنه تم إرجاع كائن أثناء البناء ، </font></font><code>this</code><font><font>يتم التخلص من </font><font>الكائن الجديد الذي </font><font>كان مرتبطًا به ببساطة. </font><font>(هذا يجعل العبارة " </font></font><code>this.a = 37;</code><font><font>" رمزًا ميتًا بشكل </font><font>أساسي </font><font>. ليس ميتًا تمامًا لأنه يتم تنفيذه ، ولكن يمكن إزالته بدون أي تأثيرات خارجية.)</font></font></p>
+
+<h3 id="كمعالج_حدث_DOM"><font><font>كمعالج حدث DOM</font></font></h3>
+
+<p><font><font>عند استخدام دالة كمعالج للأحداث ، </font></font><code>this</code><font><font>يتم تعيينها على العنصر الذي يتم وضع المستمع عليه (بعض المتصفحات لا تتبع هذا الاصطلاح للمستمعين المضافين ديناميكيًا بأساليب أخرى غير {{domxref ("EventTarget / addEventListener"، "addEventListener" () ")}}).</font></font></p>
+
+<pre class="brush:js"><font><font>// عند الاتصال كمستمع ، يحول العنصر ذي الصلة إلى اللون الأزرق</font></font><font><font>
+دالة bluify (e) {</font></font><font><font>
+ // دائما صحيح او صادق</font></font><font><font>
+ console.log (هذا === e.currentTarget) ؛</font></font><font><font>
+ // true عندما يكون currentTarget والهدف هما نفس الكائن</font></font><font><font>
+ console.log (هذا === e.target) ؛</font></font><font><font>
+ this.style.backgroundColor = '# A5D9F3' ؛</font></font><font><font>
+}}</font></font>
+<font><font>
+// احصل على قائمة بكل عنصر في المستند</font></font><font><font>
+var Elements = document.getElementsByTagName ('*') ؛</font></font>
+<font><font>
+// أضف bluify كمستمع فوق حتى عندما</font></font><font><font>
+تم النقر على عنصر // ، ويتحول إلى اللون الأزرق</font></font><font><font>
+for (var i = 0؛ i &lt;element.length؛ i ++) {</font></font><font><font>
+ العناصر [i] .addEventListener ('click'، bluify، false) ؛</font></font><font><font>
+}}</font></font></pre>
+
+<h3 id="في_معالج_حدث_مضمن"><font><font>في معالج حدث مضمن</font></font></h3>
+
+<p><font><font>عندما يتم استدعاء الرمز من </font></font><a href="/en-US/docs/Web/Guide/Events/Event_handlers"><font><font>معالج</font></font></a><font><font> مضمّن </font><a href="/en-US/docs/Web/Guide/Events/Event_handlers"><font>في الحدث</font></a><font> ، </font></font><code>this</code><font><font>يتم تعيينه على عنصر DOM الذي يتم وضع المستمع عليه:</font></font></p>
+
+<pre class="brush:js"><font><font>&lt;button onclick = "alert (this.tagName.toLowerCase ())؛"&gt;</font></font><font><font>
+ تظهر هذه</font></font><font><font>
+&lt;/button&gt;</font></font>
+</pre>
+
+<p><font><font>يظهر التنبيه أعلاه </font></font><code>button</code><font><font>. </font><font>لاحظ أن الكود الخارجي فقط هو الذي تم </font></font><code>this</code><font><font>ضبطه بهذه الطريقة:</font></font></p>
+
+<pre class="brush:js"><font><font>&lt;button onclick = "alert ((function () {return this؛}) ())؛"&gt;</font></font><font><font>
+ أظهر هذا الداخلية</font></font><font><font>
+&lt;/button&gt;</font></font>
+</pre>
+
+<p><font><font>في هذه الحالة ، </font></font><code>this</code><font><font>لم يتم تعيين </font><font>الوظيفة الداخلية ، </font><font>لذا فإنها تُرجع الكائن العام / النافذة (أي الكائن الافتراضي في الوضع غير الصارم حيث </font></font><code>this</code><font><font>لا يتم تعيينه بواسطة المكالمة).</font></font></p>
+
+<h2 id="مواصفات"><font><font>مواصفات</font></font></h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col"><font><font>تخصيص</font></font></th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><font><font>{{SpecName ('ESDraft'، '# sec-this-keyword'، 'The this keyword')}}</font></font></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="التوافق_المتصفح"><font><font>التوافق المتصفح</font></font></h2>
+
+<div class="hidden"><font><font>يتم إنشاء جدول التوافق في هذه الصفحة من البيانات المنظمة. </font><font>إذا كنت ترغب في المساهمة في البيانات ، يرجى مراجعة </font></font><a href="https://github.com/mdn/browser-compat-data"><font><font>https://github.com/mdn/browser-compat-data</font></font></a><font><font> وإرسال طلب سحب إلينا.</font></font></div>
+
+<p><font><font>{{Compat ("javascript.operators.this")}}</font></font></p>
+
+<h2 id="أنظر_أيضا"><font><font>أنظر أيضا</font></font></h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Strict_mode"><font><font>الوضع الصارم</font></font></a></li>
+ <li><a href="https://dmitripavlutin.com/gentle-explanation-of-this-in-javascript/"><font><font>شرح لطيف لكلمة "هذا" في جافا سكريبت</font></font></a></li>
+ <li><font><font>الحصول على السياق العالمي: {{jsxref ("globalThis")}}</font></font></li>
+</ul>
diff --git a/files/ar/web/javascript/reference/statements/index.html b/files/ar/web/javascript/reference/statements/index.html
new file mode 100644
index 0000000000..b9fd7f94a0
--- /dev/null
+++ b/files/ar/web/javascript/reference/statements/index.html
@@ -0,0 +1,141 @@
+---
+title: Statements and declarations
+slug: Web/JavaScript/Reference/Statements
+tags:
+ - JavaScript
+ - NeedsTranslation
+ - Reference
+ - TopicStub
+ - statements
+translation_of: Web/JavaScript/Reference/Statements
+---
+<div>{{jsSidebar("Statements")}}</div>
+
+<p>JavaScript applications consist of statements with an appropriate syntax. A single statement may span multiple lines. Multiple statements may occur on a single line if each statement is separated by a semicolon. This isn't a keyword, but a group of keywords.</p>
+
+<h2 id="Statements_and_declarations_by_category">Statements and declarations by category</h2>
+
+<p>For an alphabetical listing see the sidebar on the left.</p>
+
+<h3 id="Control_flow">Control flow</h3>
+
+<dl>
+ <dt>{{jsxref("Statements/block", "Block")}}</dt>
+ <dd>A block statement is used to group zero or more statements. The block is delimited by a pair of curly brackets.</dd>
+ <dt>{{jsxref("Statements/break", "break")}}</dt>
+ <dd>Terminates the current loop, switch, or label statement and transfers program control to the statement following the terminated statement.</dd>
+ <dt>{{jsxref("Statements/continue", "continue")}}</dt>
+ <dd>Terminates execution of the statements in the current iteration of the current or labeled loop, and continues execution of the loop with the next iteration.</dd>
+ <dt>{{jsxref("Statements/Empty", "Empty")}}</dt>
+ <dd>An empty statement is used to provide no statement, although the JavaScript syntax would expect one.</dd>
+ <dt>{{jsxref("Statements/if...else", "if...else")}}</dt>
+ <dd>Executes a statement if a specified condition is true. If the condition is false, another statement can be executed.</dd>
+ <dt>{{jsxref("Statements/switch", "switch")}}</dt>
+ <dd>Evaluates an expression, matching the expression's value to a case clause, and executes statements associated with that case.</dd>
+ <dt>{{jsxref("Statements/throw", "throw")}}</dt>
+ <dd>Throws a user-defined exception.</dd>
+ <dt>{{jsxref("Statements/try...catch", "try...catch")}}</dt>
+ <dd>Marks a block of statements to try, and specifies a response, should an exception be thrown.</dd>
+</dl>
+
+<h3 id="Declarations">Declarations</h3>
+
+<dl>
+ <dt>{{jsxref("Statements/var", "var")}}</dt>
+ <dd>Declares a variable, optionally initializing it to a value.</dd>
+ <dt>{{jsxref("Statements/let", "let")}}</dt>
+ <dd>Declares a block scope local variable, optionally initializing it to a value.</dd>
+ <dt>{{jsxref("Statements/const", "const")}}</dt>
+ <dd>Declares a read-only named constant.</dd>
+</dl>
+
+<h3 id="Functions_and_classes">Functions and classes</h3>
+
+<dl>
+ <dt>{{jsxref("Statements/function", "function")}}</dt>
+ <dd>Declares a function with the specified parameters.</dd>
+ <dt>{{jsxref("Statements/function*", "function*")}}</dt>
+ <dd>Generators functions enable writing <a href="/en-US/docs/Web/JavaScript/Guide/The_Iterator_protocol">iterators</a> more easily.</dd>
+ <dt>{{jsxref("Statements/return", "return")}}</dt>
+ <dd>Specifies the value to be returned by a function.</dd>
+ <dt>{{jsxref("Statements/class", "class")}}</dt>
+ <dd>Declares a class.</dd>
+</dl>
+
+<h3 id="Iterations">Iterations</h3>
+
+<dl>
+ <dt>{{jsxref("Statements/do...while", "do...while")}}</dt>
+ <dd>Creates a loop that executes a specified statement until the test condition evaluates to false. The condition is evaluated after executing the statement, resulting in the specified statement executing at least once.</dd>
+ <dt>{{jsxref("Statements/for", "for")}}</dt>
+ <dd>Creates a loop that consists of three optional expressions, enclosed in parentheses and separated by semicolons, followed by a statement executed in the loop.</dd>
+ <dt>{{deprecated_inline}} {{non-standard_inline()}} {{jsxref("Statements/for_each...in", "for each...in")}}</dt>
+ <dd>Iterates a specified variable over all values of object's properties. For each distinct property, a specified statement is executed.</dd>
+ <dt>{{jsxref("Statements/for...in", "for...in")}}</dt>
+ <dd>Iterates over the enumerable properties of an object, in arbitrary order. For each distinct property, statements can be executed.</dd>
+ <dt>{{jsxref("Statements/for...of", "for...of")}}</dt>
+ <dd>Iterates over iterable objects (including {{jsxref("Global_Objects/Array","arrays","","true")}}, array-like objects, <a href="/en-US/docs/JavaScript/Guide/Iterators_and_Generators">iterators and generators</a>), invoking a custom iteration hook with statements to be executed for the value of each distinct property.</dd>
+ <dt>{{jsxref("Statements/while", "while")}}</dt>
+ <dd>Creates a loop that executes a specified statement as long as the test condition evaluates to true. The condition is evaluated before executing the statement.</dd>
+</dl>
+
+<h3 id="Others">Others</h3>
+
+<dl>
+ <dt>{{jsxref("Statements/debugger", "debugger")}}</dt>
+ <dd>Invokes any available debugging functionality. If no debugging functionality is available, this statement has no effect.</dd>
+ <dt>{{jsxref("Statements/export", "export")}}</dt>
+ <dd>Used to export functions to make them available for imports in external modules, another scripts.</dd>
+ <dt>{{jsxref("Statements/import", "import")}}</dt>
+ <dd>Used to import functions exported from an external module, another script.</dd>
+ <dt>{{jsxref("Statements/label", "label")}}</dt>
+ <dd>Provides a statement with an identifier that you can refer to using a <code>break</code> or <code>continue</code> statement.</dd>
+</dl>
+
+<dl>
+ <dt>{{deprecated_inline}} {{jsxref("Statements/with", "with")}}</dt>
+ <dd>Extends the scope chain for a statement.</dd>
+</dl>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1', '#sec-12', 'Statements')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Initial definition</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES3', '#sec-12', 'Statements')}}</td>
+ <td>{{Spec2('ES3')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-12', 'Statements')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-ecmascript-language-statements-and-declarations', 'ECMAScript Language: Statements and Declarations')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>New: function*, let, for...of, yield, class</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-ecmascript-language-statements-and-declarations', 'ECMAScript Language: Statements and Declarations')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators">Operators</a></li>
+</ul>
diff --git a/files/ar/web/javascript/reference/statements/return/index.html b/files/ar/web/javascript/reference/statements/return/index.html
new file mode 100644
index 0000000000..191ab5296c
--- /dev/null
+++ b/files/ar/web/javascript/reference/statements/return/index.html
@@ -0,0 +1,145 @@
+---
+title: return
+slug: Web/JavaScript/Reference/Statements/return
+translation_of: Web/JavaScript/Reference/Statements/return
+---
+<div dir="rtl">{{jsSidebar("Statements")}}</div>
+
+<p dir="rtl">ال <kbd>return</kbd> ينهي البيان تنفيذ الوظيفة ويحدد قيمة ليتم ارجاعها الى دالة الاستدعاء</p>
+
+<div>{{EmbedInteractiveExample("pages/js/statement-return.html")}}</div>
+
+<div class="hidden">The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</div>
+
+<h2 id="بناء_الجملة">بناء الجملة</h2>
+
+<pre class="syntaxbox notranslate">return [<var>expression</var>]; </pre>
+
+<dl>
+ <dt><code><var>expression</var></code></dt>
+ <dd dir="rtl">التعبير المراد استرجاع قيمتة. اذا تم حذفه, فسيتم ارجاع <kbd>undefined</kbd> بدلاً من ذالك</dd>
+</dl>
+
+<h2 dir="rtl" id="الوصف">الوصف</h2>
+
+<p dir="rtl">عند استخدام عبارة <kbd>return</kbd> في جسم الدالة,يتم ايقاف تنفيذ الوظيفة.اذا تم تحديد ذالك,يتم ارجاع قيمة معينة الى دالة الاستدعاء.على سبيل المثال,تعرض الدالة التالية مربع سعتها , x,حيث x هي رقم.</p>
+
+<pre class="brush: js notranslate">function square(x) {
+ return x * x;
+}
+var demo = square(3);
+// demo will equal 9
+</pre>
+
+<p dir="rtl">اذا تم حذف القيمة,يتم ارجاع <kbd>undefined</kbd> بدلاُ من ذالك</p>
+
+<p dir="rtl">تعطل عبارات الارجاع التالية تنفيذ الوظيفة</p>
+
+<pre class="brush: js notranslate">return;
+return true;
+return false;
+return x;
+return x + y / 3;
+</pre>
+
+<h3 dir="rtl" id="الادراج_التلقائي_للفاصلة_المنقوطة_Semicolon">الادراج التلقائي للفاصلة المنقوطة (Semicolon)</h3>
+
+<p dir="rtl">تتاثر عبارة الارجاع بادراج الفاصلة المنقوطة تلقائياُُ (ASI) .</p>
+
+<p dir="rtl">لا يُسمح بفاصل سطر بين الكلمة الاساسية <kbd>return</kbd>  و التعبير</p>
+
+<pre class="brush: js notranslate">return
+a + b;
+</pre>
+
+<p>is transformed by ASI into:</p>
+
+<pre class="brush: js notranslate">return;
+a + b;
+</pre>
+
+<p>The console will warn "unreachable code after return statement".</p>
+
+<div class="note">Starting with Firefox 40, a warning is shown in the console if unreachable code is found after a <code>return</code> statement.</div>
+
+<p>To avoid this problem (to prevent ASI), you could use parentheses:</p>
+
+<pre class="brush: js notranslate">return (
+  a + b
+);
+</pre>
+
+<h2 id="Examples">Examples</h2>
+
+<h3 id="Interrupt_a_function">Interrupt a function</h3>
+
+<p>A function immediately stops at the point where <code>return</code> is called.</p>
+
+<pre class="brush: js notranslate">function counter() {
+ for (var count = 1; ; count++) { // infinite loop
+ console.log(count + 'A'); // until 5
+ if (count === 5) {
+ return;
+ }
+ console.log(count + 'B'); // until 4
+ }
+ console.log(count + 'C'); // never appears
+}
+
+counter();
+
+// Output:
+// 1A
+// 1B
+// 2A
+// 2B
+// 3A
+// 3B
+// 4A
+// 4B
+// 5A
+</pre>
+
+<h3 id="Returning_a_function">Returning a function</h3>
+
+<p>See also the article about <a href="/en-US/docs/Web/JavaScript/Closures">Closures</a>.</p>
+
+<pre class="brush: js notranslate">function magic() {
+ return function calc(x) { return x * 42; };
+}
+
+var answer = magic();
+answer(1337); // 56154
+</pre>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Specification</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-return-statement', 'Return statement')}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+
+
+<p>{{Compat("javascript.statements.return")}}</p>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope">Functions</a></li>
+ <li><a href="/en-US/docs/Web/JavaScript/Closures">Closures</a></li>
+</ul>
+
+<div id="gtx-trans" style="position: absolute; left: 345px; top: 1247px;">
+<div class="gtx-trans-icon"></div>
+</div>
diff --git a/files/ar/web/javascript/reference/الدوال/get/index.html b/files/ar/web/javascript/reference/الدوال/get/index.html
new file mode 100644
index 0000000000..d3789ba7bd
--- /dev/null
+++ b/files/ar/web/javascript/reference/الدوال/get/index.html
@@ -0,0 +1,165 @@
+---
+title: getter
+slug: Web/JavaScript/Reference/الدوال/get
+translation_of: Web/JavaScript/Reference/Functions/get
+---
+<div>{{jsSidebar("Functions")}}</div>
+
+<p>The <strong><code>get</code></strong> صينطاكس طعمنيققbinds an object property to a function that will be called when that property is looked up.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/functions-getter.html")}}</div>
+
+
+
+<h2 id="Syntax">Syntax</h2>
+
+<pre class="syntaxbox notranslate">{get <var>prop</var>() { ... } }
+{get [<var>expression</var>]() { ... } }</pre>
+
+<h3 id="Parameters">Parameters</h3>
+
+<dl>
+ <dt><code><var>prop</var></code></dt>
+ <dd>rty to bind to the given fun-tion.</dd>
+ <dt><code><var>expression</var></code></dt>
+ <dd>Starting with ECMAScript 2015, you can also use expressions for a computed property name to bind to the given function.</dd>
+</dl>
+
+<h2 id="Description">Description</h2>
+
+<p>احا الشبشب ضاع احا دا كان ةبصباع</p>
+
+<p>It is not possible to simultaneously have a getter bound to a property and have that property actually hold a value, although it <em>is</em> possible to use a getter and a setter in conjunction to create a type of pseudo-property.</p>
+
+<p>Note the following when working with the <code>get</code> syntax:</p>
+
+<ul>
+ <li>It can have an identifier which is either a number or a string;</li>
+ <li>It must have exactly zero parameters (see <a class="external" href="http://whereswalden.com/2010/08/22/incompatible-es5-change-literal-getter-and-setter-functions-must-now-have-exactly-zero-or-one-arguments/" rel="external nofollow">Incompatible <abbr title="ECMAScript 5th edition">ES5</abbr> change: literal getter and setter functions must now have exactly zero or one arguments</a> for more information);</li>
+ <li>It must not appear in an object literal with another <code>get</code> or with a data entry for the same property (<code>{ get x() { }, get x() { } }</code> and <code>{ x: ..., get x() { } }</code> are forbidden).</li>
+</ul>
+
+<h2 id="Examples">Examples</h2>
+
+<h3 id="Defining_a_getter_on_new_objects_in_object_initializers">Defining a getter on new objects in object initializers</h3>
+
+<p>This will create a pseudo-property <code>latest</code> for object <code>obj</code>, which will return the last array item in <code>log</code>.</p>
+
+<pre class="brush: js notranslate">const obj = {
+ log: ['example','test'],
+ get latest() {
+ if (this.log.length === 0) return undefined;
+ return this.log[this.log.length - 1];
+ }
+}
+console.log(obj.latest); // "test"
+</pre>
+
+<p>Note that attempting to assign a value to <code>latest</code> will not change it.</p>
+
+<h3 id="Deleting_a_getter_using_the_delete_operator">Deleting a getter using the <code>delete</code> operator</h3>
+
+<p>If you want to remove the getter, you can just {{jsxref("Operators/delete", "delete")}} it:</p>
+
+<pre class="brush: js notranslate">delete <var>obj</var>.latest;
+</pre>
+
+<h3 id="Defining_a_getter_on_existing_objects_using_defineProperty">Defining a getter on existing objects using <code>defineProperty</code></h3>
+
+<p>To append a getter to an existing object later at any time, use {{jsxref("Object.defineProperty()")}}.</p>
+
+<pre class="brush: js notranslate">const o = {a: 0};
+
+Object.defineProperty(o, 'b', { get: function() { return this.a + 1; } });
+
+console.log(o.b) // Runs the getter, which yields a + 1 (which is 1)</pre>
+
+<h3 id="Using_a_computed_property_name">Using a computed property name</h3>
+
+<pre class="brush: js notranslate">const expr = 'foo';
+
+const obj = {
+ get [expr]() { return 'bar'; }
+};
+
+console.log(obj.foo); // "bar"</pre>
+
+<h3 id="Smart_self-overwriting_lazy_getters">Smart / self-overwriting / lazy getters</h3>
+
+<p>Getters give you a way to <em>define</em> a property of an object, but they do not <em>calculate</em> the property's value until it is accessed. A getter defers the cost of calculating the value until the value is needed. If it is never needed, you never pay the cost.</p>
+
+<p>An additional optimization technique to lazify or delay the calculation of a property value and cache it for later access are <strong>smart (or "<a href="https://en.wikipedia.org/wiki/Memoization">memoized</a>") getters</strong>. The value is calculated the first time the getter is called, and is then cached so subsequent accesses return the cached value without recalculating it. This is useful in the following situations:</p>
+
+<ul>
+ <li>If the calculation of a property value is expensive (takes much RAM or CPU time, spawns worker threads, retrieves remote file, etc).</li>
+ <li>If the value isn't needed just now. It will be used later, or in some case it's not used at all.</li>
+ <li>If it's used, it will be accessed several times, and there is no need to re-calculate that value will never be changed or shouldn't be re-calculated.</li>
+</ul>
+
+<div class="note">
+<p>This means that you shouldn’t write a lazy getter for a property whose value you expect to change, because if the getter is lazy then it will not recalculate the value.</p>
+
+<p>Note that getters are not “lazy” or “memozied” by nature; you must implement this technique if you desire this behavior.</p>
+</div>
+
+<p>In the following example, the object has a getter as its own property. On getting the property, the property is removed from the object and re-added, but implicitly as a data property this time. Finally, the value getsreturn this.notifier = document.getElementById('bookmarked-notification-anchor'); },</p>
+
+<p>For Firefox code, see also the <code>XPCOMUtils.jsm</code> code module, which defines the <code><a href="/en-US/docs/Mozilla/JavaScript_code_modules/XPCOMUtils.jsm#defineLazyGetter()">defineLazyGetter()</a></code> function.</p>
+
+<h3 id="get_vs._defineProperty"><code>get</code> vs. <code>defineProperty</code></h3>
+
+<p>While using the <code>get</code> keyword and {{jsxref("Object.defineProperty()")}} have similar results, there is a subtle difference between the two when used on {{jsxref("classes")}}.</p>
+
+<p>When using <code>get</code> the property will be defined on the instance's prototype, while using {{jsxref("Object.defineProperty()")}} the property will be defined on the instance it is applied to.</p>
+
+<pre class="brush: js notranslate">class Example {
+ get hello() {
+ return 'world';
+ }
+}
+
+const obj = new Example();
+console.log(obj.hello);
+// "world"
+
+console.log(Object.getOwnPropertyDescriptor(obj, 'hello'));
+// undefined
+
+console.log(
+ Object.getOwnPropertyDescriptor(
+ Object.getPrototypeOf(obj), 'hello'
+ )
+);
+// { configurable: true, enumerable: false, get: function get hello() { return 'world'; }, set: undefined }</pre>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <thead>
+ <tr>
+ <th scope="col">Specification</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-method-definitions', 'Method definitions')}}</td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+
+
+<p>{{Compat("javascript.functions.get")}}</p>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Functions/set">setter</a></li>
+ <li>{{jsxref("Operators/delete", "delete")}}</li>
+ <li>{{jsxref("Object.defineProperty()")}}</li>
+ <li>{{jsxref("Object.defineGetter", "__defineGetter__")}}</li>
+ <li>{{jsxref("Object.defineSetter", "__defineSetter__")}}</li>
+ <li><a href="/en-US/docs/Web/JavaScript/Guide/Working_with_Objects#Defining_getters_and_setters">Defining Getters and Setters</a> in JavaScript Guide</li>
+</ul>
diff --git a/files/ar/web/javascript/reference/الدوال/index.html b/files/ar/web/javascript/reference/الدوال/index.html
new file mode 100644
index 0000000000..368d8af03d
--- /dev/null
+++ b/files/ar/web/javascript/reference/الدوال/index.html
@@ -0,0 +1,645 @@
+---
+title: الدوال
+slug: Web/JavaScript/Reference/الدوال
+translation_of: Web/JavaScript/Reference/Functions
+---
+<div>{{jsSidebar("Functions")}}</div>
+
+<p>Generally speaking, a function is a "subprogram" that can be <em>called</em> by code external (or internal in the case of recursion) to the function. Like the program itself, a function is composed of a sequence of statements called the <em>function body</em>. Values can be <em>passed</em> to a function, and the function will <em>return</em> a value.</p>
+
+<p>In JavaScript, functions are first-class objects, because they can have properties and methods just like any other object. What distinguishes them from other objects is that functions can be called. In brief, they are <code><a href="/en-US/docs/JavaScript/Reference/Global_Objects/Function">Function</a></code> objects.</p>
+
+<p>For more examples and explanations, see also the <a href="/en-US/docs/Web/JavaScript/Guide/Functions">JavaScript guide about functions</a>.</p>
+
+<h2 id="Description">Description</h2>
+
+<p>Every function in JavaScript is a <code>Function</code> object. See {{jsxref("Function")}} for information on properties and methods of <code>Function</code> objects.</p>
+
+<p>Functions are not the same as procedures. A function always returns a value, whereas a procedure might not.</p>
+
+<p>To return a value other than the default, a function must have a <code><a href="/en-US/docs/Web/JavaScript/Reference/Statements/return">return</a></code> statement that specifies the value to return. A function without a return statement will return a default value. In the case of a <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/constructor">constructor</a> called with the <code><a href="/en-US/docs/Web/JavaScript/Reference/Operators/new">new</a></code> keyword, the default value is the value of its <code>this</code> parameter. For all other functions, the default return value is <code>undefined</code>.</p>
+
+<p>The parameters of a function call are the function's <em>arguments</em>. Arguments are passed to functions <em>by value</em>. If the function changes the value of an argument, this change is not reflected globally or in the calling function. However, object references are values, too, and they are special: if the function changes the referred object's properties, that change is visible outside the function, as shown in the following example:</p>
+
+<pre class="brush: js">/* Declare the function 'myFunc' */
+function myFunc(theObject) {
+ theObject.brand = "Toyota";
+ }
+
+ /*
+ * Declare variable 'mycar';
+ * create and initialize a new Object;
+ * assign reference to it to 'mycar'
+ */
+ var mycar = {
+ brand: "Honda",
+ model: "Accord",
+ year: 1998
+ };
+
+ /* Logs 'Honda' */
+ console.log(mycar.brand);
+
+ /* Pass object reference to the function */
+ myFunc(mycar);
+
+ /*
+ * Logs 'Toyota' as the value of the 'brand' property
+ * of the object, as changed to by the function.
+ */
+ console.log(mycar.brand);
+</pre>
+
+<p>The <a href="/en-US/docs/Web/JavaScript/Reference/Operators/this"><code>this</code> keyword</a> does not refer to the currently executing function, so you must refer to <code>Function</code> objects by name, even within the function body.</p>
+
+<h2 id="Defining_functions">Defining functions</h2>
+
+<p>There are several ways to define functions:</p>
+
+<h3 id="The_function_declaration_(function_statement)">The function declaration (<code>function</code> statement)</h3>
+
+<p>There is a special syntax for declaring functions (see <a href="/en-US/docs/Web/JavaScript/Reference/Statements/function">function statement</a> for details):</p>
+
+<pre class="syntaxbox">function <em>name</em>([<em>param</em>[, <em>param</em>[, ... <em>param</em>]]]) {
+ <em>statements</em>
+}
+</pre>
+
+<dl>
+ <dt><code>name</code></dt>
+ <dd>The function name.</dd>
+</dl>
+
+<dl>
+ <dt><code>param</code></dt>
+ <dd>The name of an argument to be passed to the function. A function can have up to 255 arguments.</dd>
+</dl>
+
+<dl>
+ <dt><code>statements</code></dt>
+ <dd>The statements comprising the body of the function.</dd>
+</dl>
+
+<h3 id="The_function_expression_(function_expression)">The function expression (<code>function</code> expression)</h3>
+
+<p>A function expression is similar to and has the same syntax as a function declaration (see <a href="/en-US/docs/Web/JavaScript/Reference/Operators/function">function expression</a> for details):</p>
+
+<pre class="syntaxbox">function [<em>name</em>]([<em>param</em>[, <em>param</em>[, ... <em>param</em>]]]) {
+ <em>statements</em>
+}
+</pre>
+
+<dl>
+ <dt><code>name</code></dt>
+ <dd>The function name. Can be omitted, in which case the function becomes known as an anonymous function.</dd>
+</dl>
+
+<dl>
+ <dt><code>param</code></dt>
+ <dd>The name of an argument to be passed to the function. A function can have up to 255 arguments.</dd>
+ <dt><code>statements</code></dt>
+ <dd>The statements comprising the body of the function.</dd>
+</dl>
+
+<h3 id="The_generator_function_declaration_(function*_statement)">The generator function declaration (<code>function*</code> statement)</h3>
+
+<div class="note">
+<p><strong>Note:</strong> Generator functions are an <em>experimental technology,</em> part of the ECMAScript 6 proposal, and are not widely supported by browsers yet.</p>
+</div>
+
+<p>There is a special syntax for generator function declarations (see {{jsxref('Statements/function*', 'function* statement')}} for details):</p>
+
+<pre class="syntaxbox">function* <em>name</em>([<em>param</em>[, <em>param</em>[, ... <em>param</em>]]]) {
+ <em>statements</em>
+}
+</pre>
+
+<dl>
+ <dt><code>name</code></dt>
+ <dd>The function name.</dd>
+</dl>
+
+<dl>
+ <dt><code>param</code></dt>
+ <dd>The name of an argument to be passed to the function. A function can have up to 255 arguments.</dd>
+</dl>
+
+<dl>
+ <dt><code>statements</code></dt>
+ <dd>The statements comprising the body of the function.</dd>
+</dl>
+
+<h3 id="The_generator_function_expression_(function*_expression)">The generator function expression (<code>function*</code> expression)</h3>
+
+<div class="note">
+<p><strong>Note:</strong> Generator functions are an <em>experimental technology,</em> part of the ECMAScript 6 proposal, and are not widely supported by browsers yet.</p>
+</div>
+
+<p>A generator function expression is similar to and has the same syntax as a generator function declaration (see {{jsxref('Operators/function*', 'function* expression')}} for details):</p>
+
+<pre class="syntaxbox">function* [<em>name</em>]([<em>param</em>[, <em>param</em>[, ... <em>param</em>]]]) {
+ <em>statements</em>
+}
+</pre>
+
+<dl>
+ <dt><code>name</code></dt>
+ <dd>The function name. Can be omitted, in which case the function becomes known as an anonymous function.</dd>
+</dl>
+
+<dl>
+ <dt><code>param</code></dt>
+ <dd>The name of an argument to be passed to the function. A function can have up to 255 arguments.</dd>
+ <dt><code>statements</code></dt>
+ <dd>The statements comprising the body of the function.</dd>
+</dl>
+
+<h3 id="The_arrow_function_expression_(>)">The arrow function expression (=&gt;)</h3>
+
+<div class="note">
+<p><strong>Note:</strong> Arrow function expressions are an <em>experimental technology,</em> part of the ECMAScript 6 proposal, and are not widely supported by browsers yet.</p>
+</div>
+
+<p>An arrow function expression has a shorter syntax and lexically binds its <code>this</code> value (see <a href="/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions">arrow functions</a> for details):</p>
+
+<pre class="syntaxbox">([param[, param]]) =&gt; {
+ statements
+}
+
+param =&gt; expression
+</pre>
+
+<dl>
+ <dt><code>param</code></dt>
+ <dd>The name of an argument. Zero arguments need to be indicated with <code>()</code>.  For only one argument, the parentheses are not required. (like <code>foo =&gt; 1</code>)</dd>
+ <dt><code>statements or expression</code></dt>
+ <dd>Multiple statements need to be enclosed in brackets. A single expression requires no brackets. The expression is also the implicit return value of the function.</dd>
+</dl>
+
+<h3 id="The_Function_constructor">The <code>Function</code> constructor</h3>
+
+<div class="note">
+<p><strong>Note:</strong> Using the <code>Function</code> constructor to create functions is not recommended since it needs the function body as a string which may prevent some JS engine optimizations and can also cause other problems.</p>
+</div>
+
+<p>As all other objects, {{jsxref("Function")}} objects can be created using the <code>new</code> operator:</p>
+
+<pre class="syntaxbox">new Function (<em>arg1</em>, <em>arg2</em>, ... <em>argN</em>, <em>functionBody</em>)
+</pre>
+
+<dl>
+ <dt><code>arg1, arg2, ... arg<em>N</em></code></dt>
+ <dd>Zero or more names to be used by the function as formal parameters. Each must be a proper JavaScript identifier.</dd>
+</dl>
+
+<dl>
+ <dt><code>functionBody</code></dt>
+ <dd>A string containing the JavaScript statements comprising the function body.</dd>
+</dl>
+
+<p>Invoking the <code>Function</code> constructor as a function (without using the <code>new</code> operator) has the same effect as invoking it as a constructor.</p>
+
+<h3 id="The_GeneratorFunction_constructor">The <code>GeneratorFunction</code> constructor</h3>
+
+<div class="note">
+<p><strong>Note:</strong> Arrow function expressions are an <em>experimental technology,</em> part of the ECMAScript 6 proposal, and are not widely supported by browsers yet.</p>
+</div>
+
+<div class="note">
+<p><strong>Note:</strong> <code>GeneratorFunction</code> is not a global object, but could be obtained from generator function instance (see {{jsxref("GeneratorFunction")}} for more detail).</p>
+</div>
+
+<div class="note">
+<p><strong>Note:</strong> Using the <code>GeneratorFunction</code> constructor to create functions is not recommended since it needs the function body as a string which may prevent some JS engine optimizations and can also cause other problems.</p>
+</div>
+
+<p>As all other objects, {{jsxref("GeneratorFunction")}} objects can be created using the <code>new</code> operator:</p>
+
+<pre class="syntaxbox">new GeneratorFunction (<em>arg1</em>, <em>arg2</em>, ... <em>argN</em>, <em>functionBody</em>)
+</pre>
+
+<dl>
+ <dt><code>arg1, arg2, ... arg<em>N</em></code></dt>
+ <dd>Zero or more names to be used by the function as formal argument names. Each must be a string that conforms to the rules for a valid JavaScript identifier or a list of such strings separated with a comma; for example "<code>x</code>", "<code>theValue</code>", or "<code>a,b</code>".</dd>
+</dl>
+
+<dl>
+ <dt><code>functionBody</code></dt>
+ <dd>A string containing the JavaScript statements comprising the function definition.</dd>
+</dl>
+
+<p>Invoking the <code>Function</code> constructor as a function (without using the <code>new</code> operator) has the same effect as invoking it as a constructor.</p>
+
+<h2 id="Function_parameters">Function parameters</h2>
+
+<div class="note">
+<p><strong>Note:</strong> Default and rest parameters are <em>experimental technology,</em> part of the ECMAScript 6 proposal, and are not widely supported by browsers yet.</p>
+</div>
+
+<h3 id="Default_parameters">Default parameters</h3>
+
+<p>Default function parameters allow formal parameters to be initialized with default values if no value or <code>undefined</code> is passed. For more details, see<a href="/en-US/docs/Web/JavaScript/Reference/Functions/Default_parameters"> default parameters</a>.</p>
+
+<h3 id="Rest_parameters">Rest parameters</h3>
+
+<p>The rest parameter syntax allows to represent an indefinite number of arguments as an array. For more details, see <a href="/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters">rest parameters</a>.</p>
+
+<h2 id="The_arguments_object">The <code>arguments</code> object</h2>
+
+<p>You can refer to a function's arguments within the function by using the <code>arguments</code> object. See <a href="/en-US/docs/Web/JavaScript/Reference/Functions/arguments">arguments</a>.</p>
+
+<ul>
+ <li><code><a href="/en-US/docs/JavaScript/Reference/Functions_and_function_scope/arguments">arguments</a></code>: An array-like object containing the arguments passed to the currently executing function.</li>
+ <li><code><a href="/en-US/docs/JavaScript/Reference/Functions_and_function_scope/arguments/callee">arguments.callee</a></code> {{Deprecated_inline}}: The currently executing function.</li>
+ <li><code><a href="/en-US/docs/JavaScript/Reference/Functions_and_function_scope/arguments/caller">arguments.caller</a></code> {{Obsolete_inline}} : The function that invoked the currently executing function.</li>
+ <li><code><a href="/en-US/docs/JavaScript/Reference/Functions_and_function_scope/arguments/length">arguments.length</a></code>: The number of arguments passed to the function.</li>
+</ul>
+
+<h2 id="Defining_method_functions">Defining method functions</h2>
+
+<h3 id="Getter_and_setter_functions">Getter and setter functions</h3>
+
+<p>You can define getters (accessor methods) and setters (mutator methods) on any standard built-in object or user-defined object that supports the addition of new properties. The syntax for defining getters and setters uses the object literal syntax.</p>
+
+<dl>
+ <dt><a href="/en-US/docs/Web/JavaScript/Reference/Functions/get">get</a></dt>
+ <dd>
+ <p>Binds an object property to a function that will be called when that property is looked up.</p>
+ </dd>
+ <dt><a href="/en-US/docs/Web/JavaScript/Reference/Functions/set">set</a></dt>
+ <dd>Binds an object property to a function to be called when there is an attempt to set that property.</dd>
+</dl>
+
+<h3 id="Method_definition_syntax">Method definition syntax</h3>
+
+<div class="note">
+<p><strong>Note:</strong> <em>Method definitions are experimental technology,</em> part of the ECMAScript 6 proposal, and are not widely supported by browsers yet.</p>
+</div>
+
+<p>Starting with ECMAScript 6, you are able to define own methods in a shorter syntax, similar to the getters and setters. See <a href="/en-US/docs/Web/JavaScript/Reference/Functions/Method_definitions">method definitions</a> for more information.</p>
+
+<pre class="brush: js">var obj = {
+ foo() {},
+  bar() {}
+};</pre>
+
+<h2 id="Function_constructor_vs._function_declaration_vs._function_expression"><code>Function</code> constructor vs. function declaration vs. function expression</h2>
+
+<p>Compare the following:</p>
+
+<p>A function defined with the <code>Function</code> constructor assigned to the variable <code>multiply:</code></p>
+
+<pre class="brush: js">function multiply(x, y) {
+ return x * y;
+}
+</pre>
+
+<p>A <em>function expression</em> of an anonymous function assigned to the variable <code>multiply:</code></p>
+
+<pre class="brush: js">var multiply = function(x, y) {
+ return x * y;
+};
+</pre>
+
+<p>A <em>function expression</em> of a function named <code>func_name</code> assigned to the variable <code>multiply:</code></p>
+
+<pre class="brush: js">var multiply = function func_name(x, y) {
+ return x * y;
+};
+</pre>
+
+<h3 id="Differences">Differences</h3>
+
+<p>All do approximately the same thing, with a few subtle differences:</p>
+
+<p>There is a distinction between the function name and the variable the function is assigned to. The function name cannot be changed, while the variable the function is assigned to can be reassigned. The function name can be used only within the function's body. Attempting to use it outside the function's body results in an error (or <code>undefined</code> if the function name was previously declared via a <code>var</code> statement). For example:</p>
+
+<pre class="brush: js">var y = function x() {};
+alert(x); // throws an error
+</pre>
+
+<p>The function name also appears when the function is serialized via <a href="/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/toString"><code>Function</code>'s toString method</a>.</p>
+
+<p>On the other hand, the variable the function is assigned to is limited only by its scope, which is guaranteed to include the scope where the function is declared in.</p>
+
+<p>As the 4th example shows, the function name can be different from the variable the function is assigned to. They have no relation to each other.A function declaration also creates a variable with the same name as the function name. Thus, unlike those defined by function expressions, functions defined by function declarations can be accessed by their name in the scope they were defined in:</p>
+
+<p>A function defined by '<code>new Function'</code> does not have a function name. However, in the <a href="/en-US/docs/Mozilla/Projects/SpiderMonkey">SpiderMonkey</a> JavaScript engine, the serialized form of the function shows as if it has the name "anonymous". For example, <code>alert(new Function())</code> outputs:</p>
+
+<pre class="brush: js">function anonymous() {
+}
+</pre>
+
+<p>Since the function actually does not have a name, <code>anonymous</code> is not a variable that can be accessed within the function. For example, the following would result in an error:</p>
+
+<pre class="brush: js">var foo = new Function("alert(anonymous);");
+foo();
+</pre>
+
+<p>Unlike functions defined by function expressions or by the <code>Function</code> constructor, a function defined by a function declaration can be used before the function declaration itself. For example:</p>
+
+<pre class="brush: js">foo(); // alerts FOO!
+function foo() {
+ alert('FOO!');
+}
+</pre>
+
+<p>A function defined by a function expression inherits the current scope. That is, the function forms a closure. On the other hand, a function defined by a <code>Function</code> constructor does not inherit any scope other than the global scope (which all functions inherit).</p>
+
+<p>Functions defined by function expressions and function declarations are parsed only once, while those defined by the <code>Function</code> constructor are not. That is, the function body string passed to the <code>Function</code> constructor must be parsed each and every time the constructor is called. Although a function expression creates a closure every time, the function body is not reparsed, so function expressions are still faster than "<code>new Function(...)</code>". Therefore the <code>Function</code> constructor should generally be avoided whenever possible.</p>
+
+<p>It should be noted, however, that function expressions and function declarations nested within the function generated by parsing a <code>Function constructor</code> 's string aren't parsed repeatedly. For example:</p>
+
+<pre class="brush: js">var foo = (new Function("var bar = \'FOO!\';\nreturn(function() {\n\talert(bar);\n});"))();
+foo(); // The segment "function() {\n\talert(bar);\n}" of the function body string is not re-parsed.</pre>
+
+<p>A function declaration is very easily (and often unintentionally) turned into a function expression. A function declaration ceases to be one when it either:</p>
+
+<ul>
+ <li>becomes part of an expression</li>
+ <li>is no longer a "source element" of a function or the script itself. A "source element" is a non-nested statement in the script or a function body:</li>
+</ul>
+
+<pre class="brush: js">var x = 0; // source element
+if (x == 0) { // source element
+ x = 10; // not a source element
+ function boo() {} // not a source element
+}
+function foo() { // source element
+ var y = 20; // source element
+ function bar() {} // source element
+ while (y == 10) { // source element
+ function blah() {} // not a source element
+ y++; // not a source element
+ }
+}
+</pre>
+
+<h3 id="Examples">Examples</h3>
+
+<pre class="brush: js">// function declaration
+function foo() {}
+
+// function expression
+(function bar() {})
+
+// function expression
+x = function hello() {}
+
+
+if (x) {
+ // function expression
+ function world() {}
+}
+
+
+// function declaration
+function a() {
+ // function declaration
+ function b() {}
+ if (0) {
+ // function expression
+ function c() {}
+ }
+}
+</pre>
+
+<h2 id="Block-level_functions">Block-level functions</h2>
+
+<p>In <a href="/en-US/docs/Web/JavaScript/Reference/Strict_mode">strict mode</a>, starting with ES2015 (ES6), functions inside blocks are now scoped to that block. Prior to ES6, block-level functions were forbidden in strict mode.</p>
+
+<pre class="brush: js">'use strict';
+
+function f() {
+ return 1;
+}
+
+{
+ function f() {
+ return 2;
+ }
+}
+
+f() === 1; // true
+
+// f() === 2 in non-strict mode
+</pre>
+
+<h3 id="Block-level_functions_in_non-strict_code">Block-level functions in non-strict code</h3>
+
+<p>In a word: Don't.</p>
+
+<p>In non-strict code, function declarations inside blocks behave strangely. For example:</p>
+
+<pre class="brush: js">if (shouldDefineZero) {
+ function zero() { // DANGER: compatibility risk
+ console.log("This is zero.");
+ }
+}
+</pre>
+
+<p>ES2015 says that if <code>shouldDefineZero</code> is false, then <code>zero</code> should never be defined, since the block never executes. However, it's a new part of the standard. Historically, this was left unspecified, and some browsers would define <code>zero</code> whether the block executed or not.</p>
+
+<p>In <a href="/en-US/docs/Web/JavaScript/Reference/Strict_mode">strict mode</a>, all browsers that support ES2015 handle this the same way: <code>zero</code> is defined only if <code>shouldDefineZero</code> is true, and only in the scope of the <code>if</code>-block.</p>
+
+<p>A safer way to define functions conditionally is to assign a function expression to a variable:</p>
+
+<pre class="brush: js">var zero;
+if (0) {
+ zero = function() {
+ console.log("This is zero.");
+ };
+}
+</pre>
+
+<h2 id="Examples_2">Examples</h2>
+
+<h3 id="Returning_a_formatted_number">Returning a formatted number</h3>
+
+<p>The following function returns a string containing the formatted representation of a number padded with leading zeros.</p>
+
+<pre class="brush: js">// This function returns a string padded with leading zeros
+function padZeros(num, totalLen) {
+ var numStr = num.toString(); // Initialize return value as string
+ var numZeros = totalLen - numStr.length; // Calculate no. of zeros
+ for (var i = 1; i &lt;= numZeros; i++) {
+ numStr = "0" + numStr;
+ }
+ return numStr;
+}
+</pre>
+
+<p>The following statements call the padZeros function.</p>
+
+<pre class="brush: js">var result;
+result = padZeros(42,4); // returns "0042"
+result = padZeros(42,2); // returns "42"
+result = padZeros(5,4); // returns "0005"
+</pre>
+
+<h3 id="Determining_whether_a_function_exists">Determining whether a function exists</h3>
+
+<p>You can determine whether a function exists by using the <code>typeof</code> operator. In the following example, a test is peformed to determine if the <code>window</code> object has a property called <code>noFunc</code> that is a function. If so, it is used; otherwise some other action is taken.</p>
+
+<pre class="brush: js"> if ('function' == typeof window.noFunc) {
+ // use noFunc()
+ } else {
+ // do something else
+ }
+</pre>
+
+<p>Note that in the <code>if</code> test, a reference to <code>noFunc</code> is used—there are no brackets "()" after the function name so the actual function is not called.</p>
+
+<h2 id="Specifications">Specifications</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Specification</th>
+ <th scope="col">Status</th>
+ <th scope="col">Comment</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES1')}}</td>
+ <td>{{Spec2('ES1')}}</td>
+ <td>Initial definition. Implemented in JavaScript 1.0</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES5.1', '#sec-13', 'Function Definition')}}</td>
+ <td>{{Spec2('ES5.1')}}</td>
+ <td> </td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-function-definitions', 'Function definitions')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>New: Arrow functions, Generator functions, default parameters, rest parameters.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-function-definitions', 'Function definitions')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Browser_compatibility">Browser compatibility</h2>
+
+<p>{{CompatibilityTable}}</p>
+
+<div id="compat-desktop">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Chrome</th>
+ <th>Firefox (Gecko)</th>
+ <th>Internet Explorer</th>
+ <th>Opera</th>
+ <th>Safari</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ <tr>
+ <td>Generator functions</td>
+ <td>39</td>
+ <td>{{CompatGeckoDesktop("26.0")}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>26</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ <tr>
+ <td>Arrow functions</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoDesktop("22.0")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ <tr>
+ <td>Block-level functions</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatGeckoDesktop("46.0")}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<div id="compat-mobile">
+<table class="compat-table">
+ <tbody>
+ <tr>
+ <th>Feature</th>
+ <th>Android</th>
+ <th>Chrome for Android</th>
+ <th>Firefox Mobile (Gecko)</th>
+ <th>IE Mobile</th>
+ <th>Opera Mobile</th>
+ <th>Safari Mobile</th>
+ </tr>
+ <tr>
+ <td>Basic support</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ <td>{{CompatVersionUnknown}}</td>
+ </tr>
+ <tr>
+ <td>Generator functions</td>
+ <td>{{CompatUnknown}}</td>
+ <td>39</td>
+ <td>{{CompatGeckoMobile("26.0")}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>26</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ <tr>
+ <td>Arrow functions</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatGeckoMobile("22.0")}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ <td>{{CompatNo}}</td>
+ </tr>
+ <tr>
+ <td>Block-level functions</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatGeckoMobile("46.0")}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ <td>{{CompatUnknown}}</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2 id="See_also">See also</h2>
+
+<ul>
+ <li>{{jsxref("Statements/function", "function statement")}}</li>
+ <li>{{jsxref("Operators/function", "function expression")}}</li>
+ <li>{{jsxref("Statements/function*", "function* statement")}}</li>
+ <li>{{jsxref("Operators/function*", "function* expression")}}</li>
+ <li>{{jsxref("Function")}}</li>
+ <li>{{jsxref("GeneratorFunction")}}</li>
+ <li>{{jsxref("Functions/Arrow_functions", "Arrow functions")}}</li>
+ <li>{{jsxref("Functions/Default_parameters", "Default parameters")}}</li>
+ <li>{{jsxref("Functions/rest_parameters", "Rest parameters")}}</li>
+ <li>{{jsxref("Functions/arguments", "Arguments object")}}</li>
+ <li>{{jsxref("Functions/get", "getter")}}</li>
+ <li>{{jsxref("Functions/set", "setter")}}</li>
+ <li>{{jsxref("Functions/Method_definitions", "Method definitions")}}</li>
+ <li><a href="/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope" title="JavaScript/Reference/Functions_and_function_scope">Functions and function scope</a></li>
+</ul>