JavaScript چیست؟ آموزش کامل و جامع JavaScript

JavaScript چیست؟

JavaScript یک زبان برنامه‌نویسی سطح بالا، پویا و تفسیری است که برای برنامه‌نویسی سمت کلاینت و سرور استفاده می‌شود. این زبان امکان افزودن تعامل و پویایی به صفحات وب را فراهم می‌کند.

JavaScript به همراه HTML و CSS، یکی از سه تکنولوژی اصلی وب محسوب می‌شود و تنها زبان برنامه‌نویسی است که به طور مستقیم در مرورگرها اجرا می‌شود.
مثال ساده JavaScript
// یک تابع ساده برای سلام کردن
function sayHello(name) {
    return `سلام ${name}!`;
}

// استفاده از تابع
console.log(sayHello('کاربر عزیز'));

// کار با DOM
document.getElementById('greeting').innerHTML = sayHello('دوست من');

تاریخچه JavaScript

JavaScript در سال ۱۹۹۵ توسط برندن آیک در شرکت Netscape ایجاد شد. این زبان در ابتدا LiveScript نام داشت و بعداً به JavaScript تغییر نام داد.

امروزه JavaScript به عنوان محبوب‌ترین زبان برنامه‌نویسی دنیا شناخته می‌شود و در توسعه وب، موبایل و دسکتاپ کاربرد دارد.

مفاهیم پایه JavaScript

برای شروع کار با JavaScript، درک مفاهیم پایه ضروری است:

مفاهیم اولیه JavaScript
// متغیرها
let name = 'علی';
const age = 25;

// عملگرها
let sum = 10 + 5;
let isAdult = age >= 18;

// ساختارهای کنترلی
if (isAdult) {
    console.log('شما بزرگسال هستید');
} else {
    console.log('شما کودک هستید');
}

// حلقه‌ها
for (let i = 0; i < 5; i++) {
    console.log(`شماره ${i}`);
}

متغیرها و انواع داده

JavaScript دارای انواع داده متنوعی است که برای ذخیره و دستکاری اطلاعات استفاده می‌شوند.

انواع داده در JavaScript
// انواع داده اولیه
let text = 'متن';          // String
let number = 42;           // Number
let isTrue = true;         // Boolean
let nothing = null;        // Null
let undefined;             // Undefined
let bigNumber = 9007199254740991n; // BigInt

// انواع داده پیچیده
let array = [1, 2, 3];    // Array
let object = {            // Object
    name: 'علی',
    age: 25
};

توابع در JavaScript

توابع در JavaScript بلوک‌های قابل استفاده مجدد از کد هستند که می‌توانند پارامتر دریافت کرده و مقداری را برگردانند.

انواع مختلف توابع
// تابع معمولی
function multiply(a, b) {
    return a * b;
}

// تابع arrow
const add = (a, b) => a + b;

// تابع به عنوان پارامتر
function processNumbers(numbers, callback) {
    return numbers.map(callback);
}

// تابع سازنده
function Person(name, age) {
    this.name = name;
    this.age = age;
    this.sayHello = function() {
        return `سلام، من ${this.name} هستم`;
    }
}
استفاده از توابع arrow در ES6 معرفی شد و نوشتن کد را ساده‌تر و خواناتر می‌کند.

شی‌گرایی در JavaScript

JavaScript یک زبان شی‌گرا بر پایه پروتوتایپ است. اشیاء در JavaScript می‌توانند خواص و متدهای مختلفی داشته باشند.

کار با اشیاء در JavaScript
// تعریف کلاس در ES6
class Animal {
    constructor(name) {
        this.name = name;
    }
    
    speak() {
        return `${this.name} صدا می‌کند`;
    }
}

// وراثت
class Dog extends Animal {
    speak() {
        return `${this.name} پارس می‌کند`;
    }
}

// استفاده از کلاس
const dog = new Dog('رکس');
console.log(dog.speak()); // رکس پارس می‌کند
در JavaScript، همه چیز یک شیء است (به جز null و undefined). حتی توابع نیز اشیائی هستند که می‌توان آنها را به متغیر نسبت داد.

کار با DOM

DOM (Document Object Model) رابط برنامه‌نویسی برای اسناد HTML و XML است که امکان تغییر ساختار، محتوا و استایل صفحه را فراهم می‌کند.

دستکاری DOM
// انتخاب المان‌ها
const element = document.getElementById('myId');
const elements = document.getElementsByClassName('myClass');
const query = document.querySelector('.myClass');

// تغییر محتوا
element.innerHTML = 'محتوای جدید';
element.textContent = 'متن جدید';

// تغییر استایل
element.style.color = 'red';
element.classList.add('newClass');

