📘 JavaScript — Омӯзиши комил ва муфассал
Аз сифр то сатҳи касбӣ — ҳамаи нозукиҳои забони JavaScript бо шарҳи муфассал
👨🏫 Муаллиф: Шодизода Тоҳирхоҷа
Омӯзгори МТМУ №13
Ноҳияи Кӯҳистони Мастчоҳ
© 2025 — Ҳамаи ҳуқуқҳо маҳфузанд. Барои мақсадҳои таълимӣ омода шудааст.
📌 1. Муқаддима ва таърихи JavaScript
JavaScript (JS) — забони барномасозии сатҳи баланд, динамикӣ, интерпретатсияшаванда ва чандпарадигмавӣ мебошад. Он яке аз се технологияи асосии World Wide Web дар баробари HTML ва CSS аст. JavaScript ба веб-саҳифаҳо ҳаёт мебахшад — онҳоро интерактивӣ, динамикӣ ва зинда месозад.
📜 Таърихи муфассал
Соли 1995 ширкати Netscape Communications ба муҳандиси худ Брендан Айк супориш дод, ки як забони скриптнависиро барои браузери Netscape Navigator эҷод кунад. Вай дар тӯли 10 рӯз прототипи аввалинро сохт. Номи аввала Mocha, сипас LiveScript ва ниҳоят JavaScript гузошта шуд (бо сабаби маъруфияти Java дар он замон, гарчанде JS ҳеҷ иртиботе ба Java надорад).
Соли 1997 стандарти ECMAScript (ES1) тавассути созмони Ecma International тасдиқ шуд. Версияҳои муҳимтарин:
| Версия | Сол | Навигариҳои муҳим |
|---|---|---|
| ES3 | 1999 | try/catch, regex, do-while, switch |
| ES5 | 2009 | strict mode, JSON, forEach, map, filter, reduce |
| ES6 (ES2015) | 2015 | let/const, arrow functions, classes, modules, promises, destructuring |
| ES2016 | 2016 | Array.includes(), оператори ** |
| ES2017 | 2017 | async/await, Object.values/entries, padStart/padEnd |
| ES2020 | 2020 | BigInt, Optional chaining (?.), Nullish coalescing (??) |
| ES2021 | 2021 | String.replaceAll, Promise.any |
| ES2022 | 2022 | Class fields, Private methods (#), Top-level await |
⚙️ Муҳити иҷрои JavaScript
JavaScript дар Engine-ҳои махсус иҷро мешавад. Машҳуртарин онҳо:
- V8 — дар Chrome, Edge, Node.js
- SpiderMonkey — дар Firefox
- JavaScriptCore — дар Safari
📦 2. Тағйирёбандаҳо — var, let, const
Тағйирёбандаҳо барои нигоҳдории маълумот дар хотираи компютер истифода мешаванд. Дар JavaScript се роҳи эълони тағйирёбанда вуҷуд дорад.
📊 Ҷадвали муқоиса
| Хусусият | var | let | const |
|---|---|---|---|
| Доираи амал (scope) | Функсионалӣ | Блокӣ {} | Блокӣ {} |
| Тағйирпазирӣ | ✅ Бале | ✅ Бале | ❌ Не (аммо объект тағйир меёбад) |
| Такроран эълон | ✅ Бале | ❌ Не | ❌ Не |
| Hoisting | ✅ (undefined) | ❌ (TDZ) | ❌ (TDZ) |
| Ба объекти global илова мешавад | ✅ Бале | ❌ Не | ❌ Не |
const-ро истифода баред, магар он ки медонед қимат тағйир меёбад — он гоҳ let. var-ро ҳаргиз истифода набаред!🔢 3. Намудҳои маълумот (Data Types)
JavaScript дорои 7 намуди примитивӣ ва 1 намуди ғайрипримитивӣ (Object) мебошад.
🔹 Намудҳои примитивӣ
| Намуд | Мисол | Шарҳ |
|---|---|---|
string | "Салом" | Матн |
number | 42, NaN | Адад (IEEE 754) |
bigint | 123n | Ададҳои бузург |
boolean | true | Мантиқӣ |
undefined | undefined | Қимати таъиннашуда |
null | null | Қимати холӣ |
symbol | Symbol() | Ягона ва беназир |
🔸 Қиматҳои falsy ва truthy
Falsy: false, 0, -0, 0n, "", null, undefined, NaN. Ҳамаи дигар truthy (аз ҷумла "0", "false", [], {}).
➕ 4. Операторҳо
| Гурӯҳ | Оператор | Мисол |
|---|---|---|
| Арифметикӣ | + - * / % ** | 2**3 = 8 |
| Муқоиса | == === != !== | 5===5 |
| Мантиқӣ | && || ! | true&&false |
| Nullish Coalescing | ?? | null??"пф" |
| Optional Chaining | ?. | obj?.p |
| Spread/Rest | ... | [...a] |
🔀 5. Сохторҳои шартӣ
🔁 6. Даврҳо (Loops)
| Намуд | Синтаксис |
|---|---|
for | for(let i=0;i<n;i++){} |
while | while(шарт){} |
do...while | do{}while(шарт) |
for...of | for(let el of arr){} |
for...in | for(let k in obj){} |
forEach | arr.forEach(el=>{}) |
for...in-ро барои массивҳо истифода набаред!⚙️ 7. Функсияҳо
🧩 8. Объектҳо
📋 9. Массивҳо (Arrays)
📝 10. Сатрҳо (Strings) — омӯзиши муфассал
Сатр (String) дар JavaScript як пайдарпайии аломатҳо (character) мебошад. Ҳар як аломат дар сатр бо индекси худ дастрас аст, ки аз 0 сар мешавад. Сатрҳо дар JavaScript тағйирнопазир (immutable) ҳастанд — яъне шумо наметавонед сатри мавҷударо тағйир диҳед, балки ҳар амалиёт сатри нав бармегардонад.
📝 Роҳҳои эҷоди сатр
📏 Хусусияти length
length — шумораи аломатҳои сатрро бармегардонад. Ин як хосият аст, на метод, бинобар ин қавс надорад.
🔍 Дастрасӣ ба аломатҳои алоҳида
🔠 Тағйир додани ҳарфҳо (Case Methods)
🔎 Ҷустуҷӯ дар сатр
✂️ Гирфтани зерсатр (Substring Methods)
🔄 Иваз кардани матн
🔗 Пайваст кардан ва тақсим кардан
🧹 Тоза кардани фосилаҳо
🔢 Пур кардани сатр (padStart/padEnd)
🔄 Такрор кардани сатр (repeat)
📋 Template Literals (Бэктик) — муфассал
🌳 11. DOM (Document Object Model) — омӯзиши муфассал
DOM (Document Object Model) — ин намояндагии сохтории ҳуҷҷати HTML дар хотираи браузер мебошад. Он ҳуҷҷатро ба шакли дарахти объектҳо табдил медиҳад, ки JavaScript метавонад онро хонда, тағйир диҳад ва идора кунад. DOM пули байни HTML ва JavaScript аст.
🏗️ Сохтори дарахти DOM
Ҳар як элементи HTML дар DOM як гиреҳ (node) мебошад. Намудҳои гиреҳҳо:
| Намуди гиреҳ | nodeType | Мисол |
|---|---|---|
| Element | 1 | <div>, <p> |
| Attribute | 2 | class="myClass" |
| Text | 3 | Матни дохили элемент |
| Comment | 8 | <!-- шарҳ --> |
| Document | 9 | Худи ҳуҷҷат |
🔍 Интихоб кардани элементҳо
📝 Тағйир додани мундариҷа
🎨 Тағйир додани атрибутҳо ва услубҳо
🏗️ Эҷод ва идоракунии элементҳо
🧭 Паймоиш дар дарахти DOM
🖱️ 12. Рӯйдодҳо (Events) — омӯзиши муфассал
Рӯйдодҳо (Events) ба браузер имкон медиҳанд, ки ба амалҳои корбар (клик, пахши клавиш, ҳаракати муш, ламс дар мобил) вокуниш нишон диҳад. Ин яке аз муҳимтарин қисматҳои JavaScript дар веб мебошад.
🎯 Илова кардани гӯшкунак (Event Listener)
📋 Намудҳои муҳими рӯйдодҳо
| Гурӯҳ | Рӯйдодҳо | Шарҳ |
|---|---|---|
| Муш | click, dblclick, mousedown, mouseup, mouseover, mouseout, mousemove | Рӯйдодҳои муш |
| Клавиатура | keydown, keyup, keypress | Пахши тугмаҳо |
| Форма | submit, change, input, focus, blur | Рӯйдодҳои форма |
| Ҳуҷҷат | DOMContentLoaded, load, scroll, resize | Рӯйдодҳои саҳифа |
| Ламс | touchstart, touchmove, touchend | Дастгоҳҳои мобилӣ |
🎈 Event Bubbling ва Capturing
Вақте рӯйдод рух медиҳад, он се марҳила дорад: Capturing (аз волид ба фарзанд), Target (дар худи элемент), Bubbling (аз фарзанд ба волид). Пешфарз bubbling аст.
🎯 Делегатсияи рӯйдод (Event Delegation)
Ба ҷои он ки ба ҳар як фарзанд алоҳида гӯшкунак часпонем, ба волид як гӯшкунак мечаспонем ва тавассути e.target муайян мекунем, ки кадом фарзанд клик шудааст. Ин самараноктар ва осонтар аст.
⏱️ 13. Вақтсанҷҳо (Timers) — омӯзиши муфассал
JavaScript ду функсияи асосии вақтсанҷ дорад: setTimeout барои иҷрои як маротиба пас аз таъхир ва setInterval барои иҷрои такроршаванда. Ин функсияҳо номусинхронӣ ҳастанд — онҳо иҷрои кодро боз намедоранд.
⏰ setTimeout
🔄 setInterval
📄 14. JSON (JavaScript Object Notation) — омӯзиши муфассал
JSON — формати сабук барои мубодилаи маълумот. Он ба осонӣ барои одамон хонда мешавад ва ба осонӣ тавассути мошинҳо тавлид ва таҳлил мегардад. JSON аз JavaScript сарчашма гирифтааст, аммо комилан мустақил аст.
📝 Қоидаҳои JSON
- Маълумот дар ҷуфтҳои калид:қимат нигоҳ дошта мешавад
- Калидҳо бояд дар нохунаки дугона бошанд
- Қиматҳо метавонанд:
string,number,object,array,true,false,nullбошанд - Функсияҳо,
undefined,Symbolва дигар намудҳои махсус дастгирӣ намешаванд - Охирин элемент пас аз худ вергул надорад
🔄 Нусхабардории амиқ бо JSON
❌ 15. Хатогиҳо ва коркарди онҳо (Error Handling) — муфассал
Коркарди хатогиҳо барои эҷоди барномаҳои устувор зарур аст. JavaScript механизми try...catch...finally ва инчунин throw-ро барои идораи хатогиҳо пешниҳод мекунад.
🛡️ Сохтори try...catch...finally
🚀 Партофтани хатогиҳои фармоишӣ (throw)
📊 Намудҳои хатогиҳо
| Намуд | Тавсиф |
|---|---|
Error | Хатогии умумӣ |
SyntaxError | Хатогии синтаксисӣ |
ReferenceError | Тағйирёбанда ёфт нашуд |
TypeError | Намуди нодуруст |
RangeError | Қимат берун аз диапазон |
URIError | Хатогии URI |
🚀 16. ES6+ Хусусиятҳои муосир — муфассал
📦 Деструктуризатсия (Destructuring)
📦 Spread ва Rest операторҳо
📦 Default Parameters
📦 Optional Chaining (?.) ва Nullish Coalescing (??)
⏳ 17. Promise ва async/await — муфассал
Promise — объектест, ки натиҷаи амалиёти номусинхрониро нишон медиҳад. Он метавонад дар се ҳолат бошад: pending (дар интизорӣ), fulfilled (иҷрошуда), rejected (радшуда).
🔧 Эҷоди Promise
🔄 async/await
🏛️ 18. Классҳо ва OOP — муфассал
Аз ES6, JavaScript синтаксиси class-ро пешниҳод мекунад. Класс ин як "қолаб" барои эҷоди объектҳо мебошад. Мерос бо extends ва даъвати конструктори волид бо super анҷом дода мешавад.
🔒 19. Клоужерҳо (Closures) — муфассал
Клоужер ин функсияест, ки ба тағйирёбандаҳои доираи берунии худ дастрасӣ дорад, ҳатто пас аз он ки функсияи берунӣ иҷрояшро анҷом додааст. Ин яке аз муҳимтарин ва пурқудраттарин мафҳумҳои JavaScript аст.
🎯 20. Калимаи this — муфассал
Қимати this вобаста ба контексти даъват муайян мешавад, на ҷои эълон. Ин яке аз мафҳумҳои мураккабтарини JavaScript аст.
🧬 21. Прототипҳо — муфассал
JavaScript як забони прототипӣ аст. Ҳар як объект дорои хосияти пинҳонии [[Prototype]] мебошад, ки ба объекти дигар ишора мекунад. Ин механизми асосии мерос дар JavaScript аст.
🗺️ 22. Map, Set, WeakMap, WeakSet — муфассал
Ин сохторҳои маълумот алтернативаи қудратманди массив ва объект мебошанд. Map барои ҷуфтҳои калид-қимат (калид метавонад ҳар намуд бошад), Set барои коллексияи қиматҳои ягона.
🔍 23. RegExp — муфассал
Ифодаҳои регулярӣ (Regular Expressions) барои ҷустуҷӯ, тасдиқ ва ивазкунии матн дар асоси шаблонҳо истифода мешаванд. Онҳо дар JavaScript бо ду роҳ эҷод мешаванд: literal /шарт/flags ё конструктор new RegExp('шарт','flags').
🌀 24. Итераторҳо ва Генераторҳо — муфассал
Итератор объектест, ки методи next()-ро дорад ва объекти {value, done} бармегардонад. Генератор функсияест бо function* синтаксис, ки метавонад yield кунад ва иҷрояшро қатъ ва идома диҳад.
🔮 25. Symbol — муфассал
Symbol як намуди примитивии ягона ва тағйирнопазир аст. Бештар барои эҷоди калидҳои беназир дар объектҳо истифода мешавад, то аз бархӯрди номҳо пешгирӣ кунад.
🪞 26. Proxy ва Reflect — муфассал
Proxy барои эҷоди як "қабати миёнарав" дар атрофи объект истифода мешавад, то амалҳои хондан, навиштан, нест кардан ва ғайраро назорат кунад.
🌐 27. Fetch API — муфассал
fetch як интерфейси муосир барои дархостҳои HTTP (GET, POST, PUT, DELETE) мебошад. Он Promises-ро истифода мебарад ва нисбат ба XMLHttpRequest соддатар аст.
💾 28. Web Storage — муфассал
Web Storage ба браузер имкон медиҳад, ки маълумотро дар компютери корбар ба таври маҳаллӣ нигоҳ дорад. Ду намуд дорад: localStorage (бе муҳлати анҷом) ва sessionStorage (то баста шудани браузер).
🔄 29. Event Loop — муфассал
JavaScript якрухона аст, аммо бо ёрии Event Loop метавонад амалиётҳои номусинхрониро идора кунад. Microtasks (Promise.then, queueMicrotask) қабл аз macrotasks (setTimeout, setInterval) иҷро мешаванд.
🧠 30. Идоракунии хотира (Memory Management) — муфассал
JavaScript дорои Garbage Collector (GC)-и худкор аст, ки объектҳои беистинодро тоза мекунад. Алгоритми асосӣ Mark-and-Sweep мебошад. Барои пешгирӣ аз memory leak: аз тағйирёбандаҳои глобалӣ кам истифода кунед, interval-ҳои нолозимро тоза кунед, ва дар хотир доред, ки клоужерҳо истинодҳоро нигоҳ медоранд.
📦 31. Модулҳо (ES6 Modules) — муфассал
Модулҳо ба мо имкон медиҳанд, ки кодро ба файлҳои алоҳида тақсим кунем. Ҳар як файл як модул аст ва метавонад export кунад ва import намояд.
📏 32. Strict Mode ('use strict') — муфассал
'use strict' як директиваест, ки дар аввали скрипт ё функсия гузошта мешавад ва JavaScript-ро дар ҳолати "сахтгир" қарор медиҳад. Ин боиси он мегардад, ки хатогиҳои бесабаб нишон дода шаванд ва рафтори бехатартар таъмин гардад.
💡 33. Маслиҳатҳо ва ҳилаҳои муфид — муфассал
🎯 Ҳилаҳои кӯтоҳнавис
✅ Беҳтарин таҷрибаҳо
- 🐫 camelCase барои тағйирёбандаҳо ва функсияҳо
- 📏 PascalCase барои классҳо
- 🔒 Ҳамеша const-ро афзал донед
- 🚫 var-ро ҳаргиз истифода набаред
- 🔍 Ҳамеша === истифода кунед
- 📝 Коди худро шарҳгузорӣ кунед
🔐 34. Амният дар JavaScript — муфассал
Амният дар JavaScript як мавзӯи бисёр муҳим аст. Ҳамлаҳои маъмултарин: XSS (Cross-Site Scripting) — ворид кардани скриптҳои зараровар тавассути вуруди корбар, CSRF, ва Injection. Барои пешгирӣ: ҳамеша маълумоти корбарро пеш аз намоиш дар DOM тоза кунед (sanitize), аз innerHTML бо маълумоти корбар истифода набаред, Content Security Policy таъин кунед.
🎨 35. Аниматсия бо JavaScript — муфассал
JavaScript метавонад аниматсияҳои мураккаб эҷод кунад. Ду роҳи асосӣ вуҷуд дорад: setInterval (кӯҳна) ва requestAnimationFrame (муосир ва самараноктар).
📊 36. Кор бо Forms — муфассал
Формаҳо яке аз унсурҳои муҳимтарини веб мебошанд. JavaScript ба мо имкон медиҳад, ки маълумоти формаро пеш аз ирсол тасдиқ кунем, рафтори пешфарзи ирсолро боздорем ва маълумотро ба таври номусинхронӣ ирсол кунем.
🔧 37. Debugging — муфассал
Ислоҳи хатогиҳо (debugging) як маҳорати муҳим барои ҳар як барномасоз аст. Асбобҳои асосӣ: console.log(), console.table(), console.group(), калимаи калидии debugger, ва Chrome DevTools (F12).
🏁 38. Хулоса ва санҷиши ниҳоӣ
Шумо акнун бо тамоми қисматҳо ва нозукиҳои JavaScript шинос шудед! Ин дониш барои оғози касби барномасозии веб кофӣ аст. Аз асосҳои тағйирёбандаҳо то мавзӯъҳои пешрафта ба монанди Event Loop, Proxy, ва async/await.
typeof NaN;
0.1+0.2===0.3;
[]==![];
console.log('1'); setTimeout(()=>console.log('2'),0); Promise.resolve().then(()=>console.log('3')); console.log('4');👨🏫 Муаллиф: Шодизода Тоҳирхоҷа
Омӯзгори МТМУ №13, ноҳияи Кӯҳистони Мастчоҳ
«Дониш чароғи роҳи зиндагист!»
© 2025 — Ҳамаи ҳуқуқҳо маҳфузанд. Ин мавод барои мақсадҳои таълимӣ таҳия шудааст.