# معرفی جاوا اسکریپت
جاوا اسکریپت (JavaScript) یک زبان برنامهنویسی سطح بالا، تفسیری و چندالگویی است که توسط Brendan Eich در سال ۱۹۹۵ ساخته شد. این زبان در ابتدا برای اضافه کردن تعامل به صفحات وب طراحی شد، اما امروزه به یکی از محبوبترین زبانهای برنامهنویسی جهان تبدیل شده و در سمت سرور (Node.js)، موبایل (React Native)، دسکتاپ (Electron) و حتی هوش مصنوعی کاربرد دارد.
نکته: جاوا اسکریپت یک زبان Single-Threaded و Non-Blocking با Event Loop است که آن را برای عملیات I/O بسیار کارآمد میکند. همچنین از Prototype-based Inheritance پشتیبانی میکند.
چرا جاوا اسکریپت؟
پادشاه وب
۹۸٪ وبسایتهای جهان از جاوا اسکریپت استفاده میکنند. زبان اول فرانتاند
فراتر از مرورگر
با Node.js میتوانید سمت سرور، اپلیکیشنهای CLI و ابزارهای DevOps بسازید
اکوسیستم عظیم
بزرگترین مخزن پکیج جهان (npm) با بیش از ۲ میلیون کتابخانه
توسعه سریع
بهروزرسانی سالانه ECMAScript با ویژگیهای جدید و مدرن
کاربردهای جاوا اسکریپت
- توسعه فرانتاند: React, Vue.js, Angular, Svelte, Next.js, Nuxt.js
- توسعه بکاند: Node.js, Express, NestJS, Fastify, Koa
- توسعه موبایل: React Native, Ionic, NativeScript, Capacitor
- توسعه دسکتاپ: Electron, Tauri, NW.js
- بازیسازی: Phaser, Three.js, Babylon.js, PixiJS
- هوش مصنوعی و یادگیری ماشین: TensorFlow.js, Brain.js, ML5.js
- اینترنت اشیاء (IoT): Johnny-Five, Cylon.js
نسخههای ECMAScript (استاندارد رسمی)
| نسخه | نام رسمی | سال انتشار | وضعیت | ویژگیهای کلیدی |
|---|---|---|---|---|
ES15 |
ECMAScript 2024 | ژوئن ۲۰۲۴ | آخرین | Promise.withResolvers، گروهبندی در RegExp، متدهای جدید Set |
ES14 |
ECMAScript 2023 | ژوئن ۲۰۲۳ | پشتیبانی کامل | متدهای toSorted, toReversed, toSpliced برای آرایه، WeakMap بهتر |
ES13 |
ECMAScript 2022 | ژوئن ۲۰۲۲ | پشتیبانی کامل | Top-level await، فیلدهای خصوصی کلاس (#)، متد at() برای آرایه |
ES12 |
ECMAScript 2021 | ژوئن ۲۰۲۱ | پشتیبانی کامل | Promise.any، عملگرهای Logical Assignment، WeakRef |
ES11 |
ECMAScript 2020 | ژوئن ۲۰۲۰ | پشتیبانی کامل | BigInt، Optional Chaining، Nullish Coalescing، Dynamic Import |
ES6 |
ECMAScript 2015 | ژوئن ۲۰۱۵ | انقلاب بزرگ | let/const، کلاسها، ماژولها، Arrow Functions، Promises |
# فهرست جامع مباحث جاوا اسکریپت (۳۰۰+ مبحث)
نقشه راه کامل یادگیری جاوا اسکریپت از مفاهیم پایه تا پروژههای پیشرفته وفریمورکها.
بخش اول: آشنایی و مفاهیم پایه (فصلهای ۱ تا ۴۰)
- ۱. معرفی جاوا اسکریپت و تاریخچه آن
- ۲. نصب محیط توسعه (VS Code و مرورگر)
- ۳. ساختار اولیه کد و نحوه اجرا (Console)
- ۴. متغیرها در جاوا اسکریپت (Var, Let, Const)
- ۵. انواع دادههای اولیه (Primitive Data Types)
- ۶. نوع داده String و متدهای آن
- ۷. نوع داده Number و عملیات ریاضی
- ۸. نوع داده Boolean و مقادیر True/False
- ۹. نوع داده Null و Undefined
- ۱۰. نوع داده Symbol و کاربردهای آن
- ۱۱. تبدیل انواع داده (Type Casting)
- ۱۲. عملگرهای محاسباتی (Arithmetic Operators)
- ۱۳. عملگرهای انتساب (Assignment Operators)
- ۱۴. عملگرهای مقایسهای (Comparison Operators)
- ۱۵. عملگرهای منطقی (Logical Operators)
- ۱۶. اولویت عملگرها (Operator Precedence)
- ۱۷. مفهوم Truthy و Falsy در جاوا اسکریپت
- ۱۸. کوتاهسازی مدارها (Short Circuit Evaluation)
- ۱۹. رشتههای متنی (Template Literals)
- ۲۰. دریافت ورودی از کاربر (Prompt, Alert)
- ۲۱. دستور شرطی If و Else
- ۲۲. دستور شرطی Else If
- ۲۳. عملگر سهتایی (Ternary Operator)
- ۲۴. دستور Switch Case
- ۲۵. حلقهها و مفهوم تکرار
- ۲۶. حلقه For (استاندارد)
- ۲۷. حلقه While و Do While
- ۲۸. حلقه For...In (برای اشیاء)
- ۲۹. حلقه For...Of (برای آرایهها)
- ۳۰. دستورات Break و Continue
- ۳۱. توابع (Functions) و معرفی آنها
- ۳۲. تعریف تابع با کلمه کلیدی Function
- ۳۳. پارامترها و آرگومانهای توابع
- ۳۴. کلمه کلیدی Return و خروجی توابع
- ۳۵. عبارات توابع (Function Expressions)
- ۳۶. توابع پیکانی (Arrow Functions)
- ۳۷. مفهوم Scope (حوزه دسترسی)
- ۳۸. متغیرهای سراسری و محلی (Global vs Local)
- ۳۹. مفهوم Hoisting (بالابردن)
- ۴۰. حالت Strict Mode در جاوا اسکریپت
بخش دوم: کار با آرایهها و اشیاء (فصلهای ۴۱ تا ۸۰)
- ۴۱. معرفی آرایهها (Arrays)
- ۴۲. ایجاد آرایه و دسترسی به عناصر
- ۴۳. طول آرایه (Property Length)
- ۴۴. متدهای پیمایش آرایه (Push, Pop)
- ۴۵. متدهای تغییر آرایه (Shift, Unshift)
- ۴۶. متدهای حذف و اضافه کردن وسط آرایه (Splice, Slice)
- ۴۷. متدهای یافتن در آرایه (IndexOf, Includes)
- ۴۸. متدهای Find و FindIndex
- ۴۹. متد Filter (فیلتر کردن آرایه)
- ۵۰. متد Map (تبدیل آرایه)
- ۵۱. متد Reduce (کاهش آرایه به یک مقدار)
- ۵۲. متد ForEach (حلقه روی آرایه)
- ۵۳. متد Some و Every (بررسی شرطها)
- ۵۴. متد Sort (مرتبسازی آرایه)
- ۵۵. متد Reverse (معکوس کردن)
- ۵۶. متد Join و Split (تبدیل آرایه به متن و برعکس)
- ۵۷. آرایههای چندبعدی و تو در تو
- ۵۸. پخش کردن آرایه (Spread Operator)
- ۵۹. تخریب آرایه (Destructuring Assignment)
- ۶۰. معرفی اشیاء (Objects) در جاوا اسکریپت
- ۶۱. ایجاد شیء و خواص (Properties)
- ۶۲. متدهای شیء (Methods)
- ۶۳. دسترسی به خواص شیء (Dot Notation vs Bracket Notation)
- ۶۴. محاسبه نام خاصیت (Computed Property Names)
- ۶۵. پخش کردن اشیاء (Spread Operator در Objects)
- ۶۶. تخریب اشیاء (Object Destructuring)
- ۶۷. تو در تو بودن اشیاء (Nested Objects)
- ۶۸. کپی کردن اشیاء (Shallow Copy vs Deep Copy)
- ۶۹. متدهای کلیدی اشیاء (Object.keys, Object.values)
- ۷۰. متد Object.entries و Object.freeze
- ۷۱. مفهوم This در اشیاء
- ۷۲. متدهای Getter و Setter
- ۷۳. سازندهها (Constructor Functions)
- ۷۴. نمونهسازی اولیه (Prototypes) در سازندهها
- ۷۵. کلمه کلیدی New
- ۷۶. بررسی نوع داده با Instanceof
- ۷۷. معرفی کلاسها (Classes) در ES6
- ۷۸. سازنده کلاس (Constructor)
- ۷۹. متدهای کلاس و Static Methods
- ۸۰. وراثت (Inheritance) و کلمه کلیدی Extends
بخش سوم: مفاهیم پیشرفته و مدرن (فصلهای ۸۱ تا ۱۲۰)
- ۸۱. کلمه کلیدی Super در وراثت
- ۸۲. متدهای خصوصی و عمومی کلاس (Private & Public)
- ۸۳. پلیمورفیسم (Polymorphism)
- ۸۴. کپسولهسازی (Encapsulation)
- ۸۵. ماژولها (Modules) در جاوا اسکریپت
- ۸۶. صادرات و واردات (Export & Import)
- ۸۷. ماژولهای پیشفرض و نامدار (Named vs Default)
- ۸۸. مدیریت خطا (Error Handling)
- ۸۹. بلوک Try و Catch
- ۹۰. بلوک Finally و ارسال خطا (Throw)
- ۹۱. انواع خطاها (Syntax, Reference, Type Error)
- ۹۲. ایجاد خطاهای سفارشی (Custom Errors)
- ۹۳. مفهوم همگامسازی (Synchronous) و ناهمگامسازی (Asynchronous)
- ۹۴. حلقه رویداد (Event Loop)
- ۹۵. پشته فراخوانی (Call Stack)
- ۹۶. صف وظایف (Task Queue) و Microtask Queue
- ۹۷. معرفی Callbacks
- ۹۸. مشکل Callback Hell
- ۹۹. معرفی Promises (قولها)
- ۱۰۰. حالتهای Promise (Pending, Fulfilled, Rejected)
- ۱۰۱. متدهای Then و Catch
- ۱۰۲. متد Finally در Promises
- ۱۰۳. مدیریت چندین Promise (Promise.all)
- ۱۰۴. متدهای Promise.race و Promise.allSettled
- ۱۰۵. معرفی Async/Await
- ۱۰۶. نحوه استفاده از Async/Await
- ۱۰۷. مدیریت خطا در Async/Await با Try/Catch
- ۱۰۸. پشتیبانی از ماژولها در مرورگر
- ۱۰۹. مفهوم Closures (بستارها)
- ۱۱۰. کاربردهای پیشرفته Closures
- ۱۱۱. IIFE (توابع با اجرای فوری)
- ۱۱۲. مفهوم Currying در توابع
- ۱۱۳. Composition (ترکیب توابع)
- ۱۱۴. Memoization (بهینهسازی توابع)
- ۱۱۵. مفهوم Recursion (بازگشتی)
- ۱۱۶. پشته فراخوانی در Recursion
- ۱۱۷. الگوریتمهای جستجو (Linear Search)
- ۱۱۸. الگوریتم جستجوی باینری (Binary Search)
- ۱۱۹. الگوریتمهای مرتبسازی (Bubble Sort)
- ۱۲۰. معرفی ساختارهای داده (Stack, Queue)
بخش چهارم: جاوا اسکریپت در مرورگر و DOM (فصلهای ۱۲۱ تا ۱۶۰)
- ۱۲۱. معرفی DOM (مدل شیءگرای سند)
- ۱۲۲. درخت DOM (DOM Tree)
- ۱۲۳. انتخابگرها (Selectors) در جاوا اسکریپت
- ۱۲۴. متدهای getElementById و getElementsByClassName
- ۱۲۵. متدهای querySelector و querySelectorAll
- ۱۲۶. دسترسی و تغییر محتوای عناصر (innerText, textContent)
- ۱۲۷. تغییر محتوای HTML (innerHTML)
- ۱۲۸. کار با ویژگیها (Attributes) و getAttribute
- ۱۲۹. تنظیم و حذف ویژگیها (setAttribute, removeAttribute)
- ۱۳۰. کار با استایلها (Style Property)
- ۱۳۱. کلاسهای CSS (classList.add, remove, toggle)
- ۱۳۲. ایجاد عناصر جدید در صفحه (createElement)
- ۱۳۳. اضافه کردن عناصر به صفحه (appendChild, insertBefore)
- ۱۳۴. جایگزینی و حذف عناصر (replaceChild, removeChild)
- ۱۳۵. پیمایش در DOM (Traversing) - والدین و فرزندان
- ۱۳۶. پیمایش در DOM - خواهر و برادرها (Siblings)
- ۱۳۷. ابعاد عناصر (offsetWidth, clientHeight)
- ۱۳۸. موقعیتیابی عناصر (offsetTop, getBoundingClientRect)
- ۱۳۹. اسکرول کردن در صفحه (scrollTo, scrollBy)
- ۱۴۰. رویدادها (Events) در جاوا اسکریپت
- ۱۴۱. نحوه افزودن رویداد (addEventListener)
- ۱۴۲. حذف رویداد (removeEventListener)
- ۱۴۳. شیء Event و ویژگیهای آن
- ۱۴۴. رویدادهای ماوس (Click, Mouseover, Mouseout)
- ۱۴۵. رویدادهای کیبورد (Keydown, Keyup, Keypress)
- ۱۴۶. رویدادهای فرم (Submit, Input, Change)
- ۱۴۷. رویدادهای صفحه (Load, Resize, Scroll)
- ۱۴۸. جلوگیری از رفتار پیشفرض (preventDefault)
- ۱۴۹. توقف انتشار رویداد (stopPropagation)
- ۱۵۰. رویدادهای سفارشی (Custom Events)
- ۱۵۱. حبابزنی و ثبت رویداد (Bubbling & Capturing)
- ۱۵۲. واگذاری رویداد (Event Delegation)
- ۱۵۳. معرفی BOM (مدل شیءگرای مرورگر)
- ۱۵۴. کار با شیء Window
- ۱۵۵. کادرهای پیام (Alert, Confirm, Prompt)
- ۱۵۶. زمانبندیها (setTimeout و setInterval)
- ۱۵۷. پاک کردن زمانبندیها (clearTimeout, clearInterval)
- ۱۵۸. کار با LocalStorage
- ۱۵۹. کار با SessionStorage
- ۱۶۰. کار با Cookies
بخش پنجم: فرمها، گرافیک و تعاملات پیشرفته (فصلهای ۱۶۱ تا ۲۰۰)
- ۱۶۱. اعتبارسنجی فرمها (Form Validation)
- ۱۶۲. API اعتبارسنجی فرم (Constraint Validation API)
- ۱۶۳. ویژگیهای اعتبارسنجی (Required, Pattern, Min/Max)
- ۱۶۴. استایلدهی فرمهای معتبر و نامعتبر
- ۱۶۵. آپلود فایل و کار با File API
- ۱۶۶. پیشنمایش تصویر قبل از آپلود
- ۱۶۷. خواندن محتوای فایل متنی (FileReader)
- ۱۶۸. Drag and Drop (کشیدن و رها کردن)
- ۱۶۹. API کلیپبورد (Clipboard API)
- ۱۷۰. تاریخ و زمان در جاوا اسکریپت (Date Object)
- ۱۷۱. متدهای Date (getFullYear, getMonth و...)
- ۱۷۲. فرمتبندی تاریخ و زمان
- ۱۷۳. کتابخانههای مدیریت تاریخ (معرفی Moment.js و Date-fns)
- ۱۷۴. ریاضیات پیشرفته (Math Object)
- ۱۷۵. تولید اعداد تصادفی (Random)
- ۱۷۶. معرفی JSON (JavaScript Object Notation)
- ۱۷۷. تبدیل شیء به JSON (JSON.stringify)
- ۱۷۸. تبدیل JSON به شیء (JSON.parse)
- ۱۷۹. کار با دادههای JSON در پروژههای واقعی
- ۱۸۰. معرفی Canvas API
- ۱۸۱. رسم اشکال ساده در Canvas (مربع، دایره)
- ۱۸۲. رسم متن و خطوط در Canvas
- ۱۸۳. انیمیشنهای ساده در Canvas (RequestAnimationFrame)
- ۱۸۴. معرفی SVG و تعامل با آن توسط JS
- ۱۸۵. معرفی Web Workers (پردازش در پسزمینه)
- ۱۸۶. اشتراکگذاری داده بین Workers
- ۱۸۷. معرفی Geolocation API (موقعیت مکانی)
- ۱۸۸. دریافت مختصات جغرافیایی کاربر
- ۱۸۹. معرفی History API (تاریخچه مرورگر)
- ۱۹۰. تغییر URL بدون رفرش (PushState)
- ۱۹۱. مفهوم SPA (اپلیکیشن تک صفحهای)
- ۱۹۲. مدیریت مسیریابی ساده کلاینت-ساید
- ۱۹۳. معرفی Intersection Observer API
- ۱۹۴. لود کردن تنبل (Lazy Loading) تصاویر
- ۱۹۵. انیمیشن هنگام اسکرول (Scroll Animations)
- ۱۹۶. معرفی Fetch API
- ۱۹۷. درخواستهای GET با Fetch
- ۱۹۸. درخواستهای POST و ارسال داده
- ۱۹۹. مدیریت هدرها (Headers) در Fetch
- ۲۰۰. مدیریت خطاها در درخواستهای شبکه
بخش ششم: ابزارهای مدرن، فریمورکها و پروژهمحور (فصلهای ۲۰۱ تا ۲۵۰)
- ۲۰۱. معرفی REST API و مفاهیم آن
- ۲۰۲. کار با کدهای وضعیت HTTP (Status Codes)
- ۲۰۳. معرفی Axios به جای Fetch
- ۲۰۴. درخواستهای همزمان و ناهمزمان
- ۲۰۵. مدیریت وضعیت (State Management) مقدماتی
- ۲۰۶. معرفی WebSockets (ارتباط بلادرنگ)
- ۲۰۷. ارسال و دریافت پیام با WebSocket
- ۲۰۸. معرفی Service Workers و PWA
- ۲۰۹. آفلاینسازی وبسایت (Caching)
- ۲۱۰. اعلانهای مرورگر (Notifications API)
- ۲۱۱. امنیت در جاوا اسکریپت (XSS و CSRF)
- ۲۱۲. پاکسازی ورودیهای کاربر (Sanitization)
- ۲۱۳. محدودیتهای CORS
- ۲۱۴. روشهای رفع مشکلات CORS
- ۲۱۵. معرفی ECMAScript نسخههای جدید (ES2020+)
- ۲۱۶. ویژگیهای جدید مثل Optional Chaining (?.)
- ۲۱۷. Nullish Coalescing Operator (??)
- ۲۱۸. متدهای جدید آرایه (flat, flatMap)
- ۲۱۹. BigInt (اعداد صحیح بزرگ)
- ۲۲۰. Private Class Fields
- ۲۲۱. Logical Assignment Operators (&&=, ||=, ??=)
- ۲۲۲. String.replaceAll و متدهای جدید رشته
- ۲۲۳. Promise.any و AggregateError
- ۲۲۴. WeakRef و Finalizers
- ۲۲۵. استفاده از Regex (عبارات باقاعده) در JS
- ۲۲۶. متدهای Regex (Test, Match, Replace)
- ۲۲۷. الگوهای پرکاربرد Regex
- ۲۲۸. دیباگ کردن کد (Debugging)
- ۲۲۹. استفاده از Breakpoints در مرورگر
- ۲۳۰. استفاده از Console پیشرفته (Table, Group, Time)
- ۲۳۱. بهینهسازی عملکرد (Performance)
- ۲۳۲. جلوگیری از Memory Leaks (نشت حافظه)
- ۲۳۳. پاکسازی Event Listenerها
- ۲۳۴. بهینهسازی رندرینگ (Reflow و Repaint)
- ۲۳۵. معرفی TypeScript (مقدمات و تفاوت با JS)
- ۲۳۶. تایپهای پایه در TypeScript
- ۲۳۷. کامپایل کردن TS به JS
- ۲۳۸. آمادهسازی برای فریمورکها (React/Vue/Angular)
- ۲۳۹. مفهوم Virtual DOM و تفاوت آن با Real DOM
- ۲۴۰. JSX و نحوه نوشتن آن
- ۲۴۱. کامپوننتنویسی مدرن
- ۲۴۲. مدیریت State در فریمورکها
- ۲۴۳. چرخه حیات کامپوننتها (Lifecycle Hooks)
- ۲۴۴. هوکها (Hooks) در React (مثال کاربردی)
- ۲۴۵. Directives در Vue (مثال کاربردی)
- ۲۴۶. ساختار پروژههای بزرگ (Best Practices)
- ۲۴۷. کدنویسی تمیز (Clean Code)
- ۲۴۸. الگوهای طراحی (Design Patterns) در JS (Module, Singleton)
- ۲۴۹. تست نویسی مقدماتی (Unit Testing)
- ۲۵۰. جمعبندی نهایی و نکات کلیدی شروع بازار کار
بخش هفتم: ۵۰ پروژه عملی برای تسلط کامل
- ۱. ماشین حساب ساده
- ۲. ساعت دیجیتال و آنالوگ
- ۳. تبدیل واحدها (دمما، طول، وزن)
- ۴. تولیدکننده رنگ تصادفی
- ۵. شمارنده معکوس
- ۶. لیست کارها با LocalStorage
- ۷. نمایشگر نقل قولهای تصادفی
- ۸. بازی حدس عدد
- ۹. اعتبارسنجی فرم ثبتنام
- ۱۰. منوی همبرگری ریسپانسیو
- ۱۱. اسلایدر تصاویر
- ۱۲. اکاردئون (سوالات متداول)
- ۱۳. تبها برای نمایش محتوا
- ۱۴. مودال سفارشی
- ۱۵. نوتیفیکیشن
- ۱۶. جستجو در لیست
- ۱۷. دکمه بازگشت به بالا
- ۱۸. تصویر پسزمینه پارالاکس
- ۱۹. نوار پیشرفت هنگام اسکرول
- ۲۰. گالری تصاویر با Lightbox
- ۲۱. بازی سنگ کاغذ قیچی
- ۲۲. بازی حافظه
- ۲۳. بازی مار با Canvas
- ۲۴. نقاشی آنلاین با Canvas
- ۲۵. پخشکننده موزیک ساده
- ۲۶. پخشکننده ویدیو سفارشی