// ایجاد المان جدید
const newDiv = document.createElement('div');
newDiv.textContent = 'المان جدید';
document.body.appendChild(newDiv);

رویدادها در JavaScript

رویدادها اتفاقاتی هستند که در صفحه وب رخ می‌دهند و JavaScript می‌تواند به آنها واکنش نشان دهد.

مدیریت رویدادها
// افزودن Event Listener
document.getElementById('myButton').addEventListener('click', function(event) {
    alert('دکمه کلیک شد!');
});

// رویداد با arrow function
const handleSubmit = (event) => {
    event.preventDefault();
    console.log('فرم ارسال شد');
};

// رویدادهای موس
element.addEventListener('mouseover', () => {
    console.log('موس روی المان قرار گرفت');
});

// رویدادهای کیبورد
document.addEventListener('keydown', (event) => {
    console.log(`کلید ${event.key} فشرده شد`);
});

برنامه‌نویسی ناهمگام

JavaScript از برنامه‌نویسی ناهمگام برای اجرای عملیات‌های زمان‌بر بدون مسدود کردن اجرای برنامه استفاده می‌کند.

کار با عملیات‌های ناهمگام
// Promise
const myPromise = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve('عملیات موفق');
    }, 2000);
});

// async/await
async function fetchData() {
    try {
        const response = await fetch('https://api.example.com/data');
        const data = await response.json();
        return data;
    } catch (error) {
        console.error('خطا در دریافت اطلاعات:', error);
    }
}

// استفاده از fetch API
fetch('https://api.example.com/users')
    .then(response => response.json())
    .then(data => console.log(data))
    .catch(error => console.error(error));
async/await در ES2017 معرفی شد و روشی ساده‌تر برای کار با Promise‌ها فراهم می‌کند.

ویژگی‌های مدرن JavaScript

ECMAScript 2015 (ES6) و نسخه‌های بعدی آن ویژگی‌های جدید و مفیدی را به JavaScript اضافه کردند.

ویژگی‌های مدرن ES6+
// Destructuring
const { name, age } = person;
const [first, second] = array;

// Spread operator
const newArray = [...oldArray, newItem];
const newObject = { ...oldObject, newProp: value };

// Template literals
const message = `سلام ${name}!`;

// Default parameters
function greet(name = 'کاربر') {
    return `سلام ${name}`;
}

// Modules
import { function1 } from './module';
export const function2 = () => {};

فریم‌ورک‌ها و کتابخانه‌ها

فریم‌ورک‌ها و کتابخانه‌های JavaScript توسعه برنامه‌های پیچیده را ساده‌تر می‌کنند.

معروف‌ترین فریم‌ورک‌ها و کتابخانه‌ها:

  • React.js - کتابخانه‌ای برای ساخت رابط کاربری
  • Vue.js - فریم‌ورک پیشرو برای ساخت رابط کاربری
  • Angular - فریم‌ورک جامع برای توسعه وب
  • Node.js - محیط اجرای JavaScript در سمت سرور

بهترین شیوه‌های کدنویسی

رعایت اصول و بهترین شیوه‌های کدنویسی در JavaScript باعث بهبود کیفیت و نگهداری‌پذیری کد می‌شود:

۱. نام‌گذاری متغیرها

از نام‌های معنادار و توصیفی استفاده کنید و از camelCase پیروی کنید.

۲. مدیریت خطاها

همیشه خطاها را مدیریت کنید و از try/catch استفاده کنید.

۳. کامنت‌گذاری

کد را به خوبی مستندسازی کنید اما از کامنت‌های غیرضروری پرهیز کنید.

عدم رعایت اصول کدنویسی تمیز می‌تواند باعث مشکلات جدی در نگهداری و توسعه پروژه شود.

اشکال‌زدایی در JavaScript

اشکال‌زدایی یکی از مهم‌ترین مهارت‌ها در برنامه‌نویسی JavaScript است. ابزارها و تکنیک‌های مختلفی برای یافتن و رفع خطاها وجود دارد.

روش‌های اشکال‌زدایی
// استفاده از console
console.log('نمایش پیام');
console.warn('هشدار');
console.error('خطا');
console.table([{name: 'علی', age: 25}, {name: 'مریم', age: 30}]);

// استفاده از debugger
function findError() {
    let x = 5;
    debugger; // اجرا متوقف می‌شود
    x = x + 5;
    return x;
}

// مدیریت خطاها
try {
    // کد مشکوک به خطا
    throw new Error('خطای سفارشی');
} catch (error) {
    console.error(error.message);
} finally {
    // کد نهایی
}
استفاده از Developer Tools مرورگرها برای اشکال‌زدایی بسیار مفید است. می‌توانید از Sources panel برای debugging خط به خط کد استفاده کنید.

