ملخص الـ JS-Part2
ملخص الـ JS-Part2
المرسلي سيدنا محمد ﷺ عل رأشف بسم هللا الرحمن الرحيم والصالة و السالم ي
ن
أجمعي وعل اهله وصحبه
الجزء نJS ملخ ـ ـص لكل ما تم دراسته نف
الثان
ي ي
Week 14
What Is BOM ? Lesson #102
Week 15
Local Storage Lesson #111
Week 16
Destructuring Arrays Part 1 Lesson #115
Destructuring Arrays Part 2 Lesson #116
Week 17
Set Data Type And Methods Lesson #123
Week 19
OOP Introduction Lesson #147
Week 20
Date And Time Introduction Lesson #159
Week 21
What Is JSON Lesson #169
JSON Syntax And Compare With JS Object Lesson #170
Week 22
Callback Hell Or Pyramid Of Doom Lesson #179
ُ
مقدمة بسيطة مهمة وكان البد منها
سالم من هللا عليكم ورحمته وبركاته نف الحقيقة انا قبل ما ر
انش الملخص دا كان عندي إحساس انه لألسف ٌ
ي
ن
مضايقن جدا ويارب يكون إحساس زائف بس شء ر
ي الل فاتت ودا يمش عل نفس مستوي كل الملخصات ي
ن
لسببي دا كان راجع
التان دا من الملخص كنت محطوط كت طلب الجزء ن ادن وهو ان من ر السبب األول :هو سبب خارج عن ار ر
ي ن ي
عمل فيه متقلقش ولكن مستواه مكنش ف هللا اتقيت انا ن
صدقن ولكن ،انجزه عايز إن تحت ضغط ن
ي ي ي ي
واكت فيه ودا ينقلنا لتانن
اكت رالمستوي الل انا بطمح ليه ويمكن لو كنت خدت وقت زيادة كنت تعمقت ر
ي ي
سبب
الل هيبدا يقرأ عل ان ف الحقيقة ان الجزء دا من المخلص ككل انا اعتمدت فيه اما السبب ن
التان :ف ن
ن ي ي ي ي
داع للتوغل فيها زي ما كنت بعمل يف الجزء ر ر
الن ال ي بف شخص ناضج برمجيا لفهم ابسط األشياء ي هو ي
األول
ن
بمعن؟!
ي
ن
الجزء األول انا كنت مهتم جدا بتفصيص كل حاجة حرفيا الن خدت يف الحسبان ان
بالتمجة بشكل
الل هيقراه هيكون دا أول احتكاك ليه باللغة دي +ربما يكون اول احتكاك ليه ر
الشخص ي
ن
عام فكنت مهتم اتعمق يف تفاصيل داخل تفاصيل عشان أوضح كل حاجة قدر االمكان
التان انا اعتمدت ان الشخص خالص بقا عنده قدرة يحلل بعض الحاجات ويستنتج من تلقاء لكن نف الجزء ن
ي ي
الل قرأه ويشوف
نفسه حاجات انا مش موضحها ،بل يمكن صممت ان الشخص الزم يقرأ كويس ويحلل ي
عل تحليالت من دماغه نتيجة المكتوب بناءا ي
ن
الل فيها لحد ما تدوس OKوتقفلها ودا بيعطل
ي البيانات او الصفحة تحميل بتوقف انها Alert ـ لا ف
أسوء حاجه ي
تحميل الصفحة
Sweetalert
دا بديل كويس جدا للـ Alertالعادي
ن
يعن False ن
يعن Trueولو ضغط Cancelي الـ Confirmبيكون فيها Massageلو ضغط Okي
وعل أساس الـ Valueدي بيتنفذ الـ Action Boolean Value جع ًإذا الـ Confirmدي ر
بت
ي
ن
الل فوق دا انا عملت متغت اسمه confirmMSgبخزن فيه الـ Confirmبالـ Massageبتاعتها
ي Code ـ لا ف
ي
يعن بقت True ن ر
بعد كدا عملت شط وهللا لو الـ confirmMSgاليوزر ضغط OKي
اطبع رسالة ""Item Deleted
يعن Falseاطبع رسالة ""Item Not Deletedن
ولو اليورز ضغط Cancelي
انا عملت متغت الـ confirmMSgعشان اقدر استخدم المتغت دا نفسه نف نان اعمل بيه ر
الشط ي ي
ن
من رسالة هتظهر لليوزر وبعدها Default Messageتكون زي Placeholderكدا
الـ promptدا بيطلب ي
ه دي الـ Placeholderاو الـ Default Message
Write Day With 3 Charactersي
ن ن
وخل يف قاموسك انا انهاردا هعمل 1و 2و 3 ي شيل من قاموسك يف يوم من األيام هعمل كذا وكذا
ر
دلوقن حاال بالمتاح مفيش بكرا دي انساها وابدأ
ي
ن ن
ثوان يف الـ Console
المفروض ان الكود دا معناه انه هيطبع كلمه " "Msgبعد 3ي
ن
ممكن استخدم Named Functionعادي واعوض باسمها يف الـ setTimeoutزي المثال دا وهتنفذ المطلوب
ن ن
ثوان وتطبع رسالة الـ clearTimeoutهيوقف عمل الـ ... setTimeoutي
يعن لو عندي Functionقدامها 5ي
معينة الـ clearTimeoutبيوقف عمل الـ Functionدي
ن
من IDأو Counter
الـ clearTimeoutبيقبل ي
By: Amr Elsayed
الل فات دا ايه ر
طيب شح الكود ي
ن
عملت زرار اسمه Stopو مسكت الزرار دا وخزنته يف المتغت btn
عملت Named Functionباسم sayMsgكل وظيفتها انها تطبع رسالة ""Iam Message
ن
بعد كدا استخدمت الـ sayMsgدي يف الـ setTimeoutومعاه الـ timeنفسه
ن ن
الل هستخدمه عشان امرره يف الـ clearTimeout
ي counter اسمه متغت ف
خزنت الـ setTimeoutدي نفسها ي
عشان يوقف عمل الـ setTimeout
ن
ه بالظبط زي الـ setTimeoutيف طريقة الكتابة
ببساطة شديدة جدا الـ setIntervalي
الل بتحدده
الفرق الوحيد بينهم ان الـ setTimeoutبتنفذ Functionمرة واحده بعد الوقت ي
الل انت محدده ولكن بدون توقف هتفضل
عل حسب الوقت ي
فه بتنفذ الـ Functionي
اما الـ setIntervalي
تعيد تنفيذ الـ Functionلحد ما تعملها clear
ر
يبف الـ setTimeoutبتنفذ Functionمرة واحدة بس وخالص اما الـ setIntervalبتكرر الـ Functionلحد ما
ي
تعملها Clear
المثال األول لـ Anonymous Function
ن ن
معن الكود دا ان كلمة Msgهتتطبع يف الـ Consoleكل ثانية لماال نهاية لحد ما تعمل Clearللـ Code
ي
المثال ن
التان لـ Named Function
ي
ن
كذلك الحال لو فيه Argumentsكل حاجه عملنها يف الـ setTimeoutهتتكرر عادي بس فيه فرق زي ما قولنا
ان الـ setIntervalبيفضل يكرر الـ Function
هنا بقا انا عندي Counterبيقلل من الرقم 5ويفضل ينقص 1كل ثانيه ممكن استخدم الـ clearInterval
ن
بدون ما يكون يف زرار ...ببساطة شديدة جدا هعمل رشط لما الـرقم 5دا يساااوي " "0العداد يقفل
التنازل
ي او الـ setIntervalتقف ومتكملش العد
ن
بالش اعذار وحجج او بالش تحبب نفسك يف القاعدة واالنتخة قوم اعمل لنفسك جدول بسيط حدد فيه
أولوياتك وابدأ تنفيذها واحدة ورا التانية وكرر دا يوميا
العل العظيم
ي ال حول وال قوة اال باهلل
ن
الظالمي ن
إن كنت من
ال إله اال انت سبحانك ي
ال تنسونا من دعواتكم
Window Location Object Lesson #106
ن
بمعن اصح اعمله getوبعدين اغت قيمته لو حابب set بتاع او ممكن استعلم عن الـ href
ي ي
JS
ن ن
كمان من خالل الـ hrefاقدر اروح الي sectionموجود عندي يف الصفحة او اقدر اروح الي صفحة تانية يف أي
ن
تان
موقع ي
الل مفتوح منه port ـ لا وكمان بتاع الموقع اسم اعرف انبيتم استخدام الـ hostنف ن
ي ي ي ي
ر
والـ hostnameزيه ولكن الفرق انه مش بيجيب الـ portبس مش اكت
ر ن
هالف اسم الموقع
ي يعن لو فتحت موقع اكاديمية الزيرو واستعلمت عن الـ host
ي
ه httpوال https
الل بفتح منها الموقع هل ي
عن طريق الـ protocolبقدر استعلم عن االتفاقية ي
ن
الفرق بينهم ان استخدام الـ replaceمبيخليش الصفحات تتسجل يف الـ Historyالنه بيعمل استبدال للصفحة
ن
المفتوحة بصفحة تانية فدي بتحل محل دي ومبيكونش ليها وجود يف الـ historyلو اتغتت بعد كدا لصفحة
تانية
ن
اما الـ assignبتحتفظ بالصفحات عادي يف الـ historyزيــها زي الـ href
ن
أوال الـ Closeالمتخصصة يف قفل الـ Windowمش هتشتغل غت مع Windowمعمولها Openمن الـ JS
ن ن
وف حاجات ليها Default Value
من 4حاجات وكلهم اختياري ي
الـ window.openبقا بتقبل ي
الل هتتفتح
] URL [Optالخاص بالـ windowي
] Window Name Or Target Attr [Optبتدي identifierللصفحة بتاعتك او ممكن تكتب
ن
الل بيفتح الصفحة مكان
ي _self تكتب او New Tab ف
الل بيفتح الصفحة ي
target attributeزي الـ _blankي
المفتوحة
ن ن
الممتات بتاعتها زي طولها وعرضها وموقعها ف والل من خاللها تقدر تتحكم يف
] Win Features [Optي
الشاشة وهكذا
ن
] History Replace [Optلو انت عايز تفتح Windowمكان windowتانية هل هتسيبها يف الـ Historyوال
ال وبتقبل boolean value
ن
الل اتفتحت يف الـ History
بيجيب الـ Lengthاو عدد الصفحات ي
الـ ScrollToبتستخدم عشان لو حابب اعمل Scrollلمكان محدد من الصفحة ولو فضلت تكررها هيعيد
ن
يعن
الـ scrollingلنفس االبعاد من جديد مش هيكمل ع القديم ي
الـ ScrollByبتستخدم عشان لو حابب اعمل Scrollلمكان محدد من الصفحة ولو فضلت تكررها هيكمل الـ
ن
تان ويكمل ع القديم عكس الـ ScrollTo ن
يعن كل مره تكتبها هيعمل scrollي
scrollingلنفس االبعاد ي
ن
بمعن أوضح الـفرق ن
بي الـ ScrollToوالـ scrollByهو ان الـ ScrollToلما تستخدمها وتكتب فيها احداثيات ي
معينة هيوديك لالحداثيات دي ولو كررت كتابة الـ ScrollToبنفس االحداثيات هوديك ليها برضو من جديد
تان هتبدا من مكان ما كنت واقف عند اخرهتوح ليها ولو عيدتها ن
اما الـ scrollByبقا لو كتبت احداثيات معينة ر
ي
ن
تان مش هيبدا من ن
احداثيات وصلتلها وتكمل عليها ملوش عالقة انت واقف في مكان ما تكون واقف هيتحرك ي
األول زي الـ ScrollToويروح لنفس االحداثيات
ن ن
اليمي 3000pxوهتحكم يف سلوب الـ scrollبحيث يكون هنا انا بعمل Scrollمن ع الشمال 2000pxومن ع
smoothاو ناعم اثناء عملية الـ scrolling
ن
أوال كدا الـ pageXOffset === scrollXوكذلك الـ .. pageYOffset === scrollXي
يعن ممكن استخدم أي
واحد فيهم مع االخذ باالعتبار ان الـ PageOffsetلو بتتعامل ر
اكت مع متصفحات قديمة
بعد كدا عملت Eventالـ scrollمن خالل الـ addEventListenerوعملت Functionهتأدي وظيفة معينة
اكت من او يساوي 600هنعمل ظهور للـ button عملت بعد كدا رشط بقوله فيه لو الـ window.scrollYبقت ر
ن ن ن
يعن بجرد ما اعمل scrollأوصل للقيمة 600بالطول هيبدا يظهر الـ buttonيف الصفحة المختف ..ي
ي
ن
تان ن
يختف ي
ي والـ elseاألختة بتقول العكس اول ما أكون اقل من الـ 600دي الزرار دا يرجع
عل الزرار بقول فيه اول ما اضغط ع الزرار دا يعمل الـ function
بعد كدا عملت Eventكمان خاص بالـ clickي
ان بحدد فيها قيم او احداثيات عشان أتوجه ن
الل سبق واتعلمت منها ي الل منها هستخدم الـ ScrollToي
ي
لالحداثيات دي
لالعل خالص بطريقة Smoothوناعمة بس كدا
ي بمجر ما اضغط ع الزرار هنتقل
ن
تحفتية️♥ ️♥عبارات
// Assignment 1
let promptNum = prompt("Print Numbers From - To", "Example 5 - 20");
02 :التكليف
div.appendChild(heading);
div.appendChild(msg);
div.appendChild(button);
// Styling
document.body.style.cssText =
"font-family: Tohama, Arial; display: flex; justify-content: center;
align-items: center; text-align: center;";
div.style.cssText =
"position: relative; transform: translateY(50%); font-size: 15px;
background-color: #F5F3F4; padding: 20px 100px;
box-shadow: -1px 3px 28px -7px;";
button.style.cssText =
"position: absolute; right: -3%; top: -9px; border: 2px solid white;
border-radius: 50%; background-color: red; width: 30px; height: 30px;
font-size: 17px; color: white; font-weight: bold; cursor: pointer;";
setTimeout(() => {
document.body.appendChild(div);
}, 5000);
button.addEventListener("click", () => {
div.remove();
});
// Assignment 3
let downCount = document.querySelector("div");
04 :التكليف
// Assignment 4
let urlChange = document.querySelector("div");
setInterval(() => {
urlChange.innerHTML -= 1;
if (urlChange.innerHTML === "0") {
window.location.assign("https://elzero.org/");
}
}, 1000);
// Assignment 5
let openURL = document.querySelector("div");
ن ن
الـ Local Storgeعبارة عن Propertyيف الـ windowمن خاللها بقدر اتحكم يف الـ Storage object
ر ن
بتاعن و احتفظ بيها
ي الـ Storage objectعبارة عن objectبقدر أخزن فيه بيانات واستخدمها يف الصفحة
ن
بيعتت objectفقدر اسجل فيه البيانات زي دروس الـ object
ر ممكن اخزن يف الـ Storageبكذا طريقة وألنه
الـ storage objectبيكون عبارة عن Keyو Valueزي ما كنت بكتب الـ Objectبالظبط
كالتال: ن
ي اوصلها ممكن دي local storage ـ لا ف
طيب لو حابب اعرف القيم الموجودة ي
1
2
3
4
ن
الل بقدر اضيف فيها بيانات يف الـ local storage objectمن ضنهم الـ Dot Notation
ودي كل الطرق ي
و الـ Bracket Notationوكذلك الـ setItem Method
ن
وبالطريقة دي انا كدا استخدمتها يف الصفحة عندي ومهما اقفل الصفحة وافتح هتفضل الصفحة محتفظة
بالـ Background colorدي
ر
هالف ان الـ Colorاتحذف
ي لو عايز اشيل عنض واحد من الـ Storageبستخدم الـ removeItem
وبستخدم الـ clearلو حابب احذف كل الـ Keysمن الـ Local Storage
ن
عل حسب مكانه يف الـ storage
بيجبل الـ keyاو الـ itemي
ي الـ Get Keyبديله الـ indexوهو
ن
يف حاجات مهمه عن الـ local Storageلو فاتح privet tapوقفلتها مش هيتم حفظ اخر حاجه استخدمتها
استخدامك للـ HTTPمختلف تماما عن الـ HTTPSمن حيث أسلوب واستخدام الـ local Storage
مفيش Expiration Timeاو وقت بتتشال فيه البيانات من الـ local Storage
HTML
Js
ن
الل مررته كـ parameterيف الـ addEvnentListenerعشان استخدمها مع method بعدها مسكت الـ eي
جاهزة عندي اسمها current targetطيب معناه أي الكالم دا ؟!
الل
الل تم الضغط عليه طيب لما الـ currentدا يمعناه ان أي عنض liادوس عليه هو دا الـ current targetي
تم الضغط عليه يتم فعليا الضغط عليه يحصل ايه ؟!
ر ن
الل جنبه
باف الـ lisي
يحصل انه يتم إضافة classالـ activeليه عشان يمته ويظهره هو عن ي
عل liيتخزن اللون
بعد كدا انا نبس ضيفت لون الـ current targetللـ local storageبحيث كل ما اضغط ي
بتاع الـ liدا يف الـ local Storage
الل عندي ..ربطت الـ background colorبتاعته بلون بعد كدا مسكت المستطيل الكبت ي
الـ current targetالل تم الضغط عليه فعليا من خالل ان اغت الـ styleبتاعه ودا حصل من خالل انن
ي ي
الل تم الضغط عليه
الل من خاللها برضو بعرف اللون ياستخدمت الـ data setبتاعت الـ Current targetدا ي
انن
الل هيتم الضغط عليه فعال وذلك من خالل ي -3تالت حاجة انا بقا بضيف الـ classالـ activeدا للعنض ي
ن
مني انه األحمر ؟! الل هدوس عليه دا لو مثال كان األحمر طيب هعرف
ن ن بقوله اللون ي
الل موجود يف الـ local storageالل انا حططها يف الـ HTMLتساوي نفس اللون ي data-colorي قولتله لما الـ
ن ن
الل هيكون موجود فعال يف الـ local storgeعشان انا ضغت عليه بايدي فتم تخزينه يف الـ local storage ي
ن ن
الل هو ازرق مثال يف كل
ي data-color ـ لا بيساوي بقا لو دا local ـ لا ف
الل ي
اذا انا بقوله شوف بقا اللون ي
يبف اللون دا حط عليه classالـ activeر
األحوال ي
ن ُ
الفضول وحب االستطالع والتعلم هيحطك يف Positionوأماكن كتت حلوة
ن
الـ Session Storageهو نفس كل حاجه يف الـ Local Storageولكن الفرق بينهم ان الـ Sessionبيحتفظ
ر ن
هتالف البيانات دي ولكن لو عملت
ي يعن بمجرد ما تقفل الصفحة وترجع مش بالبيانات لجلسة واحدة فقط ي
حن لو قفلتر
بالبيانات ين
الل بيحتفظ reloadللصفحة هتالقيه لسه محتفظ بالبيانات عكس الـ Localي
ن
االتني واحدة ن
االتني وزي ما قولنا طريقة الكتابة يف ن
تان ..اذا دا الفرق ن
بي نهان وفتحته ي
المتصفح ي
بالنسبال
ي الل ممكن استخدم فيها الـ Session Storageوتكون مفيدة طيب أي الحاالت
ن ين
استخدام
ي مثال لو عندي formيف الصفحة واليوزر عمل reloadبالغلط بعد ما كتب كالم يف الـ inputهنا
ن
الل اتكتبت دي مدام لسه يف نفس الجلسة هيخل المتصفح يحتفظ بالبيانات ي
ي للـ Session
بتاع كان معقد شوية الكود الن نف فيديو فيه تطبيق كامل للـ TODO Listمع الـ Local Storageهيفيدك ر
اكت
ي ي
الل يفيدك افضلومحتاج اعدل عليه حاجات كتت فمحبتش اضيع وقتك وقولت اديك الفيديو ي
لينك الفيديو
HTML
<!--Start Fonts-->
<div class="style">
<label for="Fonts">Choose Font</label>
<select name="" id="Fonts" class="fonts">
<option value="Open-Sans">Open Sans</option>
<option value="Cairo">Cairo</option>
<option value="Roboto">Roboto</option>
</select>
</div>
<!--End Fonts-->
<!--Start Colors-->
<div class="style">
<label for="Colors">Choose Color</label>
<select name="" id="Colors" class="colors">
<option value="#000000">Black</option>
<option value="#ff0000">Red</option>
<option value="#0000ff">Blue</option>
<option value="#008080">Teal</option>
<option value="#FFA500">Orang</option>
<option value="#A020F0">purple</option>
</select>
</div>
<!--End Colors-->
<!--Start Size-->
<div class="style">
<label for="Font-size">Choose Font-Size</label>
<select name="" id="Font-size" class="font-size">
<option>16px</option>
<option>17px</option>
<option>18px</option>
<option>19px</option>
<option>20px</option>
<option>21px</option>
<option>22px</option>
<option>23px</option>
<option>24px</option>
<option>25px</option>
<option>26px</option>
<option>27px</option>
<option>28px</option>
<option>29px</option>
<option>30px</option>
</select>
</div>
<!--End Size-->
CSS
body {
/* Default Settings */
font-family: 'Open Sans', sans-serif;
font-size: 16px;
color: #000;
}
.style {
margin: 30px;
display: block;
}
label {
margin-right: 10px;
}
JS
let fonts = document.querySelector(".fonts");
let colors = document.querySelector(".colors");
let size = document.querySelector(".font-size");
if (window.localStorage.length > 0) {
document.body.style.fontFamily =
window.localStorage.getItem("fontFamily");
}
if (window.localStorage.length > 0) {
document.body.style.color = window.localStorage.getItem("color");
}
if (window.localStorage.length > 0) {
document.body.style.fontSize =
window.localStorage.getItem("fontSize");
}
fonts.addEventListener("change", () => {
window.localStorage.setItem("fontFamily", fonts.value);
document.body.style.fontFamily = fonts.value;
});
colors.addEventListener("change", () => {
window.localStorage.setItem("color", colors.value);
document.body.style.color = colors.value;
});
size.addEventListener("change", () => {
window.localStorage.setItem("fontSize", size.value);
document.body.style.fontSize = size.value;
});
02 :التكليف
HTML
<form>
<input type="text" placeholder="Write Your Name" class="name">
<input type="email" placeholder="Email" class="email">
<input type="tel" placeholder="Your Number" class="number">
</form>
<div class="style">
<label for="Colors">Choose Color</label>
<select name="" id="Colors" class="colors">
<option value="#000000">Black</option>
<option value="#ff0000">Red</option>
<option value="#0000ff">Blue</option>
<option value="#008080">Teal</option>
<option value="#FFA500">Orang</option>
<option value="#A020F0">purple</option>
</select>
</div>
CSS
body {
font-family: Arial, Helvetica, sans-serif;
}
.style {
margin-top: 25px;
display: block;
text-align: center;
}
label {
margin-right: 10px;
}
form {
display: flex;
flex-direction: column;
align-items: center;
}
input {
margin-top: 20px;
padding: 10px 15px;
width: 30%;
border: 1px solid #A020F0;
outline: none;
}
JS
let theName = document.querySelector(".name");
let theEmail = document.querySelector(".email");
let theNumber = document.querySelector(".number");
let colors = document.querySelector(".colors");
if ((window.sessionStorage = window.sessionStorage.getItem("autoSave-Name"))) {
theName.value = window.sessionStorage.getItem("autoSave-Name", theName.value);
}
if ((window.sessionStorage = window.sessionStorage.getItem("autoSave-Email"))) {
theEmail.value = window.sessionStorage.getItem(
"autoSave-Email",
theEmail.value
);
}
if (
(window.sessionStorage = window.sessionStorage.getItem("autoSave-Number"))
) {
theNumber.value = window.sessionStorage.getItem(
"autoSave-Number",
theNumber.value
);
}
if ((window.sessionStorage = window.sessionStorage.getItem("color"))) {
colors.value = window.sessionStorage.getItem("color", colors.value);
}
theName.addEventListener("input", () => {
window.sessionStorage.setItem("autoSave-Name", theName.value);
});
theEmail.addEventListener("input", () => {
window.sessionStorage.setItem("autoSave-Email", theEmail.value);
});
theNumber.addEventListener("input", () => {
window.sessionStorage.setItem("autoSave-Number", theNumber.value);
});
colors.onchange = () => {
window.sessionStorage.setItem("color", colors.value);
};
ببساطة شديدة جدا عن طريق الـ Destructuringهتقدر إنك تستخرج البيانات سواء من الـ arrays
ن
الل تحبها
والـ objectsو الـ Mapsوتضيفهم يف متغتات وبعدين تبدأ تتعامل مع المتغتات دي بالكيفية ي
Destructuring Syntax
لو عندي Arrayفيها بعض األسماء زي الـ myFriendsبمجرد ما اكتب الـ syntaxبتاع الـ Destructuring
ن ر
هيبف عندي القدرة ع استخدام كل عنض يف الـ arrayلوحدةي
ن
طيب الـ Syntaxدا معناه أي ؟! ....معناه ان كل متغت زي a,b,c,dبقا بيحتوي عل كل indexيف الـ Array
ن
المثال دا يف حالة ان مفيش أي وجود ألي متغتات وانا بعملها declare
الل للقيم Update اعمل ان يبف استنتج من الكالم دا لو عندي متغتات معلن عنها بالفعل وتتحتوي عل قيم ن ر
ي ي ن ي ي
ن
بستغن عن letيف حالة لو هعمل Updateللمتغتات فيها دي ودا بيتم عن طريق االستغناء عن كلمة ... letركز
ي
ر ن
يعتت
الل كانت موجودة وقت اإلعالن عنه لما قيمته كانت بـ 4الن انا ر
يبف يف الحالة دي هيجيب قيمة الـ dي
ي
معملتش أي Updateللمتغت dبأي قيمية جديدة
ر ن
يبف لما
طيب ي نف حالة لو زودت عدد المتغتات عندي زي المتغت eمثال وبما ان الـ eملوش أي قيمة فعليه ي
هيقول Undefinedالن الـ eدا فعليا ملوش أي قيمة
ي الل هيحصل انه
اطبعه يف الـ consoleي
ر
هتبف قيمته موجودة لكن لو عملت updateللمتغت eدا او أعلنت عن قيمة للمتغت دا
ي
ولو علمت أي updateالي متغت دا الـ syntaxبتاع الـ Destructuringمش هياخد فيها وهيتجاهلها وياخد
ن
التال لما احط قيمة للمتغت aهالحظ انه تجاهل القيمة دي
ي القيمة الموجودة يف الـ arrayزي المثال
ن ن
الل يف الـ nested
الدرس دا بيتكلم عن لو عندي Nested Arrayيف arrayتانيه ازاي اقدر أوصل للعنارص ي
طيب لو حابب أوصل لـ " "Shadyو " "Gamalولكن عن طريق الـ Destructuring
الغرض من الدرس دا هو معرفة ازاي اقدر اعمل Swapاو تبديل للمتغتات بالقيم بتاعتهم
ن ن
طريقتي الطريقة قديمة والطريقة الجديدة الخاصة بالـ Destructuring وف
ي
الطريقة القديمة
ن
ه
الل كلمة " "Videoيف متغت اسمه Stashاذا المتغت Stashدا قيمته الحالية ي
خزنت قيمة الـمتغت Bookي
كلمة ""Video
ن ن
بمعن ادق عملتي او Book المتغت ف
الل كلمة " "Bookخزنتها ي
بعد كدا مسكت قيمة المتغت Videoي
Updateللمتغت Bookبالقيمة ""Video
ن
بعد كدا مسكت المتغت Videoدا عملت لقيمته Updateبالقيمة المتخزنة يف المتغت Stash
فالنتيجة النهائية بقت ان المتغت Bookقيمته أصبحت كلمة " "Bookوالمتغت Videoقيمته أصبحت كلمة
""Video
الطريقة الجديدة طريقة الـ Destructuring
دلوقن هستخدمها مع الـ Objectر ببساطة شديدة جدا زي ما كنت بستخدم الـ Destructuringمع الـ Array
ي
ن ن
بيكون يف اختالف طفيف بس يف الـ Syntaxبتاع الـ Destructuringاثناء التعامل مع الـ Object
الل اسمها theNameداخل property ـ ل با الخاصة مة القي ع بيحتوي بفًاذا المتغت theNameر
ي ر ي
باف الـ Properties
الـ user objوكذلك ي
الل اتخزنت فيه ن
إن استخدم اسم المتغت ي
الل عليا يولو حابب اطبع الـ Propertiesدي بالقيم بتاعتها كل ي
فقط
ن
الل فات دا كان مجرد طرق قديمة كنت بستخدمها عشان أوصل ألي propertyعندي يف الـ object
كل ي
ن
بس هنا هالحظ ان يف Errorحصل عند عالمة الـ = وحله بيكون بسيط جدا
ن
قوسي () حل المشكلة دي ه ان احط الـ Destructuringن
بي ي
ن
ان مكتبهاش وانا بعمل Destructuring
ولو حابب استبعد أي Propertyمش حابب اطبعها كل المطلوب ي
الن يتم انشاؤها يمكن تغت اسمها عادي جدا داخل عملية الـ Destructuring ر
المتغتات ي
ن
بحط جنب اسم المتغت المراد تغت اسمه عالمة الـ : Colonوبعدين ابدأ يف كتابة االسم الجديد
بمنته البساطة غتت اسم المتغتات theNameو theAgeألسماء تانية وبعدين استخدمتهم
ي أهو
لو حابب اعمل declareلـ propertyجديدة داخل الـ destructuringوأبدأ استخدمها ..ال وممكن احطلها
اسم مختض زي ما عملت فوق كدا
ن ن
دا يف حالة الـ destructuringلكن لو انا أصال ضيفت الـ propertyدي من البداية من البداية يف الـ user obj
بقيمة مختلفة غت كلمة redوليكن Blackمثال
ن ن
الل ضيفتها اثناء عملية الـ Destructuringوهياخد القيمة الموجودة يف
ي القيمة هيتجاهل دي الحالة ف
ي
الـ user object
ن
Function بعدين استدعيت الـobj اسمهParameter ومررت جواهاFunction يف المثال دا انا عملت
الل فيه ر
يproperties بالـuser object ه الـ
الل ي
يargument دا بـparam بتاعن وعوضت عن الـ
ي
function من خالل الـuser obj الل جوا الـ
يproperties بعدين بدأت بقا استخدم الـ
فهم انا
ي الفايدة من استخدام الـ Destructuringبشكل عام حسب
ن
الحال عندي انها بديل كويس وشي ــع واقل يف كتابة الكود لو عايز تجيب معلومة وتبعد عن
ي هو االعتقاد
الطريقة التقليدية
يعن مثال لو عندي User Objectجواها Skills <---- Nested Object ن
ي
اكت من ضمن الـ Skillsدي CSSمثالجوا الـ Skillsدي نف عندي Three Propertiesاو ر
ي
فعشان توصل للـ CSSدي بدل ما تكتب الكود كدا user.skills.css <----
ر
مباش عل طول بشكل دي Css تجيب Destructuring ـ لا بتاع Syntax ـ لبا ممكن انك نف ن
حي
ي ي
وممكن تحطلها حرف مختض زي C
ه nestedجوا ن
الل موجودة عندك لو ي
يعن اعتقد الغرض منه هو شعة وسهولة انك تعمل Extractللداتا ي
ي
جوا nested
ر
تبف ابسط بالـ destructuring
و لو عايز تعمل Swapلقيم من متغت ألخر ممكن ي
اصت
اصت ر
واصت ر
ر متستعجلش النتايج
الزموا ذكر هللا ففيه العون عل متاعب الحياة ️♥
ر ر
شء قدير
عل كل ي ال اله اال هللا وحده ال شيك له ..له الملك وله الحمد وهو ي
سبحان هللا وبحمده عدد خلقه ورضا نفسه وزنة عرشه ومداد كلماته
الح القيوم واتوب اليه
استغفروا هللا العظيم الذي ال اله اال هو ي
ْ َّ َ ْ َ نُّ ْ ُ ُ َ
اَّلل تطم ِي القلوب
أال ِب ِذك ِر ِ
ال تنسونا من دعواتكم
By: Amr Elsayed
Destructuring Mixed Content Lesson #121
ببساطة شديدة جدا انا عندي Objectوجواه Nested Arrayوجواه Nested Object
ن
األساش
ي استخدمت الـ Destructuring Syntaxزي ما اتعلمت عوضت عن كل متغت يف الـ Object
بمتغت بديل ليه زي theNameعوضت عنه بحرف nوكذلك theAgeعوضت عنه بحرف a
ن واستخدمت بدايل المتغتات دي الل ه الحروف نف ن
ان اطبع بعض الـرسايل يف الـ Console
ي ي ي ي
if (chosen === 1) {
let { title: a, age: b, available: c, skills: [, d], } = obj1;
console.log(a);
console.log(b);
console.log(c ? "Available" : "Not Available");
console.log(d);
} else if (chosen === 2) {
let { title: a, age: b, available: c, skills: [, d], } = obj2;
console.log(a);
console.log(b);
console.log(c ? "Available" : "Not Available");
console.log(d);
} else if (chosen === 3) {
let { title: a, age: b, available: c, skills: [, d], } = obj3;
console.log(a);
console.log(b);
console.log(c ? "Available" : "Not Available");
console.log(d);
} else {
console.log(`Work is Not Available Now`);
}
Nested Object 3 جواهاArray دلوقن عند ر التال انت دا اعتمد عChallenge حل الـ
ي ي
بمتغتArray داخل الـobject وعوضت عن كلArray مع الـDestructuring استخدمت الـ
وهكذاObject تان يحل محل نobj 2 عندك وكذلك الـObject دا يحل محل اولobj 1 ًإذا الـ
ي
ر
موجود عنديObject أولTarget يبف انا كدا بـ ر
يChosen = 1 بعد كدا عملت الـشط بتاعك لو الـ
داObject جوا اولProperty وبدأت امسك كلobj 1 الل عوضت عنه بـ يobject مسكت كدا انا اول
تجاهلت اول واحدةskills وعن, c بـavailable وعن الـ, b بـage وعن الـ, a بالمتغتtitle عوضت عن الـ
ن
d بـالمتغتSkill تان
وعوضت عن ي
ن حطيت رc عند المتغت.. عنديobject نف كل
الل هتتبطع
ي الرسالة ف
ي يحط True بقت Available ـ لا لو طش ي
Not Available يحطFalse لو بقت ..... true
console.log(a * e); // 5
02 :التكليف
// Assignment 2
let mySkills = [
"HTML",
"CSS",
"JavaScript",
["PHP", "Python", ["Django", "Laravel"]],
];
03 :التكليف
// Assignment 3
arr3.push(arr1);
04 :التكليف
// Assignment 4
const member = {
age: 30,
working: false,
country: "Egypt",
hobbies: ["Reading", "Swimming", "Programming"],
};
const game = {
title: "YS",
developer: "Falcom",
releases: {
"Oath In Felghana": ["USA", "Japan"],
"Ark Of Napishtim": { US: "20 USD", JAP: "10 USD" },
Origin: "30 USD",
},
};
ببساطة شديدة جدا نقدر نقول ان الـ Set Data Typeشبيه جدا بعمل الـ Arrayالعادية من حيث شد
ن
البيانات ومن حيث التعديل عليهم سواء باإلضافة او الحذف الي عنض يف البيانات دي اال ان فيه اختالفات
كتت بينهم
ن ن
تان حاجة يف حالة الـ Arrayكنت بستخدم الـ Lengthعشان اعرف عدد العنارص الموجودة
ي
نف ر
اكت من طريقة لكتابة ال ـ Syntaxبتاع الـ Set Data ي
ن ن
الل انشأتها مسبقا
الل هتتكتب باألرقام الموجودة يف الـ Arrayي
إن اعوض عن الـ dataي
زي مثال ي
ن
وف النهاية هتأدي نفس الغرض بالظبط
كل الطرق دي زي بعض ي
ن
يعن ع سبيل المثال انا هحذف العنض 2
ممكن احذف عنض من الـ set dataبطريقة الـ deleteي
ر ن
الل هعمله يكون لعنض فعليا موجود عندي
Consoleبشط ان الـ deleteي لو كتبت Codeالـ deleteدا يف الـ
ر
هالف النتيجة true
ي اج احذفهزي العنض رقم 2لما ر ي
اما لو عملت deleteلعنض مش موجود أصال عندي زي رقم 20مثال فهتكون النتيجة False
ن
يف الـ set data typeبستخدم حاجه اسمها has
الحظ ان حرف الـ Aوهو capitalكدا لو بحثت عنه وكتبت الحرف Smallهتكون النتيجة false
ن
استثن منها كل
من االستخدامات العظيمة للـ Set Data Typeهو مثال لو عندي Arrayوجيت قولتلك ن ي
الحروف واألرقام المتكررة عشان تعمل الحركة دي ممكن تستخدم الـ reduceاو الـ filterيف الـ Higher
بمنته البساطة
ي Order Funcولكن مع الـ Set Data Typeهتقدر بسطر كود واحد بس تنفذ العملية دي
ر
صديف عشان ابسطلك الدنيا قدر المستطاع بص يا
ي
ن ن
بمعن
ي JavaScript ـ لبا عالقة أي ملوش أصال دا المصطلح Garbage collection اسمه عندي مصطلح في أوال
ن ن
يعن أي لغة برمجة Memory Managementيف أي لغة بتستخدمها ..ي ن
انه المصطلح دا ليه عالقة بالـ
بتتعلمها بيكون جواها Engineيف اللغة دي خاص بالتعامل مع الـ Memoryوبيدير الـ Memory
خلين اديك مثال ع الجافاسكريبت لو عندي بيانات معينة زي objectاو Functionن طيب
ن ي
تان ؟!
او أي primitive dataالبيانات دي بعد ما استخدمتها افرض انا مش عايز استخدمها ي
الل بيحصل ان الـ Engineبتاع اللغة بتوح يعمل Cleanللبيانات دي من الـ Memoryالنها اكيد بتشغل ن
حت ي
هو دا بقا مفهوم الـ Garbage collection
ن ن
الل بتـ manageفيها
يف لغة الـ JSالـ Memory Managementبيتم Automaticيف لغات تانية انت ي
الـ memory
ن
الل بخزن فيها Objects
-1يف الـ Setبقدر أخزن أي نوع من البيانات عكس الـ WeakSetي
Set
WeakSet
ن
تعتت Aliasاو بديل لـلـ value
-3يف الـ Setبقدر استخدم الـ Keysو الـ valuesو الـ Entriesوبالمناسبة الـ keysر
ن
ان اعمل Iteratorزي ما الـ for loopبتعمل بالظبط
الـ Valuesدي اقدر استخدمها بحيث ي
ان أعمل عمل الـ loopولكن بإيدي انا ودا عن طريق الـ )(nextن ن ن
يعن أقدر استخدم الـ keyأو الـ Valueدي يف ي
ي
بتاع دا كدا
ي هستخدم الـ nextبقا ع الـ iterator
ببدأ استخدم الـ valueبقا عشان اطبع القيمة وبكرر نفس العملية دي عشان أوصل الخر عنض عندي
ر
بالف ان الـ doneبقت trueدا معناه ان كل البيانات
لما بوصل لطباعة اخر Valueعندي واستخدم الـ nextي
الل عندي اطبعت كلها
ي
ن ن
كل دا أقدر اعمله يف الـ Setولكن يف الـ WeakSetكل دا مش متاح
ن
الفاض بيكون فيه default valueلكن الـ map -1أول فرق ن
بي الـ Objectوالـ Mapهو ان الـ Object
ي ن
مفيهوش ..او يف الـ Mapتقدر انت تحدد الـ Default Valueدي تكون عبارة عن أي
كالتال:
ي الل بتكلم عليها دي ..ايون
طيب هل اقدر اعمل Objectمفيهوش الـ default valueي
ن
هتيح فعال
ير ه عشان استعلم عنها هل
ي ما زي وكتبتها دا Object ـ لا ف
األول ي
ي لو طلبت اعرف القيمة
ن
لكن بقا لو استخدمت الـ Mapيف تخزين نفس البيانات دي وحبيت استعلم أي واحدة فيهم
ن
واقدر كمان احط أي نوع بياانات يف الـ Map
ن
الل هو كان 10و الـ Valueبتاعته Number
ي كتبته انا Key ألول وجود أصال مفيش Object ـ لا ف
هالحظ ان ي
ر ن
هالف ان كل حاجه كتبتها موجودة
ي لكن يف الـ Map
ن
-6الـ Mapافضل بكتت يف الـ performanceعكس الـ Object
ن ن
طريقتي أول حاجة عشان اضيف Keyو Valueيف الـ Map Data Typeعندي
مباشة كـ ـ iterableجوا الـ new Map Methodالطريقة األول نان اضيفهم ر
ي ي
والطريقة التانية نان اضيفهم من خالل Methodالـ .......... setفتعال نشوف الطريقتين
ي ي
أوال طريقة اإلضافة بالـ Set
Key Value
وعشان اعمل Accessعليهم باستخدم الـ getوجواها بيكون اسم الـ Key
الطريقة التانية اضيفهم جوا الـ Iterable
ان عايز اطبع الـ valueبتاعت الـ keyدا لما بستخدم الـ getوجواه الـ Keyنف الـ Console.logفدا معناه ن
ي ي
ر ر
الل عندي 3
هالف عدد الـ Keysي
ي دلوقن مع استخدام الـ Size
ي
ن
الحظ ان استخدام الـ deleteيف الـ Consoleلو الـ keyدا فعال موجود عندي النتيجة هتكون true
ن
لكن لو جربت استخدم الـ deleteيف الـ consoleومررت Keyمش موجود أصال زي JSدي مثال
ن ر
هالف النتيجة يف الـ Consoleعبارة عن false
ي
ن
الل بستخدمها عشان اعمل Checkعل keyهل هو موجود؟
ه الـ hasي
بعد كدا اخر حاجه يف الدرس عندي ي
ن
يعن اول حرف منه بدل ما يكون كبت
عل عنض هو موجود عندي ولكن كتبت اسمه غلط ي لو عملت Checkي
كتبته انا صغت زي keyالـ Nameمثال اول حرف فيه كبت وانا هكتب اول حرف دا Small
ه مكتوبة بالظبط
هتكون النتيجة falseودا معناه اسماء الـ keysبتكون حساسة الزم تبحث عنها زي ما ي
Map vs WeakMap Lesson #127
ن
شايف الـ Sequenceبتاع " "Osamaدا هيتحول كل Characterفيه لـ Indexموجود يف Array
ن ن
ان امرر يف الـ Iterableشوية ارقام
ممكن داخل الـ Array.fromاعمل Functionتأدي وظيفة معينة زي ي
عل نفسهوالـ functionبدورها ترجعها أرقام وكمان كل رقم مجموع ي
معن الكود دا ن يان استخدمت Functionالغرض منها تبص ع الـ iterableالموجود ن يف الـ Array.from
ن
طبعا ي
ومن ثم استخدمت الـ unary plusعشان ارجعهم ع شكل ارقام
الل هيحصل ؟!
كان ايه ي طيب لو مكنتش استخدمت الـ unary plus
ن
تعال نستخدم الـ Array.from
ي أصال يف العادي قبل ما استعمل الـ functionعشان تأدي عملية الجمع دي
الل فات ولكن بدون الـ function
عل نفس المثال ي ي
ن
عل هيئة stringلذلك انا يف نفس المثال دا لما عملت
رجعال arrayفيها ارقام ،ولكن األرقام دي ي
ي الل
النتيجة ي
ه تجمع كل رقم ع نفسه ....لو مكنتش استخدمت الـ unary plus الل ي
الـ functionعشان تأدي وظيفة ن ي
هيعتته عالمة
ر عل انه Stringو معامل الجمع كان
كان هيتعامل مع كل رقم موجود يف الـ arrayي
Concatenateأي ربط stringsببعض لذلك الحظ المثال القادم لما اشيل الـ unary plus
ن
الممتة بس ...ممكن استخدم الـ Setصح مش كدا ؟ ان عندي الـ arrayدي وعايز ارجع منها األرقام لنفتض ن
ر
ي
ر
دلوقن انا عايز النتيجة دي تكون array اهو تعاملت مع الرقم المكرر وخليته رقم واحد باستخدام الـ setولكن
ي
الل انا عملتها دي بقا
يح دور الـ Array.fromلما احط جواه نتيجة الـ setي
هنا بقا ر ي
ر
رجعتل
ي الل مررتها فعال
هالف الـ Argumentsي
ي
ن
توصلن لعمل كل دي طرق بقدر استخدم فيها الـ Array.fromعشان اقدر أوصل لحلول ر
مباشة وشيعة
ي
ن
بيدين مساحة اطبق حاجات كتت جدا من خصائص الـ Array وبالتال لما يكون عندي Arrayدا Array
ي ي
عشان اقدر اعمل أي حاجه انا عايزها
ْ َّ َ ْ َ نُّ ْ ُ ُ ُ َ
اَّلل تطم ِي القلوب
أال ِب ِذك ِر ِ
ال تنسونا من دعواتكم
By: Amr Elsayed
Array.copyWithin Method Lesson #129
ن
ه الـ .. Targetالمقصود بيه المكان ي
الل هعمل فيه اول حاجه بحطها يف Methodالـ Array.copyWithinي
الل هنسخها المكان دا هو الـ Target ن عمليه النسخ دي ...
الل عايز احط فيه العنارص يبمعن ادق المكان ي
ي
عل سبيل المثال لو عايز انسخ العنض " "Aمن مكانه واحطه مكان العنض 30 ن
يعن يي
بتاع والـ indexبتاعه هو الـ 2
ي اذا العنض 30دا هو الـ Target
ر
يبف كدا
اذا المفروض الشكل بعد نسخ العنض " "Aي
-6لو كتبت الـ Startو الـ Endافتكر القاعدة Not Including End
ن ن
الل هو يف الـ arrayاالصلية العنض 50
بتاع هو الـ index 4ي
ي يف المثال دا الـ target
ر
يبف عملية النسخ هتم لعنض " "Bبدل العنض 50
الل هو العنض " "Bي ه الـ index 6يالل ي
والـ startحددتها ي
ن
يعن ""B
الل هو العنض 50وزي ما قولنا لو الـ Startبـ -1هيبدأ العد من االخر ي
الـ Targetهنا الـ index 4ي
الـ targetهو العنض 20نف الـ index 1و الـ startهو العنض " "Aمن -2ومدام محددتش Endر
يبف هيكمل
ي ي
لألخر و هياخد العنض " "Bكمان
ر ن
بتاعن وبتحط جواها
ي الـ some methodبتطبق Functionعل كل عنض من العنارص الموجود يف الـ Array
الشط دا فعال اتحقق ربتجع trueلو متحققش ربتجع false رشط لو ر
الشطالموضوع مختلف تماما عن الـ filterالن استخدام الـ filterكان بيعمل رشط ع العنض لو انطبق عليه ر
الشط اتحقق بياخد العنض دا معاه او بيضم العنض دا معاه انما نف الـ someهو بيقول trueنف حالة لو ر
ي ي ي
الشطو falseنف حالة عدم تحقق ر
ي
يعن عل سبيل المثال عندي مجموعة أسماء فبسأل سؤال هل األسماء دي فيها اسم " "Osama؟!! ن
ي
بيقول false بيقول trueلو مش موجود عل عنارص الـ arrayدي وبيشوف لو االسم دا فعال موجود ر
ي ي فبيمش ي
ي
الـ syntax
ن من callback functionوالل بيكون وظيفتها انها ر ن
عل كل عنض يف الـ arrayعشان
تمش ي
ي ي الـ someبتقبل ي
تشوف ر
الشط اتحقق وال ال
ه الـ thisالخاصة بالـ callback functionدي
والـ this argumentي
اكت من 5ر
الشط هيتحقق وتكون النتيجة trueوبعدها الـ some method الل هو ر
بمجرد ما يوصل للرقم 6ي
ن
تان بعد الرقم 6دا
عل أي عنض ي
هتوقف الـ loopومش هيعمل checkي
ن
عملت متغت اسمه myNumberقيمته تساوي ... 10بعد كدا عوضت عنه مكان الـ thisيف الـ syntaxبتاع
الـ some method
الل هو بيعوض عن المتغت myNumberبالقيمة 10 اذا انا بقارن عنارص الـ elementبالـ thisي
ن
اكت من 10؟! ...النتيجة هتكون false
كالتال =< هل يف عنض ر
ي فالسؤال هيكون
ن
تان يكون more advancedشوية
تعال ناخد مثال ي
ي
ن
الل هيحل محل أول parameterموجود يف الـ function
الل عليه السهم دا هو الـ argumentي
الـ numsي
الل استخدمت عليه الـ some method
الل هو اسمه arrالـ arrدا هو ي
ي
ن
فاهمن ؟! ر
يبف استنتج من الكالم دا ان انا شلت الـ arr.someوعوضت عنها بـ ... nums.some
ي ي
الل هو valعوضت عنه بالـ argumentمرة 20ومرة 5 ن
تان parameterي ومكان ي
ن
تان سؤال هل الـ valدي بالقيمة 5تساوي الـ eالل هو أي قيمة موجودة ما ن
بي 1و 10عنارص الـ array؟! ي ي
ن
معي ؟! ن ن
تان يكون more advancedبرضو عبارة عن فحص للعنض هل هو موجود يف ring
تعال ناخد مثال ي
ي
عملت objectاسمه ringفيه minimumبيساوي 10و maximumبيساوي 20
الل هتحصل من شغل الـ some
بعد كدا عملت متغت اسمه checkNumberInRangeهخزن جواه النتيجة ي
استخدمت الـ someع الـ arrayالموجودة عندي بالـ syntaxبتاعها وعوضت عن الـ thisبالـ range obj
اكت من او يساويالل هو بيمثل أي عنض من عنارص الـ nums arrayدا ر بتاع بيقول هل الـ e ر
الشط
.....ر ي ي
ه قيمتها 20 الل this.max ـ لا من اصغر دي e ـ لا هل ط وباف ر
الش ه قيمتها 10
ي ي ي الل ي
الـ this.minي
علما بان الـ thisدي تعوض ع الـ range
الش ن بتاعن ر
ر ن
طي هيتحققوا مع بعض ان الـ eلما تكون قيمتها بـ 10 ي طبعا موجود الرقم 10يف الـ array
ن
ه اصغر من اوي تساوي الـ max ي وكمان Range ـ لا ف
ي اكت من او تساوي الـ minالموجود هتكون فعال ر
ن
الـ everyزي الـ someيف الـ Syntaxالفرق بينهم ان الـ someربتجع trueلو عنض من عنارص الـ Arrayحقق
الشط لو عنض واحد بس محققش الشط فعال .....لكن الـ everyعشان ترجع trueالزم كل العنارص تحقق ر ر
الشط الـ everyهتكون نتيجتها false ر
بتاع أول حاجة عشان احول الـ objectدا لـ arrayعشان اقدر اعمل loopعل كل عنارصه واتاكد من ر
الشط
ي ي
بتاع
ي هستخدم methodاسمها object.keysوجواها هحط اسم الـ object
ر
بتاعن دي من stringلـ numbers ان احول عنارص الـ arrayن
ي بعد كدا هحتاج ي
الل هخزن فيه شغل الـ everyوارجع استدعيه عشان اشوف النتيجة
بعد كدا هعمل المتغت ي
بتاع عوضت عن الـ thisبالـ mainLocationالل قيمته فووووق كانت بـ 15عشان استخدمه نف ر
الشط
ي ي ي
الل فات
ودا نفس الحل بالظبط بشكل مختض جدا جدا عن ي
ر ا
مباشة الكود اشتغل عادي الل اسمه mainLocation
لكن اول ما شلت الـ thisوعوضت بالمتغت ي
ن
وبكدا يكون الحل تم يف سطر واحد فقط
ل️♥
ي ️♥راقت
أي خوف جواك هتواجهه وتشتغل عليه هتحقق انجاز واي خوف هيخوفك وهتكسل او تخاف تواجهة
ن
هيتحول لنقطة سودة يف حياتك وندم مالزمك واجه خوفك ..مش عارف حاجه اتعلمها
صاحن
ري اوع تستسلم يا
ي
كلمة spreadمعناه انتشار وبيتم كتابة syntaxالـ spreadعن طريق كتابة " 3نقط " ...قبل الـ iterable
ان اعمل extractأو expandللعنارص المستهدفة ن
الغرض من استخدام الـ spreadهو ي
تان حاجة عملت Spreadلالسم فعمل انتشار للحروف أول حاجة طبعت اسمه " "Osamaعادي جدا ...ن
ن ي
تالت حاجة عملت Spreadلالسم داخل اقواس الـ arrayفحول كل حرف لـ indexيف Array
بمعن ن
تان اعمل منها نسخة ن او متغت جوا array أخزن إن أقدر من خالل الـ Spreadن
ي ي ي
من خالل الـ spreadاقدر اضيف عنارص Arrayداخل عنارص arrayتانية كبديل للـ push Method
عل arrayموجودة فعال عندي بدل ما كنت
عن طريق الـ Spreadاقدر طبق خواص الـ Math Methodي
بحط ارقام بداخل الـ Math Methodعشان أوصل للنتيجة
ن ن
قوسي الـ [] array كذلك يف عمليات دمج الـ Arrayاو أي حاجة تخص التعامل مع الـ Arrayالزم احطها داخل
By: Amr Elsayed
Map And Set Challenge Lesson #133
02 :التكليف
// Assignment 2
let myFriends = ["Osama", "Ahmed", "Sayed", "Sayed", "Mahmoud", "Osama"];
console.log(Array.from(new Set(myFriends)).sort());
console.log([...new Set(myFriends)].sort());
// Needed Output
// (4) ['Ahmed', 'Mahmoud', 'Osama', 'Sayed']
03 :التكليف
// Assignment 3
let myInfo = {
username: "Osama",
role: "Admin",
country: "Egypt",
};
// Needed Output
// Map(3) {'username' => 'Osama', 'role' => 'Admin', 'country' => 'Egypt'}
// 3
// true
console.log(+[...new Set(theNumber.toString())].sort().slice(true).join(""));
console.log(
+[...new Set(Array.from(theNumber.toString(), (e) => (e > 0 ? e : "")))].join(
""
)
);
// Needed Output
// 123
05 :التكليف
// Assignment 5
let theName = "Elzero";
// [1]
console.log(theName.split(""));
// [2]
console.log(Array.from(theName));
// [3]
console.log([...theName]);
// [4]
let emptyArray = [];
for (let i = 0; i < theName.length; i++) {
emptyArray.push(theName[i]);
}
console.log(emptyArray);
// [5]
console.log([...new Set(theName)]);
// [6]
console.log(Object.assign([], theName))
// Needed Output
// ['E', 'l', 'z', 'e', 'r', 'o']
// [1]
let charsOne = ["A", "B", "C", "D", "E", 10, 15, 6];
console.log(charsOne.sort().copyWithin(0,3,6))
// Needed Output
// ['A', 'B', 'C', 'A', 'B', 'C', 'D', 'E']
// [2]
let charsTwo = ["A", "B", "C", 20, "D", "E", 10, 15, 6];
console.log(charsTwo.sort().copyWithin(0, 4, 8))
// Needed Output
// ['A', 'B', 'C', 'D', 'A', 'B', 'C', 'D', 'E']
// [3]
let charsThree = ["Z", "Y", "A", "D", "E", 10, 1];
console.log(charsThree.copyWithin(2))
// Needed Output
// ["Z", "Y", "Z", "Y", "A", "D", "E"]
07 :التكليف
// Assignment 7
let numsOne = [1, 2, 3];
let numsTwo = [4, 5, 6];
// [1]
console.log([...numsOne,...numsTwo])
// [2]
console.log(numsOne.concat(numsTwo))
// [3]
console.log([...Array.from(numsOne), ...Array.from(numsTwo)]);
// [4]
numsOne.push(...numsTwo);
console.log(numsOne)
// Needed Output
// [1, 2, 3, 4, 5, 6]
ن
تحفتية️♥ ️♥عبارات
ن
التمجة مش مقتض ع الـ JSبس
ببساطة شديدة جدا الـ Regular Expressionموجود يف معظم لغات ر
طيب أي الفائدة منه بختصار ...
يح دور الـ Regular Expressionالل ببساطة من خاللها بقدر اعمل رشط بسيط ر
الشط دا بيكون ي هنا بقا ر ي
ن
معي ثابت متعارف عليه ومتعارف انه الـ patternدا بيكون Validاو صحيح فيه Pattern
يعن مثال دا patternلميل Not validاو غت صحيح ن
ي
ن
ماليي السيناريوهات عشان هيبف الموضوع صعب جدا وهتحتاج ر لو انت استخدمت الـ if conditionالعادي
ي
الشوط الصحيحة ألي ميل validاو أي URLلموقع مكتوب بشكل صحيح تتطابق كل ر
ن
الل زي دي
ي المواقف ف
يح دور الـ Regular Expressionsوبساطة تعاملها يوهنا بقا ر ي
عل سبيل المثال الـ IPدا validوصحيح ولكن عشان تتأكد من صحة كل مقطع فيه لو استخدمت الـ IF cond
ي
يعتت IPبسيط مابالك بقا لو IPv6مثال او الـ Mac Address
هتواجه صعوبة شديدة ودا ر
وعل سبيل المثال برضو كل الـ URLالمكتوبة هنا او كل patternاو نمط من دول مكتوب بيه الـ URLهو نمطي
صحيح وسليم فانت بتستخدم الـ Regular Expressionعشان تعمل Matchingاو مطابقة لكل مقطع
ن ن
الل يف الـ screenهو سليم وصحيح
ي بالشكل اتكتب لو دول من مقطع كل ان وتتأكد URL ـ لا ف
موجود ي
ن
فتقوله لو الـ URLمكتوب httpبس سليم لو httpsسليم لو يف االخر فيه Comسليم لو netسليم او org
سليم
Regular Expression – Modifiers Lesson #135
ر
دلوقن هنتعرف ع الـ Syntaxبتاعها وطرق الكتابة بعد ما فهمنا وظيفة الـ Regular Expression
ي
بتاع بيكون فيه اول حاجه الـ patternبعد كدا عندي حاجة اسمها Modifier
ي اذا دا الـ syntax
ن
بيتم استخدام الـ modifierدا عشان اعدل يف طريقة البحث
ن
وكأن بقوله تجاهل حساسية ن
يعن لو كتبت جنب الـ Patternدا أي حاجه من الـ modifiersدي وليكن الـ iدا يي
الحرف األول سوا انا كتبته Smallاو Capital
عل اسم elzeroسواء اول حرف فيه Smallاو ن ن ن
يعن هيدور ي
يعن Globalي
الل هو الـ gي
تان flagعندي ي
ي
capital
ن ن
ويرجعهال يف شكل Array
ي عل كل أسماء الـ elzero
يف الطريقة دي هو بيدور ي
ن ن
معي مش موجود يف الـ Stringبتاعك هتجعلك null لو كتبت Pattern
سع ️♥
كمل ي
اذكر هللا ️♥
الزموا ذكر هللا ففيه العون عل متاعب الحياة ️♥
ن ن
ممت جدا يف الـ Regular Expressionكمان هيساعدك تحل مسائل بطريقة أسهل كتت عن األول الـ ranges
ن ن
الل موجودين يفي حاجات 3 ـ لا من واحده أي يرجعل
ي أقوله عشان OR | ـ لا عالمة استخدمت دا المثال ف
ي
ن ر
عل العنارص الموجودة يف المتغت tldاول حاجه هيالقيها بتطابق الكالم الموجود فهيمش ي
ي بتاع
ي الـ pattern
ن ن
ان استخدمت Flagالـ iعشان يتجاهل حساسية الحروف ه كلمة ...... orgوالحظ ي يف الـ patternهتكون ي
الل
ولو حطيت الـ i <= flagsو gهيجيب كل العنارص ي
الل انا حطيته
بتـ matchمع الـ Patternي
هنا مثال عندي متغت اسمه numsموجود فيه مجموعة ارقام ....بعد كدا متغت اسمه numsReبحط فيه
بتاع بقوله فهيه انا عايز األرقام من 9-1وكتبت الـ flag gعشان يجيب كل األرقام
ي الـ Pattern
ن ن ن
هاتل كل األرقام ماعدا الموجودة يف الـ ringمن 0لـ 2
ي ان بقوله
بتعت عن ي
الل ر
يف المثال دا استخدمت الـ ^ notي
ن ن
ال 9
هاتل كل العنارص الموجود عندك ما عدا األرقام الموجود يف الرينج من 0ي
ي يف المثال دا بقوله
فهيطبع كل الـ charactersالل موجودة ن
بي األرقام ي
طبعا شايف الطريقة دي سهلة جدا مقارنة بالـ conditionو الـ loopو الـ filterوالحاجات دي
ن
ال 8وبعدين كلمة Os
بتاع بيبدأ بكلمة Osوحطيت رينج ارقام من 5ي
ي يف المثال دا انا بقوله الـ pattern
ومعاها الـ Global Flag
الل فوق ،ولكن ع الحروف abeمرة انا عايزهم ومرة تانيه باستخدام الـ ^ عايز كل حاجه اال هما
نفس األمثلة ي
ن
يف المثال دا مع استخدام الـ ^ Notانا بقوله عايز كل حاجه سوا Numbersاو Charactersما عدا الـ letters
كلها سواء Capitalاو small
ن ن
ان عايز بس الـ Special Charactersفقط ما دون ذلك
وف المثال دا مع استخدام الـ ^ انا حددت ي
ي
سواء Numbersاو Lettersمش محتاجهم
الـ character classesهتساعدك تحلل وتفكك االكواد المعقدة او من خاللها هتقدر تعمل matchبسهولة
ألي داتا بحيث ر
تنتف الـ Validation dataبس
ي
.
اول characterهو الـ dotودا بيـ matchكل الـ Charactersر
حن الـمسافات ما عدا الـ new lines
او الـ line terminators
بعد كدا عندي الـ \wوالحظ ان الـ wمكتوبة smallودا بيستخدم عشان يـ matchاو يستخرج
ال ذلك و الـ _underscore
الـ word charactersزي الحروف من a-zو A-Zو األرقام وما ي
ر
باف
عل كل الحروف واألرقام بعدها طلبت ان ي
بتاع كتب الـ \wعشان احصل ي
ي مكان ما بكتب الـ pattern
الـ patternيكون رقم او حرف وبعدها عالمة @ بعدها يكون فيه برضو حرف او رقم فستخدمت الـ \w
وبعدها يكون عندي dot .فحطيت نقطة بعد النقطة ر ي
بيح comأو net
هنكمل مع بعض الـ Character classesوكمان هندرس حاجه اسمها Test Method
ن
ه أسمائهم لكن يف
الل ي
فطبيع هيسجل ناس بأسماء عادية ي
ي لو عندي موقع وفيه اشخاص هتسجل فيه
اشخاص تانيه بيكون Spammersفانا عايز استخدم الـ regular expressionعشان اعرف األشخاص دي
واتجنبهم مثال
استخدمت الـ \bوبعدها كلمها Spamوبعدين كتبت | وبعدها كلمة Spamوبعدها \b
الل انا عايزوا
بينته بكلمة Spamهو دا ي
ي انا هنا بقوله أي اسم بيبدأ بكلمة Spamاو
تعال نشوف
ي طيب فيما تستخدم الـ Test Method
ن
استخدمت الـ testمع الـ patternالمكتوب يف متغت الـ reفالنتيجة كانت trueألن الـ patternالموجود
ن ن ن
ه كلمة Spamسواء يف األول او الل ي
الرئيش ي
ي يف الـ reبينطبق عل خمس أسماء موجودين يف متغت الـ names
ن
يف االخر
ً
كل ما زادت محاوالتك زادت إخفاقات زادت مهاراتك زدت نجاحا
ن
يعن الـ \wزي ما اتعلمنا مسبقا بتستخدم عشان اجيب كل الـ Charactersمن a-zمع استخدام الـ +
ي
بي الـ a-zاو ر
اكت من حرف جنب بعض فانا بقوله الـ characterدا ممكن يكون حرف واحد ما ن
بعد كدا استخدمت الـ @ عشان سواء هتيح بقا بعد حرف واحد او ر
اكت من حرف ر ي
بتيح بعد الـ email provider بعد كدا كتبت الـ .او النقطة ي
الل ر ي
ن
تان عشان أقوله ان بعد الـ .او النقطة ممكن يكون حرف او ر
اكت زي ruو com بعد كدا استخدمت الـ \w+ي
وهكذا
ن ن
تان Quantifierمعانا هو الـ * ودا بستخدمه يف التعبت عن احتمال يكون فيه characterواحد او number
ي
نهان ن
واحد بي مجموعة ارقام او مفيش ي
ر ر ن ن
الل بتبدا بـ 0
هان مجموعة األرقام بشط ي
يعن يف الـ Patternدا انا بقوله ي
ي
الل بقوله فيها بعد الـ 0دا ن يف digitsاو ارقام تانية ولكن مع استخدام الـ *
وبعدين استخدمت \dي
فانا بقوله بعد اول 0ممكن يكون فيه رقم واحد او ارقام او مفيش وال رقم خالص
ن
تان
بعد كدا قولتله 0ي
ن
بعد حرف الـ sيف كلمة httpsكتبت الـ ? عشان أقوله ان الـ sدي ممكن تكون موجودة مرة واحده زي https
او مش موجودة وال مرة زي http
الل دي \ ي
الل كنت بستخدمها عشان اعرف بعد كدا حطيت الـ ://ولكن قبل الـ //حطيت عالمة الـ escapeي
ر
انن فيتم تجاهله من اللغة
تبع انا مش تبعك ي
التمجة ان الـ characterدا ي لغة ر
ن
بعدها حطيت عالمة الـ ? بعد الـ ( )https?:\/\/عشان أقوله ممكن الـ patternدا يكون موجود يف الموقع مرة
او ممكن مش موجود وال مرة زي اخر موقع كدا نف الـ urlsالل فوق (وبص عل اخر ملحوظة هتفهم ر
اكت) ي ي
ه ممكن تكون موجودة مرة او مش موجودة ) (www.وبعدها عالمة الـ ? عشان أقوله ي بعدها برضو كتبت الـ
ن
عل بعض
ه جروب كدا كله ي الل فوق برضو الحظ ان الـ ) (www.ي وال مرة زي اخر موقع كدا يف الـ urlsي
فـييكون موجود كله مرة واحدة او مش موجود وال مرة عشان كدا بعد الجروب دا حطيت الـ ?
بعدها كتبت \w+عشان أقوله بعد الـ www.لو موجودة او مش موجودة خالص هيح كلمة او ر
اكت ر ي
ن ن
زي googleو websiteدا يف حالة وجود الـ www.اما يف حالة عدم وجود الـ www.زي اخر موقع
ن ر
هالف باستخدام الـ \w+انه كتب كلمة webالموجودة يف اخر موقع
ي
بتيح قبل الـ Top level Domainزي .comو .netوهكذا بعد كدا كتبت الـ .او النقطة ي
الل ر ي
بعد الـ .استخدمت الـ \w+عشان أقوله ان بعد الـ .هيح حرف او ر
اكت زي comو netو urو org ر ي
اتني او ر
اكت حرف او ن
ن ن
يف اخر مثال دا انا بقوله يف الـمتغت namesدا هل بيبدأ بأي digitsمن خالل استخدام الـ \d
واالجابة trueالن اول اسم بيه بيبدأ بـ 10
تالت Quantifierعندي وهو الـ =? بستخدمه عشان اعمل matchingألي حاجة متبوعة بالـ character
الل انا هحطه دا
ي
رابع Quantifierعندي وهو الـ !? بستخدمه عشان اعمل matchingألي حاجة ليست متبوعة
الل انا هحطه دا
بالـ characterي
ر
صديف وهو دا مفهوم االستمرارية الصحيح ال تقلق انت كويس جدا يا
ي
العل العظيم
ي ال حول وال قوة اال باهلل
ن
الظالمي ان كنت منال إله اال انت سبحانك ن
ي
ن ن
استخدمت الـ replace methodعشان أبدل أول @ يف الجملة الموجودة يف المتغت txtبكلمة JavaScript
ن ن
استخدمت الـ replaceAllعشان أبدل كل @ يف الجملة الموجودة يف المتغت txtبكلمة JavaScript
ن
معي واستخدم عليه الـ replace ان احط pattern ممكن كمان استخدم الـ regular expressionنف ن
ن ي ي ن
ر
ممكن اعمل الـ patternدا يف متغت زي reوممكن اعمل الـ patternدا يف الـ consoleمباشة
Regular Expression – Form Validation Lesson #144
بتاع
ي عملت هنا eventالـ onsubmitع الـ form
ن
الل الـ userهيكتبها يف الـ input
عملت متغت اسمه phoneInputوظيفته تسجيل الـ valueي
ن
قوسي وعملت طبعا escapeلالقواس بعدا كدا عملت الـ patternبتاع الل هو عبارة عن digits 4ن
بي ي ي
بعده \sتعمل .... spaceبعدين .... digits3بعدين .... -بعدين digits4
ن
المواقع المذكورة يف الدرس
regexr.com
regextester.com
regex101.com
// Another Solution
let ipRee = /(\w+|\D+)+/gi;
console.log(ip.match(ipRee));
02 :التكليف
// Assignment Two
console.log(specialNames.match(specialNamesRe));
console.log(specialNames.match(specialNamesRee));
03 :التكليف
// Assignment Three
let phone = "+(995)-123 (4567)";
console.log(phone.match(phoneRe));
console.log(phone.match(phoneRee));
console.log(phone.match(phoneReee));
console.log(phoneRe.test(phone), phoneRee.test(phone), phoneReee.test(phone));
04 :التكليف
محتاج كالم كتت مش الزم مش الزم
// Another Solution
// let dateRe = /\d+(\/|\s-\s|\s)\d+(\/|\s-\s|\s)\d+/gi;
//Another Solution
let dateRe = /\d{2}(\s|\/)(-)?(\s)?\d+(\s|\/)(-)?(\s)?\d+/gi;
console.log(date1.match(dateRe)); // "25/10/1982"
console.log(date2.match(dateRe)); // "25 - 10 - 1982"
console.log(date3.match(dateRe)); // "25 10 1982"
console.log(date4.match(dateRe)); // "25 10 82"
06 :التكليف
// Assignment Six
let url1 = "elzero.org";
let url2 = "http://elzero.org";
let url3 = "https://elzero.org";
let url4 = "https://www.elzero.org";
let url5 = "https://www.elzero.org:8080/articles.php?id=100&cat=topics";
// Another Solution
// let urlRe =
/((http?)s?:\/\/)?(\w+.)?\w+.\w+(:\d+\/\w+.\w+\D\w+\D\d+\D\w+\D\w+)?/ig;
console.log(url1.match(urlRe));
console.log(url2.match(urlRe));
console.log(url3.match(urlRe));
console.log(url4.match(urlRe));
console.log(url5.match(urlRe));
الصعوبة ديما بتقل بعد أول محاولة وانت اكيد مقتنع ان بعد أول محاولة ر
الشء الصعب بتكتشف انه بقا سهل
ي
ن ن
عل شكل كتابة الـ object
ي الكتابة ف
ي وبيعتمد JS ـ لا كتابة ف
ه مجرد Styleمختلف شوية ي
-الـ OOPي
ن
-الـ OOPمش حاجة جديدة بالعكس دا موجود من الـستينات و يف بعض اللغات بتدعم الـ OOPولغات تانية ال
ولغات تانيه بتدعم حاجات من الـ OOPوحاجات تانيه الء
-الـ Objectنفسه زي ما اتعلمنا عبارة عن حقيبة كدا او Packageبيكون جواها Propertiesو الـ Methods
ن
معي ن
االتني دول مع بعض بيعمل اتحاد عشان يعمل Appبـ Style وجود
ممتات انك تستخدم الـ OOPهو انك من خالله هتقدر تكتب Large and Complex Softwareن -لكن
ن
يعن أي تطبيق كبت ومعقد جدا الـ OOPهيساعدك تفكك التعقيد دا ببساطة وتشتغل
ي
-هتقدر من خالل الـ OOPانك تعمل Encapsulationاو إخفاء الجزاء من الـ code
ن
بتخلين اعمل المخطط دا بقا وكمان اخد أجزاء من المخطط دا اطبقها عالم الـ OOPهو عبارة عن حاجة
ي ن
يف أماكن تانية
ر
منطف ؟! فتخيل لو عندك 1000موظف هل
ي
انك ر
تمش عليهم بإيدك كلهم واحد واحد وتعدل عليهم؟
ي
بتاع
ي الل اسمها newدي وجنبها اسم الـ constructor اج اعمل userجديد من خالل الـ keywordي لما ر ي
الل هو أسم الـ User <--- functionي
هكتب أي بقا بداخل الـ userالجديد دا ؟! ...هكتب الـ idو الـ usernameو الـ salary
فانا قولتله مكان الـ thisهكتب userOneومكان الـ iهتكون الـ idوهكذا
ن ن
الل فات انا بعمل Constractorبالـ Syntaxالعادي يف الدروس الجاية هيكون يف syntaxمختلف
كل ي
وافضل وتابع اللـ ES6
ن
بتاع
ي دا الـ ES6 Syntaxيف كتابة الـ Constructor Function
ن
وبما انه يف كل األحوال الـ userOneدا instanceمن الـ User Constructorهتكون النتيجة Ture
ن ن
يف الـ this.uعملت conditionيف حالة لو الـ userمكتبش اسمه فهتكتب مكان االسم كلمة Unknown
ن
الل هتتطبع كتبت this.uبدال من usernameعشان لو انا كتب username اما يف الـ this.msgنفالرسالة ي
وهو بيطبع الرسالة ف حالة لو الـ userمكتبش اسمه الرسالة الل هتطبع دي هيكون مكان االسم ن
فاض تماما
ي ي ي
فالرسالة هتتكتب hello ,من غت أي اسم هيكون فراغ empty string
ن
الل الـ userعوض عنه كـ argument اما يف حالة لو كتبت salaryبس بدال من this.sهيكتب الـ salaryي
الل هتطبع ف الرسالة لكن انا أصال عامل رشط انه لو اقل من 5000 ي فهيعن لما هو كتب 5000ي ي
تحت ن
ن ن ن
إضاف لذلك انا كتبت الـ this.sعشان يقرا ر ن
الل حصل يف الـ this.uأصال ويعوض يف الرسالة
ي ط الش ي فتود 500
عن الـ salaryبـ 5500
هتكون دي النتيجة
الل زودتهم انا لو الـ salary 500 ـ لا نف حالة اول userالـ 5000بتاعت الـ salaryاتكتب زي ما ه ولكن ن
في
ي ي ي
مش موجودة ... !اقل من 5000؟
بما انه نف أخر الدرس دا قالك انا عايزك تفهم قبل ما تتعمق مش تتعمق األول بعدين تفهم فتعال ر
نشح بطريقة ي ن ي
الل أتذكر يف الدرس دا
نفهم بيها كل ي
ر
يبف انا محتاج اعمل Methodاو functionتنفذ المطلوب
أول حاجه لو عايز اعمل Updateللـ usernameي
دا
ن ن
الل تم انشاء الـ stringبيهم
ي الطرقتي ف
تعال األول نشوف نوع بيانات كل واحد ي
ي
ن
الل حصل فوق
تعال بص بقا ع دي عشان هتفهم الفرق يف ي
ي
هنا انت بتقوله هل الـ strOneدا متماثل من الـ string constructor؟! هتكون النتيجة ال false
طيب هل الـ strTwoدا متماثل او مأخوذ من الـ string constructor؟! هتكون النتيجة اه true
دا حصل فعال
ن ن ن ن
الحالتي يف اول حالة انت فعال يف حالة الـ strOneبتستخدم الل حصل يف
طيب هو أي ي
الـ string constructorفعال ولكنه مش متماثل من الـ string constructorالنه معمول بطريقة تانية
اما الـ strTwoمتماثل فعال من الـ string constructor
ر
هتالف strOneنتيجته falseاما الـ strTwoنتيجته true
ي لذلك
ر
هالف النتيجة دي:
ي أج اعمل Accessعل الـ count Propertyدي من الـ objectنفسه
لما ر ي
ن
عل أي حاجة يف الـ User Class
الل هو userOneيقدر يـ Accessي
إذا الـ Objectي
By: Amr Elsayed
التال
ي الل اسمه Userدا وكتبت
طب لو انا مسكت الـ Classنفسه ي
عل الـ countدي والـ objectبتاع الـ userOneمش هيقدر هنا بقا الـ User Classهو هيقدر يـ Accessي
ن
فاهمن ؟! الل حصل بعد كلمة staticقبل خاصية الـ countجعل الوضع السابق معكوس ر
ي يبف ن ي
يوصلها ي
الل بيتم انشائها منه
اذا زي ما قولنا يف أول سطر فوق الـ staticبتخص الـ Classنفسه والـ objectsي
ملهاش عالقة بأي Static Property
ه تخص الـ Classنفسه وكذلك الوضع مع أي Methodداخل الـ Classنفسه لو سبقه كلمة Staticر
يبف
ي ي
عل الـ Methodدي
واي objectبيتم انشائه من الـ Classدا ميقدرش يـ Accessي
طبعا انت خالص فهمت ان الـ countMembersدي بقت تخص الـ Userنفسه بقا لذلك الـ Userنفسه
الل قادر انه يـ Accessعليها
هو ي
طيب ن
معن الـ codeأي ؟ أو انا عملت أي؟!
ي
ببساطة انا عملت static Propertyاسمها countقيمتها 0
ن
عل الـ Classنفسه
وف الـ methodبتاعت الـ countMembersانا قولتله this.countالـ thisدي بتعود ي ي
يعن انا ممكن اشيل الـ thisدي واحط User.countولكن انا بستخدم الـ thisعشان لو انا غتت اسم ن
ي
تان مبقاش مضطر انزل اغت اسمه مرة كمان تحت فاهم انا ليه استخدمت الـ this ن
الـ Classمن Userألي اسم ي
عل الـ User Classنفسه
المهم زي ما قولنا الـ thisدي بتعود ي
داخل الـ Constructorنفسه بقا انا قولتله الـ User.count++عشان الـ countدي تخص الـ Userفهو الوحيد
عل انه يقراها ويتعامل معاها فاهم القادر ي
الل بـ 0دا مع كل انشاء لـ Objectجديد من الـ User Classدا ن
معن الكالم دا انه بقوله الـ count
ي ي
يبفالـ Countدي تزيد بمقدار عدد الـ Objectsالل تم انشاؤها فعليا وبما نان نف المثال عندي Objects 2بس ر
ي ي ي ي
هما دول قيمة الـ countالجديدة 2بس او ==< 2 Members Createdومع كل زيادة تزيد قيمة الـ count
Class Inheritance Lesson #153
يح دور الـ inheritanceاو التوريث فبدل ما تكون بـتـ repeat your selfأو بتكرر نفسك هنا ر ي
َ ن
بمعن اخر بتعيد انشاء العجلة من أول وجديد وكمان قتلت مبدأ الـ reusabilityاو إعادة االستخدام او
ي
ن
ه دي
ي كدا وبس الجديد Admin Class ـ ل ل دا User Class ـ لا ف
فانت ممكن تورث بعض الخصائص الموجودة ي
كل الفكرة
والل جاي بعد كدا مجرد بس أسلوب لكتابة نقل التوريث دا من مكان ألخر فقط ال غت
ي
ن
يعن انا بقوله انا عايز شوية حاجات من
Adminدا كلمة extendsمن الـ User Classي
ن
انا بقوله جنب الـ Class
الـ User Classدا استخدمها يف الـ Admin Class
الل انا هستمدها من الـ User Classدا زي الـ idو الـ userName
وبعدين قولتله Superوجواها الحاجات ي
ن ن
خلين بقا اعمل Objectجديد من الـ Admin Classدا و أشوف بياناته يف الـ Console
ي
الـ eSalaryدا عشان اخليه encryptedاو مشفر هحط قبل االختصار بتاع هاش #والزم اعمل Declaration
ر
هتالف أصال ليه أي قيمة !
ي لو بعد تشفت الـ eSalaryدا حبيت ـ Accessعليه مش
جابل NANومجبليش أي ارقام ان كاتب 5000رقم مش stringوال حاجة ومع ذلك والحظ ن
ي ي
حن لو لغيت العملية الحسابية خالص وحبيت Accessع الـ eSalaryدا مش هالقيه أصال بالرغم من وجودةر
ي
وكل دا حصل ن
الن عامله تشفت
ي
ن
طيب يف حالة لو الـ eSalaryاتكتب بالشكل دا " "5000 Gnehهنا انا محتاج احلل البيانات دي واطلع منها
ن
الرقم بعدين اعمل العملية الحسابية وكل دا يف ايطار تشفت البيانات برضو
طيب ن
يتعامل مع الـ Propertyر privetدي ؟! قالك ياسيدي الوحيد ي
الل يقدر يتعامل معاها
ن
الل يقدر
ي مي
باف الـ propertiesالتانية و الـ Methods
الل معاها يف الـ Classيقصد ي
هما الـ familyي
الل تقدر تشوف الـ privet propertyدا و تتعامل ن
ه يالل بداخل الـ User Classي معن الكالم دا ان كل العنارص ي
ي
تعال نشوف
ي معاه .....طيب نطبق الفكرة دي ازاي ؟! .....
الل بيتم فيها استنساخ أي خواص وه ببساطة شديدة جدا األلية ي
الـ prototypeمعناها نموذج او مخطط ي
موجودة داخل أي Classاو Built-in Constructorsو استخدمها داخل أي Classهيورث من الـ Classاألب
نقدر نقول بشكل مختض ر
اكت انها أليه عن طريقتها الـ Objectsبتورث الخواص من بعض!
ن ن
يعن يف حالة وجود الـ User Classدا عند انشائه بيكون فيه Prototypeمخصص ليه جواه الخواص ي
ن
والممتات بتاعته
الل ن ن
ان اورث كل الممتات ي
اج بقا استخدم الـ newعشان اعمل Objectجديد من الـ User Classدا أقدر ي لما ر ي
ه موجودة داخل الـ Classاو المخطط بتاع الـ Classدا ي
زي ما قولنا أي Objectهيتم انشائه من الـ Classدا هيستفيد من الخواص او المخطط الموجود بداخل
الـ Classدا !
لو عملت متغت جديد اسمه strOneوانشأت ليه القيمة " "Elzeroالعملية دا تمت ازاي ؟!
ً
الل انا عملته يقدر يتمتع بيها
ي strOne ـ لا دا String Constructor ـ لا داخل الموجودة الحاجات كل ا اذ
ويستخدمها
ن ن
يعن يا باشا ببساطة كدا الـ userOneدا عشان هو يف األصل معمول من الـ User Classفهيورث الخصائص
ي
الل فيه ...وكمان عشان هو أصال كدا كدا نوعه Objectفهيورث الخصائص بتاعت الـ Object Constructor ي
ن
فاهمن؟! كمان ..
ي
الـ Prototypeألي عنض دا انا ممكن اضيف فيه أي حاجة انا عايزه
خالل فأي objectبقا ن
يعن مثال الـ User Classدا انا هضيف جوا الـ Prototypeبتاعه خاصية معينة من
ي ي
الل انا هعملها بإيدي!
هيورث أصال خصائص الـ User Classدي الـ Defaultأصال باإلضافة للـحاجة ي
User Class
زي ما انت شايف كدا الـ User Classدا انا أصال ضيفت functionجوا الـ Prototypeبتاعه اقدر استخدمها
عادي ضيفتها بايدي انا
كدا مخطط الـ Userانا ضيفت جواه Functionوظيفتها تقول Welcomeللـ userName
انا بقا بداخل الـ String Constructorدا هضيف خاصية او functionبايدي انا تتحط داخل المخطط بتاعه
الل عملتها بإيدي دي! ن
عل الخاصية او الـ functionي
شغل يقدر يـ Accessي
ي واي stringهيتم انشائه يف
يعن ومررت ليهامسكت الـ String Constructorدا ضيفت نف الـ prototypeبتاعه methodاو Functionن
ي ي
Parameterهيتشال ويحل محله قيمة أي Stringهيتكتب
الل هيتكتب دا تحط قبله نقطة وبعده نقطة
وظيفة الـ functionدي بقا انها تمسك الـ valاو الـ stringي
ان عندي الـ myObjectدا وعايز اضيف جواه Propertyجديدة وليكن c: 3مثال ن ر
لنفتض ي
ن ر ن
والل فيما بعد هنفهم كل حاجة فيه
ي التال
ي وممت هعمله من خالل الـ syntax اف
فعشان اعمل دا بشكل احت ي
ن ن
الل هضيف جواه Propertyجديدة ان بحدد الـ objectي
الل فات دا هو ي
أول حاجه يف الـ syntaxي
الل بيكون ن
بيح الجزء الخاص بالـ {…} descriptorي
ه " "cوبعدين ر يالل ي
تان حاجة بحط اسم الـ propertyي ي
جواه بعض العنارص لو مكتبتهاش الـ Defaultبتاعها بيكون False
الل انا بضيفها بقا
بتيح الـ valueي
بعد كدا ر ي
ن
الل اسمها ""c
يف حالة لو حابب اعدل الـ Valueبتاعت الـ propertyي
ن
التعديل هيتم عادي جدا بدون أي مشاكل وكل دا حصل عشان يف جزء الـ descriptorدا
ن
يف قيمة عندي اسمها writeableقيمتها بـ true
لو انا بقا عدلت القيمة دي بـ falseن يف الحالة دي لو حبيت اعدل الـ Valueبتاعت الـ " "cفمش هينفع!!
ن
الل اسمها enumerableوعدلت قيمتها بـ False
لكن لو جيت يف جزء الـ descriptorدا عند القيمة ي
ن
هيستثن الـ " "cمن الـ loopومش هيعمل حسابها هنا
ن ي
ر
الن بكل بساطه منعتها من االشتاك يف الـ Loopولكن مش بتتحذف ن
ي
ر
ه بتفضل موجودة ولكن بتتمنع من االشتاكنمن الـ Objectنفسه ي
يف أي loopهيتم
ن
الل اسمها " "cبالـ valueبتاعتها فعندي أصال methodاسمها delete
ي property ـ لا احذف عايز لو حالة ف
ي
من خاللها بقدر اتمم عملية الحذف دي
ن
الل اسمها configurableوعدلت قيمتها بـ False
لكن لو جيت يف جزء الـ descriptorدا عند القيمة ي
بتاع دا مش هيحصل
ي ساعتها لو جيت احذف الـ " "cمن الـ object
يبف الـ configurableلو بقت قيمته بتساوي falseمش هتقدر تحذف الـ propertyوال تعدل عليها ر
ن ن ي
تان
وال تعمل redefinedللقيمة دي يف أي مكان ي
Object Meta Data And Descriptor Part 2 Lesson #158
ن
الل عندي والتعديل
ي object ـ ل ل واحدة Property نضيف ممكن اي
ز ا عرفنا فات الل
ي الدرس ف
ني
يف الـ descriptorالخاص بـ الـ propertyدي من خالل methodاسمها defineProperty
ن
الل يف الـ objectنفسه كلها بقا مش هقتض ع خاصية واحدة
طيب لو حابب ابحث عن كل الخصائص ي
فهكتب Object.getOwnPropertyDescriptorsوالحظ ان descriptorsجمع
class Car {
constructor(name, model, price) {
this.n = name;
this.m = model;
this.p = price;
}
run() {
return `Car Is Running Now`;
}
stop() {
return `Car Is Stopped Now`;
}
}
// Needed Output
console.log(
`Car One Name Is ${carOne.n} And Model Is ${carOne.m} And Price Is ${carOne.p}`
);
console.log(
`Car One Name Is ${carTwo.n} And Model Is ${carTwo.m} And Price Is ${carTwo.p}`
);
console.log(
`Car One Name Is ${carThree.n} And Model Is ${carThree.m} And Price Is
${carThree.p}`
);
console.log(carOne.run());
console.log(carOne.stop());
// "Car One Name Is MG And Model Is 2022 And Price Is 420000"
// "Car Is Running Now"
02 :التكليف
// Assignment Two
class Phone {
constructor(name, serial, price) {
this.name = name;
this.serial = serial;
this.price = price;
}
}
console.log(`${TabletOne.fullDetails()}`);
// iPad Serial is 100200300 And Size Is 12.9
console.log(`${TabletTwo.fullDetails()}`);
// Nokia Serial is 350450650 And Size Is 10.5
console.log(`${TabletThree.fullDetails()}`);
// LG Serial is 250450650 And Size Is Unknown
console.log(userOne.showData);
// Hello Osama Your Credit Card Number Is 1234-5678-1234-5678
console.log(userTwo.showData);
// Hello Ahmed Your Credit Card Number Is 1234-5678-1234-5678
console.log(userThree.showData);
// Hello Ghareeb Your Credit Card Number Is 1234-5678-1234-5678
04 :التكليف
// Assignment Four
const myObj = {
username: "Elzero",
id: 100,
score: 1000,
country: "Egypt",
};
myObj.score = 500;
delete myObj.country;
console.log(myObj);
// Needed Output
ن
الل بستخدمها مع الـ Data Constructor
يف الدرس دا هنتعرف عل بعض الـ methodsي
كل حاجة كبتة بتكتبها بيكون ليك حرية انك تعدل نف األقل منها بشكل ر
مباش ي
ن
يعن لو انا كتبت سنة معينة ولكن 2020من خالل الـ setFullYearفممكن احدد بعده الشهر واليوم
ي
ن ن
وثوان معاها
ي كذلك االمر يف الساعة لو كتبت الساعة من خالل الـ setHoursفاقدر اكتب دقايق
ن
الثوان ولكن مقدرش طبعا احدد الساعة قبلها ولو كتبت الدقائق من خالل الـ setMinutesفاقدر بعدها احدد
ي
ن
الل بتكون اصغر منه وتابعة ليه
اكت تقدر تتحكم يف الحاجات ي
فزي ما قولتلك كل ما تبدأ من مكان ر
بالملل ثانيه
ي وترجعل النتيجة أول حاجة عندي Methodبتعمل تحليل للـ dateلو مكتوب String
ي ن
بالتال هيجيب
ي بالملل ثانيه دي بعد ما عملت تحليل للبيانات وحطيتها يف الـ Date
ي الل
فانا خدت النتيجة ي
تاري ــخ ميالدي
ن
يف الطرق دي بيقولك تقدر تكتب الـ dateبكل الطرق دي برحتك وممكن التاري ــخ المكتوب بالشكل دا
1998-11-9تكتبه كدا 1998/11/9او تبدل القيم وتسيب بينهم مسافات او تكتبه كدا 1998@11@9
كل دا هيتقرأ عادي ممكن تكتب السنة والشهر بس زي كدا 1998-11ممكت تكتب السنة بس سواء 1998
ن ر
باف التاري ــخ بـ 1يناير يف حالة لو انت محددتش الشهر واليوم
او 98بس وهو بيكمل ي
ن ن
وف السطر 47انا كتبت برضو التاري ــخ ولكن يف الحالة دي عند الشهر انت لما تكون عايز شهر 11بتكتب
ي
الل هو هيكون 10الن شهر 1الـ indexبتاعه 0 الـ indexبتاع الشهر دا ي
ن
يف السطر الـ 50كتبت التاري ــخ بالـ time zone
الل هتكتبه بعد كدا
فمثال التاري ــخ بتاعم 1982-10-25بعد حرف tعشان يفصل التاري ــخ عن الوقت ي
ان كاتب الوقت الساعة 6و 10دقايق ن
بيعت عن الـ time zoneوبما ي
اما حرف الـ zدا ر
بي توقيت بلدي وتوقيت جرينتش غالبا D": ساعتي الل هما الفرق ن
ن فالـ Time Zoneن
هتود
ي
ن
تحفتية️♥ ️♥عبارات
مش ن
معن كدا إنك تتجاهل دراستك لكن مهم جدا إنك تهتم بتعليم نفسك بنفسك
ي
اذكر هللا ️♥
الزموا ذكر هللا ففيه العون عل متاعب الحياة ️♥
ن
العالمي كثتا مبارًكا فيه كما ن
ينبع لجالل وجهك ولعظيم سلطانك يا رب
ً
حمدا ً
طيبا ً اللهم لك الحمد
ي
الحال
ي الحال وعملت متغت endفيه برضو الـ Date
ي عملت متغت startفيه الـ Date
ن
وبي الـ Startو الـ Endعملت Operationانه يعمل div 100000
والل بينهم بيتم الحال للـ end الحال للـ startو الوقت بعدين قولتله الـ durationهيكون الفرق ن
بي الوقت
ي ي ي
الل هتتم فيه العملية دي بالمل يل ثانية
operationفيها div 100000كل دا عشان احسب الوقت ي
الـ Generatorsاو المولدات بتكون عبارة عن Functionولكن بشكل مختلف شوية عن شكل الـ function
المعتاد والـ codeبتاعها مش بيشتغل اال لما انت بتحتاجه وبتكون عبارة عن objectوكمان Iterableتقدر
تعمل Loopعليه عادي جدا
ر
وتالف شخص حاطط بعض االعمال او المنتجات وبعدين
ي عل الـ Generatorsوهو مثال لما تدخل موقع
مثال ن ي
ر
لباف البيانات عشان
االخر Show Moreالـ show moreدي بيتم فيها عمل Generationاو توليد ي كاتب ف
ي ن
تبدأ تظهر يف الصفحة
الل قولنا عاليه فوق ان
عل show moreودا ي ولو تاخد بالك انت هنا هتعمل actionوهو انك تدوس ي
codeالـ Generatorمش بيشتغل اال لما تحتاجه ...طيب امته بحتاجه ؟! ..بحتاجه لما الـ userيدوس
ن
المعن D": عل ... Show Moreأيش هذا وهللا نفس
ي
بعد اول yieldبيتم استدعائه البيانات والـ codeبيوقف تماما اال لو انت عملتله استدعاء لذلك بعد أول )(next
ن
تان yield ن
تستدع ي
ي تان )( nextعشانهتالحظ ان الـ alertنفسها مشتغلتش اال لما انت استخدمت ي
وف الحالة التانيه مشتغلش ؟! ن ن
ي واشتغل تم loop ـ لا األول
ن ي الحالة ف
ليه ي
عشان ببساطه يف الحالة التانيه حالة الـ generatorانت alreadyعملتلها yieldقبل كدا اهو:
ن
يعن نائب طيب اقدر استخدمه او اوظفه ازاي ؟!
مصطلح الـ Delegateي
ال 3
عندي Functionبـت ـ ـ Generateارقام من 1ي
ال C
و عندي Functionبـت ـ ـ Generateالحروف من Aي
ن
الل بتنوب عن كل الـ functionsالتانية يف متغت اسمه generator
خزنت الـ functionاألختة ي
ن
الل
وبدأت استخدم الـ )( nextعشان اعمل iterationيجيب كل العنارص الموجودة يف كل الـ functionsي
عندي
ن
أخر حاجة لو جيت يف النص استخدمت الـ )( returnفاستخدمها بيعمل stopللـ iterationومبتكملش من
بعدها أي حاجه
لذلك لو تالحظ بعد الـ )” return(“Zهتالقيه وقف الـ Iterationتماما ومجبش ارقام الـ arrayال يل كنت
الل هما اول Functions 2عملتهم فوق بتاعت األرقام ن
واكتف بانه يظهر ما قبل الـ )( returnدي ي
ي عاملها فوق
والحروف
Generate Infinite Numbers Lesson #166
ن
الل
ي احتاج ولما دي function ـ ل ا عملتها الل
ي الوظيفة بيحزن انه العادية function ـ لا ف ي وظيفة الـ return
ان اخد الوظيفة المتخزنة جوا الـ function ن ن
حصل جوا الـ Functionدي استخدم الـ returnيف ي
بتيح بعدها ! ن ن
بتلع أي حاجة ر يوطبعا زي ما احنا عارفي ان الـ returnبتوقف عمل أي حاجه بعدها او ي
ن
لذلك يف الـ generator functionsانا مش محتاج استخدم الـ returnدي خالص الن زي ما قولتك بتوقف
اكت من قيمة فمشعمل أي حاجة هتيح بعدها +نان الـ generator functionsبستخدمها عشان انتج ر
ي ر ي
وترجعهال!
ي محتاج الـ returnانها تخزن حاجة
قليل دائم خت من كثت منقطع ..محاولة ورا محاولة استمرارية ورا استمرارية
ر
الل نفسك فيه
ي كل حققت نفسك هتالف
ي
اذكر هللا ️♥
الزموا ذكر هللا ففيه العون عل متاعب الحياة ️♥
شء قدير ال إله اال هللا وحده ال رشيك له ..له الملك و له الحمد وهو عل كل ر
ي
عل نبينا محمد ﷺ وبارك وزد وسلم اللهم ّ
صل
ي
ْ َّ َ ْ َ نُّ ْ ُ ُ ُ َ
اَّلل تطم ِي القلوب
أال ِب ِذك ِر ِ
ر ن
والل هعمل فيها export
الل هعمل منها importي
بتاعن ي
ي اول حاجة عندي يف ملف الـ htmlبكتب كل الملفات
وبكتب attributeاسمه typeقيمته بتكون كلمة ""module
HTML
Main.js
ن
عندي يف الـ main.jsدا بعد متغت اسمه aقيمته بـ 10وعندي arrayقيمتها بـ ][1, 2, 3, 4
وعندي functionاسمها )( saySomethingبتـ returnكلمة ’‘Something
ن ن
عملت exportاو تصدير لكل الحاجات دي زي ما انت شايف يف اخر سطر يف الكود
app.js
ن
الل عملتها importيف ملف الـ app.jsمن ملف الـ main.js
بعدين بدأت استخدم كل الحاجات ي
فانت ممكن كمان تعمل الـ aliasدا اثناء الـ exportنفسه ولكن هتحط الـ aliasبقا اثناء الـ import
ن
يعن تخيل لو الـ functionبتاعت sayHello
وممكن زي ما قولتلك تستدعيها بأي اسم انت عايزو عادي جدا ي
ه أصال anonymous function؟! دي ي
ودا النها الـ default exportعادي تسميها باي اسم وانت بتعملها import
console.log(`#`.repeat(20));
02 :التكليف
// Assignment Two
let starterDate = new Date(1980, 0, 1, 0, 0, 1);
// starterDate.setTime();
console.log(starterDate);
// Needed Output
03 :التكليف
// Assignment Three
// Needed Output
// "Sat Apr 30 2022 18:13:20 GMT+0200 (Eastern European Standard Time)"
// "Previous Month Is April And Last Day Is 30"
04 :التكليف
// Assignment Four
05 :التكليف
// Assignment Five
// Start
let start = performance.now();
// Operation
// End
let end = performance.now();
// Duration
let duration = end - start;
console.log(`The Duration is ${Math.trunc(duration)} Milliseconds.`);
// Needed Output "Loop Took 1921 Milliseconds."
06 :التكليف
// Assignment Six
function* gen() {
let index = 14;
let num = 140;
let sum = num + index;
yield index;
while (true) {
yield sum;
sum += num += 200;
}
}
07 :التكليف
// Assignment Seven
function* genNumbers() {
yield* [1, 2, 2, 2, 3, 4, 5];
}
function* genLetters() {
yield* ["A", "B", "B", "B", "C", "D"];
}
main.js
import calc from "./mod-one.js";
import * as modOne from "./mod-two.js";
console.log(calc(modOne.numOne, modOne.numTwo, modOne.numThree)); // 60
mod-one.js
export default function (numOne, numTwo, numThree) {
return numOne + numTwo + numThree;
}
mod-two.js
import calc from "./mod-one.js";
// mod-two.js File
let a = 10; // Do Not Edit Names
let b = 20; // Do Not Edit Names
let c = 30; // Do Not Edit Names
-الـ JSONمستمد من الـ JSوهو بديل للـ XMLوامتداد الملف بيكون .json
JSON XML
ن ن
شبة الـ JS Objectيف الكتابة شبة الـ HTMLيف الكتابة
ن ن
خفيف وسهل يف الكتابة ثقيل وصعب نسبيا يف الكتابة عن الـ JSON
مش بيستخدم Tags بيستخدم الـ Tagsزي الـ HTMLكدا
ن ن
بيكون قصت والكود بيكون سهل تقرأه يعن الكود بيكون شكله طويل مش قصت يف شكله ي
ن
بتقدر تستخدم يف الـ JSONالـ Arrayعادي جدا مش بتقدر تستخدم فيه الـ Array
الـ JSONال يدعم الـ Comments بيدعم الـ Comments
ر ن
هتالف شكل ملف الـ JSONو شكل لملف الـ XML
ي دا اللينك ف
ي
خلين اقولك ان ملف الـ JSONبيدعم بعض أنواع البيانات زي الـ Strings ن قبل ما نتكلم عن الـ Syntax
ي
و الـ Numbersو الـ Objectsو الـ Arraysو الـ Boolean Valuesو الـ Null
كمان هتالحظ ان مفيش بقا Functionوال Calculationو الحاجات دي الن الملف دا مخصص لمشاركة
البيانات
الـ Syntax
ن
القوسي دول }…{ زي الـ JS Objectبالظبط الـ Syntaxبتاع الـ JSONبيكون داخل
التال دا كدا
ي بيكون مكون من keyو valueولكن الـ keyالزم يكون محاط بـ double quotesبالشكل
التمجية
بالعرن الواجهة ر
ري الـ APIاختصار لـ Application Programming Interfaceتقدر تقول عليها كدا
فهم للموضوع: ن ن
ي وخلين اديك مثال حسب
ي الـ APIهو الوسيط يف عملية مشاركة البيانات
اش هو دا شغل الـ front-endسليم؟ سليم لما تدخل مطعم فشكل المطعم والوانه والديكورات و شكل الكر ي
الل بتشوفها بعينك وتقدر تتعامل معاها دي الحاجات ي
الل بيتم تحضت الوجبات فيه وتجه نت األكل دا هنشبه بالـ back-endاما المطبخ جوا ي
ن هتقول اومال ن
في الـ APIيف الموضوع واستخدامه ؟ ي
الل بيقبل منك الطلبات هو دا بقا الـ API
هقولك ان الـ APIدا هو الـ waiterاو مصطلح الجرسون ي
الل بياخد األوردر من الـ front-endويوصله للمطبخ او الـ back-endوالعملية دي بيكون هو دا الشخص ي
اسمها requestفيقوم المطبخ يستلم الـطلب دا بعدين يجهز الطلب ويديه للجرسون او الـ APIفيوصله
الل اتبعت
للـ front-endوالعملية دي بيكون اسمها responseاو الرد ع يل الطلب ي
ن ن
الل بيساعد يف المشاركة دي
الل فات دا هو عملية مشاركة البيانات بي الـ frontو الـ backو ي
كل ي
هو الـ API
إن كل ر ن بشكل عام بقا لو عندي موقع انا عايز اعرض فيه كل يوم أسعار العمالت واالختالف بينهم ..هل
منطف ي
ي
ُ بتاع واعدل أسعار العمالت دي يوميا كدا بإيدي ؟! ي
الل هو يا فتاح يا عليم يا رزاق ي يوم افتح الـ code editor
يا كريم اصطبحنا واصطبح الملك هلل سعر الدوالر بقا عامل كام انهاردا ؟! D":طبعا دي دعابة مفيش الكالم دا
ن ن
بتاع وهو يحدث األسعار دي يوميا من تلقاء نفسه
ي عل APIيف الموقع
ان اعتمد ي ولكن الحل األفضل ي
الل هيتم عرض البيانات دي فيها ن
ان اظبط الشكل العام والتنسيقات ي الل عليا نكـ front-endي
الل كل ي
وانا بس ي
وتجيل واتعامل معاها
ي ان اقدر طبعا أوصل للبيانات ديدا باإلضافة للتنسيقات ي
ن
نوعي Public APIو Private API الـ APIفيه منه
الل اتقالت
طبعا انت الزم هتشوف الفيديو عشان تفهم كل التفاصيل الكتت ي
ن
ال JavaScript Objectوالعكس ي JSON Object من نحول اي ز ا هنتعلم دا الدرس ف احنا ي
صاحن الـ JSONدا بيكون Text Formatزي ما عرفنا مسبقا ن
يعن نوعه الزم هيكون String بص يا
ن ي ري
تان أهو ن ر
دلوقن معاك هتجعلها الـ JSONنوعه stringبأكد ي
ي خل بقا المعلومة ديي
عل سبيل المثال دا JSON Objectنوعه Stringالنه بيكون Text Format ن
يعن ي
ي
عايز بقا احول الـ JSONدا لـ JS Objectوعشان التحويل دا يتم بستخدم Methodاسمها JSON.parse
وجواها بحط اسم الـ JSON Object
طيب ليه احوله أصال من JSONلـ JS؟! عشان من نخالل التحويل دا اعدل البيانات او اعملها Updateي
وه
تان من JS Objectلـ JSON Objectبعد التعديل ما يتم
نوعها JS Objectعادي بسهولة وبعدين احولها ي
ن ن
الحالتي البيانات حصلها Updateواتعدلت أهو يف كال
ال JSON Objectودا بيتم من خالل Method JS Object من بعد التعديل هحول البيانات دي ن
تان
ي ي
أسمها JSON.stringify
ن
الل حصل انه طبع األرقام عادي والـ setTimeoutكانت شغاله يف نفس الوقت وطبعت كلمة ""Operation ي
ر ن
يعن العملية دي تمت عادي واشتغلت اثناء ما كل العمليات التانية كانت شغالة ولسه هتفهم أكت ن
ثوان ي
بعد 3ي
Call Stack And Web API Lesson #174
صديف عشان ابسط الموضوع دا قدر اإلمكان الـ JSليها Engineاو محرك بيشغل الـ Codeبتاعها ر بص يا
ي
ن
يعن أي ؟!
الـ Engineدا بيكون Single Threadedي
معي بيشغله سطر ورا سطر سطر ورا سطر بطريقة synchronousر ن
متامنة ن بيح يشغل Code ن
يعن لما ر ي
ي
الل قبلها تتم األول قبل ما تبدأ تشتغل ن ن
تستن ي
ي يعن كل عملية الزم ي
لحد كدا األمور واضحة وتمام !
ن ن
اعتته صندوقيعن ر
الل بتتم ورا بعض دي بتتحط كدا يف حاجة اسمها Call Stackيطيب جميل العمليات ي
ر
كدا كبت دخل جواه كل العملية بالتتيب ورا بعض
طيب لو عندي عملية هتاخد وقت كبت جدا زي نإن مثال أقوله SetTimeoutلحاجة هتاخد 10ن
ثوان مثال ؟
ي ي
الل بيحصل هنا ؟!
عشان تتطبع ومحطوطة وسط كذا عملية Console.logأي ي
الل بيحصل ان الـ JSبتاخد العملية بتاعت الـ SetTimeoutدي تخرجها من الـ Call Stackبتاعها خالص
ي
تان اسمه Web APIيقوم الـ Web APIدا يهندل العملية دي مع نفسه وبعدين يروح يقول للـ JS ن
وتوديها مكان ي
من ؟!ن ر
بعتهال ها تستلمها ي
ي انن
الل ييا JSانا خلصت العملية ي
فاض وخلص كل الـ Console.log استن اما ابص عل الـ Call Stackاو الصندوق بتاع اشوفه ن ن الـ JSتقوله
ي ي ي
الل كانت موجودة مع الـ setTimeoutوال ال !
ي
ر
تالف ان الـ call stackربف ن
الل كانت مع الـ setTimeoutتمت ي العمليات وكل فعال فاض
ي ي تروح الـ JSتبص ي
فتوح الـ JSتقول للـ Web APIابعت الـ setTimeoutعندي اشغلها بقا والعلمية دي كلها عل بعضها خالص ر
كدا تندرج تحت مصطلح الـ JS Runtime
ه الـ DOMو الـ setTimeoutوغتهم حاجات تانية
الل الـ Web APIبيساعد بيها الـ JSي من ضمن الحاجات ي
كتت الـ Web APIبيقدمها للـ JS
صديف حاجه خاصة بالمتصفحات نفسها مش بلغة برمجة معينة بس كدا ر أخر حاجة الـ Web APIدا يا
ي
ن
ومي هيطلع األول أي الل هيحصل هنا ؟! تعال نفتح الصندوق او الـ Call Stackونشوف ن
مي هيخش األول ي ي
دلوقن انا عندي Functions 3 ر
ي
الـ one() <= functionبتطبع كلمة ""One
الـ two() <= functionأوال بتشغل الـ one() <= functionوبعدين بتطبع كلمة ""Two
الـ three() <= functionأوال بتشغل الـ two() <= functionوبعدين بتطبع كلمة ""Three
ن
الل فوق
ي المثال ف
بعدين بشغل three() <= functionأخر سطر ي
ر
هتالف اول حاجة مطلوبة فيها انها
ي عل امر من الـ )( threeلما تشتغل الـ )(two
هتشتغل بقا الـ )( twoبناءا ي
تشغل الـ )( oneبعدين تطبع ""Two
يعن ن ر
تان حاجة اشتغلت هتبف تان حاجة تخش الصندوق او الـ stackن يبف الـ )( twoدي ن
ر
ي ي ي ي ي
ر
هتالف اول حاجة مطلوبة فيها انها تطبع
ي عل امر من الـ )( twoلما تشتغل الـ )(one
هتشتغل بقا الـ )( oneبناءا ي
كلمة ""one
هتبف تالت حاجة تخش الصندوق او الـ stack ر اذا اشتغلت حاجة تالت دي )(one ـ لا ر
يبف
ي ي
النتيجة هتطلع من الـ stackبقا بمنهج الـ LIFOأي اخر حاجة دخلت ؟! لسه قايل فوق من سطرين
ر
ه أول حاجه تطلع من الـ stackوتشتغل اخر حاجة دخلت أي؟! الـ )” console.log(“Oneي
يبف ي
الل تحتها كان الـ )( oneالـ )( oneبالفعل اشتغل وعمل الـ )”console.log(“One
الل تحتها ي
طيب أي ي
ر
يبف يطلع هو كمان من الـ stack
ي
الل كان تحته كانت الـ )( twoجواها امر اول حاجه انها تشغل الـ )( oneوبما ان الـ )( oneاشتغل
طيب أي ي
ر ر
الل يطلع برا الـ stack
هتالف الـ )” console.log(“Twoفدا ي
ي يبف يتشال بعد كدا
الل عليه ي
بالفعل وعمل ي
ويشتغل
الل تحت الـ )( twoكان الـ )( threeوجوها أمر اول حاجة تشغل الـ )( twoخالص الـ )( twoاشتغلتطيب أي ي
ن
الل بعدها يف الـ )( threeانها تطبع الـ )”console.log(“Three
الل بعده ي
الل عليها خش ي وعملت ي
يبف دا أخر حاجه هتخرج ر
ي
يبف ر
التتيب كدا : ر
ي
console.log(“One”) => One
console.log(“Two”) => Two
console.log(“Three”) => Three
اكت ر
واكت خلين أوضح ر
ن تان عشان حاسس انك ممكن تكون confusedشوية أو مرتبك ن
يعن طيب بص ن
ي ي ي
ه )( function oneدي عشان تشتغل محتاجة أي ؟! محتاجة انه يتعملها Callاو استدعاء ي
ن
طيب امته تم استدعائها ..تم استدعائها يف الـ )( function twoطيب أصال )( function twoدي عشان
ه كمانتشتغل محتاجة أي ؟! محتاجة انه يتعملها Callاو استدعاء ي
ن
طيب امته تم استدعائها ..تم استدعائها يف الـ )( function threeطيب أصال )( function threeدي عشان
ه كمان تشتغل محتاجة أي ؟! محتاجة انه يتعملها Callاو استدعاء ي
جيت اخر سطر عملت لـلـ )( function threeاستدعاء
ر
الباف ؟! يبف نر
ي مي أول حاجة اشتغلت وشغلت ي
)( function threeمش كدا ر
يبف )( function threeدي اول واحدة دخلت الـ stackاو الصندوق لما دخلت
ي
الل حصل انها شغلت )( function twoوبعدين مطلوب منها تطبيع كلمة ""Three الـ stackي
بعدها حصل أي ؟!
الل حصل انها شغلت ن
تان حاجة تخش الـ stackلما دخلت الـ stackي
اشتغلت )( function twoودي كانت ي
)( function oneوبعدين مطلوب منها تطبيع كلمة ""Two
بعدها حصل أي ؟!
الل حصل انها لقت اشتغلت )( function oneودي كانت تالت حاجة تخش الـ stackلما دخلت الـ stackي
المطلوب منها تطبع كلمة ""one
ه رابع حاجه تخش الـ ن ر
بمعن ادق زي ما الكود مكتوب يي يبف طباعة كلمة " "oneأو )”console.log(“one ي
ه كدا اخر حاجة تخش الـ Stack ن
بمعن ادق ي
ي stackاو
يعن اخر حاجة تدخل الصندوق تكون أول حاجة تخرج منه ن
تعال نطبق مبدا الـ Last In First Out <== LIFOي
ي
ه أول واحدة تطلع من الـ stackوكلمة One ر ر
يبف ي ه الـ )” console.log(“oneي يبف اخر حاجة دخلت ي ي
تتطبع
يبف والر
بعدين دخل قبلها )( function oneكدا كدا )( function oneاشتغلت خالص وطبعت كلمة " "Oneي
ر
وطبعن كلمة ""One عملن شغلك ر ر
انن كدا كدا
ي ي كأنها موجودة مع السالمة ي
قبل الـ )( function oneدخلت الـ )( function twoكان مطلوب منها تشغل )( function oneخالص يا
ر ر
باف من )( function twoانها تطبع كلمة ""Two الل ي
يبف طريق السالمة أي يبرنس اشتغلت والمصحف ي
ر
دلوقن زي يبفقبل الـ )( function twoدخلت الـ )( function threeوكانت دي اول واحدة تدخل الـ stackر
ي ي
مانت شايف كدا هتكون اخر واحدة تطلع من الـ stackالمهم كان مطلوب منها تشغل )(function two
ر ر
باف من )(function three الل ي
يبف مع السالمة من الـ stackأي ي
الل عليها ي
خالص يا برنس اشتغلت وعملت ي
انها تطبع كلمة ""three
تان سطر كلمة " "Twoبعدها تالت سطر اطبعت كلمة ""Three ن ر ر
يبف بالتتيب اطبعت كلمة " "Oneبعدها يي
وبس كدا شكرا ر
ويبف الـ Stackطبق مبدأ الـ Last In First Out <== LIFO
ي
By: Amr Elsayed
ن
طيب فاكر أول صفحة يف الدرس فوق لما رشحنا شوية حاجات عن الـ Web APIير
تيح ناخد مثال ر
ونشحه ؟!
الل تمت من خالل الـ Web APIدي لما بتكون منتظرة دورها عشان هيح السؤال بتاع الدرس العمليات ي هنا ر ي
الل ن
تخش الصندوق او الـ Call Stackوبعدين تبدأ تطلع منه بتنتظر في وبتخش ازاي الـ Stackواي المنهج ي
تعال اقولك بقا
ي بتخش الـ Stackبيه؟ هو دا سؤال حلقتنا انهاردا D":
صديف بيكون ليه صندوق خاص بيه هو كمان بينفذ فيه العمليات بتاعته بعيدا عن ر الـ Web APIدا يا
ي
الـ stackاو الصندوق بتاع الـ JS
ر
دلوقن بعد ما بيخلص الـ Web APIالشغل بتاعه بيقوم بعته لقائمة االنتظار وهنتكلم عن قائمة االنتظار دي
ي
متقلقش
ن
الل موجودين
الل هما الـ Consoleاالتني يالل حصل ان الـ JSخلصت الحاجات بتاعتها ي الل حصل ؟! ي أي ي
الن دول اول حاجة دخلو الـ Call Stackوخرجوا منه
اما الـ setTimeoutدي الـ JSبعتتها للـ Web APIيتعامل معاها
ن
ه 0msخلصت األول طلعها األول وحطها يف الل ي
فدخلو الـ setTimeout 3عند الـ Web APIبص عليهم لقا ي
الـ Callback Queue
ن ن ر
تان حاجة وحطها يف الـ Callback Queue ه 10msخلصت التانية طلعها ي الل ي
لف يبعدين ي
ن بعدين ر
ه 20msخلصت التالتة طلعها تالت حاجة وحطها يف الـ Callback Queue ي الل
ي لف
ي
الل موجود عل صندوق الـ Callback Queue بعدين جت الـ Event Loopالقفل ي
بص عل الـ Call Stackبتاع الـ JSلقاه طبع كلمة Hiوطبع كمان كلمة Byeقام فاتح القفل
ن وشاف ن
مي اول حاجه كانت يف الطابور او الـ Callback Queueقام مطبق مبدأ First In First Out <= FIFO
الل كانوا بيه ر ن
الل وراها بالتتيب ي
نشاف مي دخل األول قام مطلعه هو األول ودخله للـ Call Stackبعدين دخل ي
يف الطابور
والل دخل األول كانت الـ 0msو التانية كانت 10msو التالتة 20msي
بالتتيب ولكن كلهم راحو للـ web APIالـ 0msخلصت األول مع ان ترتيبهم نف الـ codeبتاع المثال مش ر
ي
الل خلص األول دخل األول ر
والل بعدها ودخلو طابور االنتظار كدا بالتتيب ي والل بعدها ي
ي
ر
لف الـ 0ms
عل الطابور ي
طابور االنتظار بقا او Callback Queueموجود عليه قفل اسمه Event Loopبص ي
دخل اول واحد قام مطلعه للـ Call Stackبتاع الـ JSأول واحد وهكذا ر
بالتتيب
لما تحب تفتح موقع بيحصل حاجه اسمها Requestاو طلب بتطلب بيانات الصفحة دي وبعد كدا بتجعلك
الل هتعرفنا الـ response
من الـ Requestدا استجابة او Responseفاحنا بقا هنشوف بعض االكواد ي
دا وصلنا سليم ونوعه ايه ؟!
ن
الل محتاج تفهمه حاليا ان يف حاجة اسمها Status Codeوانه أي موقع بتطلبه من خالل
انت بس كل ي
الـ Requestبيكون فيه Responseبتجع
Request and Response From Real API Lesson #177
يبعتل Response
ي يبعتل البيانات بتاعت الـ APIاو
ي بعد كدا استخدمت )( myRequest.sendعشان
ن ر ن ن
ومهمي جدا زي الـ readyStateقيمته بـ 4 دلوقن انا محتاج اعرفهم
ي حاجتي Response ـ لا ف
لقيت ي
والـ status codeقيمتها 200
ال 4حيث ان :
ال األرقام من 0ي
فه بتشت ي
اما الـ readyStateدي بالقيمة 4ي
-0الطلب لسه مبدأش او متفعلش
-1فيه اتصال حصل مع الـ Server
-2الطلب تم استالمه من الـ Server
-3بيتم معالجة الطلب
انته خالص والرد او Responseجاهز ي -4الطلب
ن ر
الل كانت يف اللينك بتاع الـ API
دلوقن كان عندي JSON Objectفيه كل الـ Reposيي انا هنا عملت أي انا
فمسكت الـ JSON Objectدا حولته لـ JS Objectمن خالل الـ )(JSON.parse
عل الداتا دي كلها بالـ lengthاو عددهم
خالص رجعت الداتا بشكل الـ JS Objectبدأت اعمل Loopي
بتاع دا
ي وداخل الـ Loopingانا عملت divوعملت textNodeحطيت فيه الـ JS Object
الل
الل عملته وبعدين نخدت الـ divدا بالـ textNodeي
وعملت appendChildللـ textNodeداخل الـ divي
جواه عملتله هو كمان appendChildليه داخل الـ bodyعشان اعرضه يف الصفحة
طبعا فيه بيانات كتت جدا تحت انا عرضت جزء منها بس
نفش مرة بالـ forEachومرة بالـ for ofوعملت
ي الل فات دا كان شغل الفيديو انا عملت الـ loopمع
كل ي
شوية Stylingبسيط كدا ودا مثال
articles.json
[
{
"id": 1,
"name": "Amr",
"title": "Front-End",
"section": "Web Development",
"content": "HTML, CSS, JS, React.js"
},
{
"id": 2,
"name": "Elzero",
"title": "Full-Stack",
"section": "Web Development",
"content": "HTML, CSS, JS, React.js, PHP, Laravel"
},
{
"id": 3,
"name": "Osama",
"title": "Back-End",
"section": "Web Development",
"content": "JS, Node.js"
},
{
"id": 4,
"name": "Ahmed",
"title": "Android",
"section": "Mobile Development",
"content": "Kotlin"
},
{
"id": 5,
"name": "Ali",
"title": "IOS",
"section": "Mobile Development",
"content": "Swift"
}
]
02 :التكليف
// Assignment Two
03 :التكليف
// Assignment Three
mainData.forEach((article) => {
article["section"] = "all";
});
let updatedData = JSON.stringify(mainData);
console.log(updatedData);
}
};
04 :التكليف
// Assignment Four
// container.style.cssText =
for (let i = 0; i < mainData.length; i++) {
// Create div To Each Article
let div = document.createElement("div");
div.className = "article";
// Style div
div.style.cssText = `background: #004766; padding: 5px 15px; margin: 10px auto
0px; color: #fff; font: bold 17px arial; width: 400px; border-radius: 10px`;
.. ن
كالم كويس وهو إنك مدام
ي افتكر األيام من يوم ف
بص لو وقع قدامك الملخص دا وتحديدا الجزء دا ي
بتيد ر
اكت وختتك ر ن ر ر ن
فصدقن انت بتتقدم اكت وبتتعلم اكت ر ر
بتمش ببطء مستمر نف التعلم ،ر
حن لو
ي ي ي
انت بس عشان باصص تحت رجيلك ..عامل زي ي
الل قاعد باصص للساعة ومستغرب
ن
ازاي الوقت بيمر بالبطء دا مع إنك لو ركزت يف مهاراتك وتطويرها هتكتشف ان فات سنة
وبقيت أجمد بكتت من ما كنت عليه زمان
ن
يعن دا بيكون احد اشكالها بعيدا عن الـ Codeالمكتوب
والل ي
ي
الل هتاخده نن
عل سبيل المثال ممكن يكون عندي Functionوظيفتها انها تتل صورة من الـ URLي ي
الـ functionدي بيكون جوها callback functionتانيه وظيفتها ان لما الصورة تجيلها تعلمها resize
والـ functionبتاعت الـ resizeدي بيكون جوها callback functionتانية بعد ما الصورة يتعملها resize
ه حاطة الـ Logoع الصورة دي والـ functionدي جواها callback functionبتاخد الصورة بعد ما تقوم ي
عل الـ websiteكل دا بيؤدي لمصطلح الـ Callback Hell
يتحطلها Logoوترفعها ي
دا مثال بسيط جدا ع الـ Callback Function
ن
ويعتت ابسط مثال
ر نفس فكرة الـ Callback function hellيف المثال دا
كل المشاكل بقا بتاعت الـ Callback hellدا هتتحل لما نتعلم الـ promisesو الـ fetch
عل حلها
احنا خدنا فكرة عن المشكلة قبل ما نتعرف ي
Promise Intro And Syntax Lesson #180
الل بيكون فيها الوعد اتحقق او العلمية تمت بنجاح ===< Success
-2الـ :Fulfilledودي الحالة ي
ن
ه أصال يف األصل بتعود
callback functionدي بتاعت الـ resolveValueي فمثال اول
ر ن
الل هتطبع الكالم
ه ي يبف الـ resolveValueدي ي
الل فوق لو اتحققت ي
عل اول functionيف الـ promiseيي
ن ن
ه برضو أصال يف األصل بتعود
الل ي
تان callback functionدي بتاعت الـ rejectValueي
لكن ي
ر ن ن
الل هتطبع الكالم
ه ي يبف الـ rejectValueدي ي
الل فوق لو متحققش ي
تان functionيف الـ promiseي
عل ي ي
بص انا عارف انك توهت سيكا او يمكن انا عشان توهت شوية فحاسس ان دا انطباع عام
ن
خلين اديك الزتونة زي ما بيقولو
ي
ن ن
تان Function
ه يالل ي
نوالتانية يف حالة ان الـ promiseبتاعك بقا rejectفتعوض عن حالة الـ rejectedي
يف الـ promise
ن
طبعا انت ممكن تخزن الـ functionsدي يف متغت عادي وتكتب المتغت مكانهم
Promise – Then, Catch And Finally Lesson #181
ن
هنتعرف انهاردا عل مفاهيم مهمة يف عالم الـ Promiseزي الـ catchو الـ finallyوسبق واتعرفنا ع الـ then
ر
وهنشحها بالـ Code تخيل معايا القصة دي
ر ن ر
نالف
اوعدن اول ما نروح المكتب ي
ي صاحن وقولتله
ري دلوقن بتكلم مع واحد
ي انا
وعدتن انهم هيجوا ن الل ن
ي األربــع موظفي ي
يبف الوعد اتحقق ر ر
دلوقن لو انا روحت الـ Meetingولقينا األربــع اشخاص ي ي
هتيح عشان من االربعه دول هنختار ن
اتني بعد ما الوعد اتحقق الـ then
ر ي
تان ونختار منهم شخص واحد بس ن ن ن
بعد ما نختار الشخصي دول هتوح مكان ي
طيب فرضا اننا روحنا المكتب وملقناش وال شخص موجود دا معناه أي ؟!
هيح دور الـ Catchمفيش وال شخص معناه ان ًالوعد متحققش هنا بقا ر ي
موجود اذا الوعد متحققش
بتوع بعددهم الـ 4
ي بتاع وحطيت الـ employees
ي عملت الـ promise
ر
يبف الوعد اتحقق والـ resolvedFunctionالخاصة بحالة ن
بعدين قولتله ifلو الـ عدد الموظفي دا بيساوي 4ي
ن
يعن الـ Arrayبتاعت ن ر
جعل الموظفي ===< ;) resolveFunction(employeesي تحقيق الوعد هت ي
جعل كلها الموظفي ر
هت ن
ي
بعدا كدا الـ elseلو الوعد متحققش الـ rejectedFunctionالخاصة بحالة عدم تحقيق الوعد
ن
الموظفي مش بيساوي 4 جعل الـ Errorان عدد ر
هت ي
===< ;))"rejectFunction(Error("Number Of Employees Is Not 4
ن
عل حالة تحقيق الوعد
ه بتعود ي األول طبقت أول سيناريو عندي ...الـ resolveValueي
الل ي ي جيت يف الـ then
ن
الموظفي كاملة همسك بقا الـ resolveValueدي رجعل الـ Arrayبتاعت الل قولتله فيها
ي الحالة ي
جال 4اشخاص خدت منهم 2اخل الـ lengthبتاعها بيساوي 2عشان اطبق اول سيناريو يي
والـ console.logدي هتطبعهم
الل تم اختياره
هتطبعل مسج فيها اسم الموظف األخت ي
ي ه
الل ي
بعد كدا عملت الـ thenاألخت ي
يبف ببساطة لحد االن انا بستخدم الـ thenعشان اهندل بيها الوعد لو اتحقق او متحققش ر
ي
يعن ببساطة كدا الـ thenبهندل بيها سواء الـ resolveاو reject ن
ي
ن
تعرفن مكان الـ Error ن
يعن دي لزمتها
ي ي
الل هيحصل
ولو شيلتها شوف ي
ن
يعرفن مكان الـ Error هيطبعل رسالة قرعة زي ما انت شايف كدا من غت ما
ي ي
انا هنا عملت Functionاسمها getDateمررت ليها Parameterاسمه apiLinkالـ functionدي هتكون
الل هتيجيبه ن
يعن انت هتشيل الـ Parameterدا وتحط مكانه لينك الـ APIي
ديناميكية ي
ن
بتاع مررت فيه زي ما اتعودنا الـ resolveيف حالة ان فيه
ي داخل الـ Functionدي بقا عملت الـ Promise
ن ر
جعل والوعد اتحقق ومررت كمان الـ rejectيف حالة ان البيانات فيها مشكلة او الوعد متحققش
بيانات فعال هت ي
ن
الل خزنته يف المتغت myRequest داخل الـ promiseعملت الـ AJAX Callمن خالل الـ XMLي
بتاع انه حالة الـ readyStateبـ 4 عملت Eventالـ onloadعل الـ myRequestدا وجواه عملت ر
الشط
ي ي
والـ statusبـ 200
وهاتل البيانات او اعملها Parse الشط المتحقق دايبف نفذ الوعد جوا ر ر ر
ي قولتله بقا جوا الشط دا لو اتحقق ي
ورجعل Errorفيه مسج No Data Found ر
هان عدم تنفيذ الوعد هنا ر ر
ي يبف يوالـ elseلو الشط متحققش ي
ن
ه يف حالة عدم تنفيذ الوعد ..عد تنفيذ الوعد دا ممكن الل ي
بعد كدا جت الـ catchبقا بالـ function rejي
اكت من سبب زي لينك الـ APIمش سليم مثال يكون ليه ر
ن ن ن
الل موجود يف الـ promise
ي reject ـ لا محل بيحل أصال هو الل
ي Console ـ لا ف
ي دا rej ـ لا اطبعل
ي دي الحالة ف
ي
ن ن ...
الل موجود يف الـ reject functionفف حالة عدم تنفيذ الوعد هيطبع الـ Errorي ي فوق
ن ر
الل يف اللينك بتاع الـ API
بتاعن كلها ي
ي انا كدا عملت Extractللبيانات
ن
الل بعد كدا
ي then ـ لا ف
عملت returnللـ myDataدي عشان استخدمها ي
رجعال
ي الل
ه هتشتغل ع البيانات ي الل بعد كدا سميتها اسم مختلف عادي جدا كدا كدا ي
الـ thenي
رجعال من أول الل ر ر
ي myDataين
تبف نفس االسم وجواها قللت الـ lengthبتاع الـ
من اول thenفمش شط ي
thenوعملتلها returnعشان الـ thenالتالتة تستلمها وتشتغل عليها وطبعتها يف الـ Consoleعشان اورهالك
بس
ه كدا كدا مش هيفرق معاها االسم ..االسم دا ليك انت
جت الـ thenالتالته وسميتها باسم مختلف ي
الل قبلها
الل جاية من الـ thenبتاعت الـ fullي
الن الـ thenالتالتة دي كدا كدا هتشتغل ع الـ dataي
الل فوقها وجبت اسمه
رجعول من الـ thenي
ي الل
مسكتها بقا وخدت اول itemبالـ ] index[0من الـ 10ي
معي مختلف عن ن
التان ن دلوقن عندي 3 Promisesكل promiseمن دول بيعمل Task ر
ي ي
ن
الل عندي أول حاجة ..حاجة اسمها promise.allوبتطلب ي
من Arrayفيها كل الـ promisesي ن
عندي
جعل ر
الل عندي حصلها resolveاو اتحققت بت ي جعل يف االخر promiseلو كل الـ promisesي
بت ي
الـ Resolvedمنها كلها
جعل هيحصله rejectهو كمان ر
الل هت ي يبف الـ promiseي
ولو فيه promiseواحد منه حصله Rejectي
ن
الل يف كل
ه المسجات ي
الل ي
الل عندي ي
رجعل الـ resolveمن كل الـ promisesي
ي فـ زاي ما انت شايف كدا
promiseفوق
يعن فيه سباق باين من اسمه طيب دا بيعمل أي ؟! الـ promise.raceن
ن ي
جعهالالل عندي وأول حاجة بيقابلها يف سكته سواء resolveاو rejectبت ر
ي عل كل الـ promisesي بيمش ي
ي هو
ه األول من خالل الوقت بتاعهاي
JS
fetch("http://api.alquran.cloud/v1/ayah/262/ar.alafasy")
.then((resolve) => {
console.log(resolve);
let myData = resolve.json();
console.log(myData);
return myData;
})
.then((ayah) => {
console.log(ayah.data.audio);
let audio = new Audio(ayah.data.audio);
audio.setAttribute("type", "audio/mp3");
audio.setAttribute("controls", "");
let div = document.createElement("div");
let ayahAudio = audio;
div.appendChild(ayahAudio);
document.body.appendChild(div);
})
.catch((rej) => console.log(Error`${rej}: Your API Is Wrong`));
CSS
Audio {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
audio::-webkit-media-controls-panel {
background-color: cornflowerblue;
}
audio::-webkit-media-controls-play-button {
background-color: lightblue;
border-radius: 50%;
}
audio::-webkit-media-controls-current-time-display {
color: #333;
}
audio::-webkit-media-controls-time-remaining-display {
color: #333;
}
audio::-webkit-media-controls-timeline {
border-radius: 40px;
background-color: lightblue;
}
audio::-webkit-media-controls-volume-slider{
background-color: lightblue;
border-radius: 50px;
padding-left: 10px;
padding-right: 10px;
}
audio::-webkit-media-controls-mute-button{
background-color: lightblue;
border-radius: 50%;
}
الل زيادة
الل اتعلمناه لكن الجزء دا هو ي
الكرش نفسها وطبقت عليه كل ي
ي فيه ايةAPI لـfetch انا عملت
let audio = new Audio(ayah.data.audio);
audio.setAttribute("type", "audio/mp3");
audio.setAttribute("controls", "");
let div = document.createElement("div");
let ayahAudio = audio;
div.appendChild(ayahAudio);
document.body.appendChild(div);
نفسهapi بتاع الـ الية الكريمة من الـaudio وجواه الـaudio object حزنت فيه الـaudio عملت متغت اسمه
ن
attribute يشتغل او يظهر يف الصفحة يكون ليهaudio الزم عشان الـAudio اما الجزء الخاص بتشغيل الـ
Audio بتاع الـtype وكمان يتكتب الـcontrols اسمه
ن ر
ليه الحاجات المعروفة ديAppend يف الـصفحة وعملتdiv الباف سهل بقا عملت بعد كدا ي
ن
األفكار السيئة ..التجارب السيئة او الصعبة كلها نتاج ر
لختات ونتايح إيجابية يف المستقبل وغلطات كتت عملتك
ن
وهتبدا تتفاداها يف المستقبل فجرب كتت واغلط كتت ومتخافش
ر ن
جعل )( new Promiseبيقبل من resو الـ rej
يف المثال دا عندي functionاسمها getDataبت ي
وعندي arrayاسمها users
يعن نف usersر
يبف دا الـ trueر
ويبف دا هو الـ res
ي ي
ن
اكت من 0ي ي عملت رشط Ifبقول فيه لو الـ array.lengthدا ر
الل هو فيه المسج ""User Found رجعل من الـ promiseدا الـ resي
ي بتاع الـ promiseفقولتله
يبف دا الـ falseر
ويبف دا هو الـ rejبتاع الـ promiseفقولتله ر ن
ي يعن مفيش وال userي بعد كدا عندي الـ elseي
الل هو فيه المسج ""User Not Found رجعل من الـ promiseدا الـ rejي
ي
ر
بتاعن بس احط كلمة asyncوالـ keywordدي بتعمل عمل الـ promiseبالظبط هاج قبل الـ Function
ي ر ي
الل خدناها قبل كدا
بص بقا ع الكود األخت دا هتالقيه مجرد functionعادية زي ي
الـ )” console.log(“Before Promiseحاجة مش مرتبطة باي حاجة فهتتبطع كدا كدا األول
ن ن
يغط كل حاجة
ي هيقدر العالم ف
لنفش قبلكم ان مفيش Courseي
ي متفقي وانا بقول الكالم دا طبعا خلينا
ن
موجودة يف أي لغة برمجة
المطلوب:
ن ن ن
-يف امثلة و حاجات هيتم التطبيق عليها يف playlistخاصة بيها لينك الـ Playlistيف الـ playlistدي هيتم
الل بتظهر
الل اتعلمناها ومخدناش عليها أمثلة عملية قوية وكمان الحاجات الجديدة ي نالتطبيق ع الحاجات ي
يف اللغة هتكون موجودة هنا
ر
حن لو هتبحث
-نبعد كل أسبوع كان فيه قائمة فيها شوية حاجات تبحث عنها يفضل انك فعال تبحث عنها ي
ن
مكتوبي تحت كل أسبوع الل كانو ن
يف كل يوم عن اسمي تالته من ي
main.js
function getData(fileJson) {
return new Promise((resolve, reject) => {
let myRequest = new XMLHttpRequest();
console.log(myRequest);
myRequest.onload = function () {
if (this.readyState === 4 && this.status === 200) {
resolve(JSON.parse(this.responseText));
} else {
reject(Error("Your Json File Is Wrong"));
}
};
myRequest.open("GET", fileJson);
myRequest.send();
});
}
getData("data.json")
.then((data) => {
data.length = 5;
console.log(data);
return data;
})
.then((showData) => {
showData.forEach((data) => {
let containerDiv = document.createElement("div");
containerDiv.appendChild(title);
containerDiv.appendChild(description);
document.body.appendChild(containerDiv);
});
});
02 :التكليف
main.js
async function fetchData() {
try {
let myResponse = await fetch("data.json");
console.log(myResponse);
let allData = await myResponse.json();
allData.length = 5;
containerDiv.appendChild(title);
containerDiv.appendChild(description);
document.body.appendChild(containerDiv);
}
} catch (err) {
console.log(err);
}
}
fetchData();
حل اخر
fetch("data.json")
.then((result) => {
return result.json();
})
.then((result) => {
result.length = 5;
console.log(result);
return result;
})
.then((result) => {
for (let i = 0; i < result.length; i++) {
let containerDiv = document.createElement("div");
containerDiv.appendChild(title);
containerDiv.appendChild(description);
document.body.appendChild(containerDiv);
}
})
.catch((rej) => console.log(rej));
ً ن
العالمي حمدا طيبا كثتا مباركا فيه الحمد هلل رب
ُ
.أستغفرك واتوب اليك سبحانك اللهم وبحمدك أشهد ان ال إله اال انت
♥️ جائزة أفضل أسبوع وامتع أسبوع عل االطالق راحت لألربــع أسابيع دول
ن
DOM أسبوعي الـ 13 و12 األسبوع-
Regular Expression أسبوع الـ18 أسبوع-
Fetch و الـJSON والـAPI الـCourse أسابيع ختام الـ22 و21 أسبوع-
وأكت دروس مستمتعتش بيها اوي اطالقا اكت أسبوع حاسس نان مفهمتوش أوي ر جائزة ر
ي
كان ممتع بس حسيته معقد شوية112 عدا درسLocal Storage أسبوع الـ15 أسبوع-
ن
Weak Map و الـSet Data الل هو أسبوع الـ
ي 127 لحد 123 اول من 17 أسبوع دروس ي5 أول-
ف
لينك القناة
لينك البالي ليست الخاصة بالـ JavaScript
خطة الدراسة JavaScript Bootcamp 2021
جميع أكود دروس الـ JavaScriptموجودة هنا
جميع تكليفات الـ JavaScriptموجودة هنا
❖ استكماال للمشوار وبعد تلخيص الـ HTMLو الـ CSSو الـ SASSوالجزء األول من الـ JSوفقنا هللا لتلخيص الجزء ن
الثان
ي
ً
خالصا من الـ .. JSارجوا من هللا عز وجل ان يكون ذا نفع للجميع ..و ارجوا من هللا عز وجل ان يجعل هذا العمل
متان حسناتنا جميعا لوجهه الكريم وان يجعله نف ن
ي
ن ن
واتمن لو لقيت أي خطأ سواء
ي ❖ بعتذر عن وجود أي أخطاء امالئية او أخطاء يف أي كود فالكمال هلل وحده
ن
وتبلغن بيه نف ر
الشح او حل التكليفات تواصل معايا
ي ي
ن ن
تان تم تكملة وتلخيص الدروس من اول 102ي
ال 188بالتكليفات ❖ يف الجزء ال ي
ن
❖ خصصت يف الملخص دا تلت أجزاء ..الجزء األول لذكر هللا عشان متخليش حاجه ابدا تشغلك عن ذكر هللا
ن
التحفتية و جمل جزئي العباراتن الل قادر ينجيك ويفتحلك ابواب الرزق ويرزقك ويسهل عليك الفهم و ي
ن
رئيش يف تكبت حجم الملخص ،ولكن وهللا حبيت انهم يكشوا ملل ي وعبارات راقت يل اه هما ر
يعتتوا سبب
المذاكرة والقراءة وربما يكون فيهم نفع او الهام لحد
ن ن
من وقت ❖ مش عايزك تتضايق الي سبب لو مفهمتش أي تكليف او مقدرتش تحله عادي يف تكليفات كتت خدت ي
تعت عليك كبت جدا وكانت أسهل من تكليفات تانية أصعب بكتت مخدتش معايا غت دقايق واتحلت ..لذلك لو ر
فهم حاجة حاول مرة و ن
اتني وتالته
ن
تفتكرن بدعوة ❖ ألي حد هيوصله الكالم دا مش طالب منك غت طلب واحد وامانة عليك الزم تنفذه و هو إنك
ي
طيبة لوجه هللا
ر
الل هنتعلمه مع كام Technologyتانيه باذن هللا ❖ ان شاء هللا لو لينا عمر ي
نبف نعمل ملخص للـ Frameworkي
واصت ومتستعجلش النتايجر ر
نصيحن األختة ليك إنك تتطبق كتت جدا وتشوف حاجات فيها Logicتقيل ❖
ي
❖ Never Forget That Always Search
LinkedIn Account GitHub Account Codepen Account