JavaScript چیست؟ آموزش کامل و جامع JavaScript
فهرست مطالب
JavaScript چیست؟
JavaScript یک زبان برنامهنویسی سطح بالا، پویا و تفسیری است که برای برنامهنویسی سمت کلاینت و سرور استفاده میشود. این زبان امکان افزودن تعامل و پویایی به صفحات وب را فراهم میکند.
// یک تابع ساده برای سلام کردن
function sayHello(name) {
return `سلام ${name}!`;
}
// استفاده از تابع
console.log(sayHello('کاربر عزیز'));
// کار با DOM
document.getElementById('greeting').innerHTML = sayHello('دوست من');
تاریخچه JavaScript
JavaScript در سال ۱۹۹۵ توسط برندن آیک در شرکت Netscape ایجاد شد. این زبان در ابتدا LiveScript نام داشت و بعداً به 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 دارای انواع داده متنوعی است که برای ذخیره و دستکاری اطلاعات استفاده میشوند.
// انواع داده اولیه
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} هستم`;
}
}
شیگرایی در 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()); // رکس پارس میکند
کار با DOM
DOM (Document Object Model) رابط برنامهنویسی برای اسناد HTML و XML است که امکان تغییر ساختار، محتوا و استایل صفحه را فراهم میکند.
// انتخاب المانها
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));
ویژگیهای مدرن JavaScript
ECMAScript 2015 (ES6) و نسخههای بعدی آن ویژگیهای جدید و مفیدی را به JavaScript اضافه کردند.
// 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 {
// کد نهایی
}
مفاهیم پیشرفته JavaScript
Closures
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
// استفاده از 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 اطمینان از عملکرد صحیح برنامه را افزایش میدهد.
// تابع مورد تست
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);
});
});
Hi, this is a comment.
To get started with moderating, editing, and deleting comments, please visit the Comments screen in the dashboard.
Commenter avatars come from Gravatar.