مفاهیم پیشرفته JavaScript

Closures

مثال Closure
function createCounter() {
    let count = 0;
    return {
        increment() {
            count++;
            return count;
        },
        decrement() {
            count--;
            return count;
        },
        getCount() {
            return count;
        }
    };
}

const counter = createCounter();
console.log(counter.increment()); // 1
console.log(counter.increment()); // 2
console.log(counter.getCount()); // 2

Promises و Async/Await پیشرفته

الگوهای پیشرفته ناهمگام
// اجرای همزمان چند Promise
const promise1 = fetch('/api/data1');
const promise2 = fetch('/api/data2');

Promise.all([promise1, promise2])
    .then(([result1, result2]) => {
        console.log(result1, result2);
    })
    .catch(error => console.error('خطا در دریافت اطلاعات'));

// استفاده از async/await با Promise.race
async function getFirstResponse() {
    try {
        const result = await Promise.race([
            fetch('/api/fast'),
            fetch('/api/slow')
        ]);
        return await result.json();
    } catch (error) {
        console.error('خطا در دریافت اطلاعات');
    }
}

بهینه‌سازی عملکرد JavaScript

بهینه‌سازی عملکرد در JavaScript می‌تواند تأثیر قابل توجهی بر تجربه کاربری داشته باشد.

۱. مدیریت حافظه

بهینه‌سازی حافظه
// استفاده از WeakMap برای جلوگیری از نشت حافظه
const cache = new WeakMap();

function heavyComputation(obj) {
    if (cache.has(obj)) {
        return cache.get(obj);
    }
    
    const result = // محاسبات سنگین
    cache.set(obj, result);
    return result;
}

۲. بهینه‌سازی DOM

دستکاری بهینه DOM
// استفاده از DocumentFragment
const fragment = document.createDocumentFragment();
for (let i = 0; i < 1000; i++) {
    const element = document.createElement('div');
    element.textContent = `المان ${i}`;
    fragment.appendChild(element);
}
document.body.appendChild(fragment);

امنیت در JavaScript

رعایت اصول امنیتی در برنامه‌نویسی JavaScript برای محافظت از برنامه و کاربران ضروری است.

نکات مهم امنیتی:

  • جلوگیری از XSS (Cross-Site Scripting)
  • محافظت در برابر CSRF (Cross-Site Request Forgery)
  • اعتبارسنجی داده‌های ورودی
  • استفاده از HTTPS
  • مدیریت صحیح توکن‌های امنیتی
مثال‌های امنیتی
// اعتبارسنجی ورودی
function validateInput(input) {
    return input.replace(/[<>]/g, '');
}

// استفاده از CSP
// در HTML
// 

// ذخیره‌سازی امن توکن
function saveToken(token) {
    sessionStorage.setItem('token', token);
}

// استفاده از httpOnly cookies
document.cookie = "session=123; httpOnly; secure";

تست در JavaScript

نوشتن تست برای کد JavaScript اطمینان از عملکرد صحیح برنامه را افزایش می‌دهد.

نمونه تست با Jest
// تابع مورد تست
function sum(a, b) {
    return a + b;
}

// تست‌ها
describe('sum function', () => {
    test('adds 1 + 2 to equal 3', () => {
        expect(sum(1, 2)).toBe(3);
    });

    test('adds -1 + 1 to equal 0', () => {
        expect(sum(-1, 1)).toBe(0);
    });
});
استفاده از ابزارهای تست مانند Jest، Mocha یا Cypress می‌تواند فرآیند تست را ساده‌تر کند.

کلمات کلیدی:

JavaScript جاوااسکریپت برنامه‌نویسی وب آموزش JavaScript فرانت‌اند توسعه وب ES6 DOM

جمع‌بندی:

در این مقاله به طور جامع با JavaScript و مفاهیم اساسی آن آشنا شدیم. از تاریخچه و مفاهیم پایه گرفته تا ویژگی‌های پیشرفته و مدرن این زبان را بررسی کردیم. JavaScript به عنوان یکی از مهم‌ترین زبان‌های برنامه‌نویسی در دنیای وب، امکانات گسترده‌ای برای توسعه برنامه‌های تعاملی و پویا فراهم می‌کند. برای تسلط بیشتر بر JavaScript، تمرین مداوم و مطالعه منابع تکمیلی توصیه می‌شود.

1 thoughts on “‫جاوا اسکریپت چیست و چه کاربردی دارد؟ | راهنمای مبتدیان

Leave a Reply

Your email address will not be published. Required fields are marked *