JavaScript Basics → React Preparation

خلاصه JavaScript مقدماتی

جمع‌بندی کامل مباحث جلسه: آماده‌سازی محیط، اجرای JavaScript، متغیرها، انواع داده، Object، Array، Function، Loop، Callback، متدهای آرایه، Template Literals، نام‌گذاری، خطاهای رایج و تمرین‌های مرور.

فهرست سریع

آماده‌سازی اجرا متغیرها Data Types Object Array Function Loop Callback Array Methods Template Literals Naming خطاهای رایج ترتیب فایل‌ها تمرین کدهای کامل فایل‌ها

1. آماده‌سازی محیط

ابزارکاربرد
VS Codeویرایشگر کد
Node.jsاجرای فایل‌های .js در ترمینال
Chrome + DevToolsاجرای HTML و دیدن Console
Live Serverباز کردن HTML و رفرش خودکار بعد از ذخیره

باز کردن پوشه فعلی با VS Code

code .

افزونه‌های پیشنهادی

در تنظیمات VS Code گزینه Format On Save را فعال کن.

2. اجرای JavaScript

با Node.js

console.log("TEST");
node test.js

داخل مرورگر

<!DOCTYPE html>
<html lang="fa" dir="rtl">
<head>
  <meta charset="UTF-8" />
  <title>Introduction to JavaScript</title>
</head>
<body>

  <h1>JavaScript in Browser</h1>

  <script>
    console.log("Hello from browser");
  </script>

</body>
</html>
برای دیدن خروجی مرورگر: F12 → Console
فایل HTML را با node page.html اجرا نکن. Node برای اجرای مستقیم فایل JavaScript است.

3. متغیرها — var, let, const

کلیدواژهتغییر مقدارتعریف مجددمحدوده
varبلهبلهfunction
letبلهخیرblock {}
constخیر*خیرblock {}
let age = 25;
age = 26; // مجاز

const PI = 3.14;
// PI = 3.14159; // Error

let j = 10;
// let j = 20; // Error
اگر const یک Array یا Object باشد، محتویات داخلش می‌تواند تغییر کند، ولی خود متغیر را نمی‌توان به مقدار دیگری نسبت داد.

4. Data Types

نوعدستهمثالمعنی
stringPrimitive"Ali"متن
numberPrimitive25عدد
bigintPrimitive999999nاعداد خیلی بزرگ
booleanPrimitivetruetrue / false
undefinedPrimitivelet x;بدون مقدار
nullPrimitivelet x = null;خالی عمدی
symbolPrimitiveSymbol("id")مقدار یکتا
objectReference{name:"Ali"}داده ساختاریافته
// String
let name = "Ali";
let greeting = `سلام ${name}`;

// Number
let pi = 3.14;

// BigInt
let big = 9007199254740991n;
big + 10n;

// Boolean
let isActive = true;
const pending = false;

// undefined و null
let m;
let n = null;

// Symbol
let id1 = Symbol("id");
let id2 = Symbol("id");

console.log(id1 == id2); // false

typeof

console.log(typeof "hello"); // string
console.log(typeof 42);      // number
console.log(typeof true);    // boolean
console.log(typeof null);    // object
typeof null مقدار object می‌دهد؛ این رفتار تاریخی JavaScript است.

5. Object

const car = {
  brand: "Toyota",
  model: "Corolla",
  start: function () {
    console.log("Car is Started");
  },
};

car.start();
car.brand = "BMW";

// car = { test: 1 }; // Error
مفهوممثال
Propertycar.brand
Methodcar.start()

6. Array

let scores = [10, 19, 13, 8, 20];

console.log(scores);
console.log(scores.length); // 5
console.log(scores[0]);     // 10
index آرایه از صفر شروع می‌شود.
متدکار
push(x)اضافه کردن به انتها
unshift(x)اضافه کردن به ابتدا
pop()حذف از انتها
shift()حذف از ابتدا
splice()حذف / اضافه / جایگزینی در وسط
scores.push(15);
scores.unshift(4);
scores.pop();
scores.shift();
scores.splice(1, 2, 17, 18);
splice(1, 2, 17, 18) → از index 1 شروع کن → 2 عضو حذف کن → 17 و 18 بگذار

7. Function

function sum(a, b) {
  return a + b;
}

console.log(sum(10, 134)); // 144

function average(a, b) {
  return (a + b) / 2;
}

Arrow Function

const sum2 = (a, b) => {
  return a + b;
};

const sum3 = (a, b) => a + b;
بدون { }، نتیجه expression به‌صورت ضمنی return می‌شود. با { } باید return را بنویسی.

8. Loop / Iteration

let scores = [10, 12, 4, 19, 18];

for (let i = 0; i < scores.length; i++) {
  console.log(scores[i]);
}
بخشمعنی
let i = 0شروع شمارنده از صفر
i < scores.lengthتا انتهای آرایه
i++هر بار یک واحد افزایش
scores[i]عضو فعلی آرایه

جمع عناصر

let total = 0;

for (let i = 0; i < scores.length; i++) {
  total += scores[i];
}

console.log(total);

تابع میانگین

function avg(arr) {
  let sum = 0;

  for (let i = 0; i < arr.length; i++) {
    sum += arr[i];
  }

  return sum / arr.length;
}

مثال مرتبط با React

const products = ["Laptop", "Phone", "Tablet"];

for (let i = 0; i < products.length; i++) {
  console.log(products[i]);
}
در React برای ساخت لیست معمولاً به‌جای حلقه for از map() استفاده می‌کنیم.

9. Callback Function

Callback تابعی است که به عنوان آرگومان به تابع دیگری داده می‌شود.

function calc(a, b, callback) {
  let add = a + b;
  let sub = a - b;
  let mul = a * b;
  let div = a / b;

  callback({ add, sub, mul, div });
}

calc(10, 5, function (result) {
  console.log(result.add); // 15
  console.log(result.mul); // 50
});
calc محاسبه می‌کند → نتیجه را به callback می‌دهد → callback نتیجه را استفاده می‌کند

مثال ساده‌تر

function calculate(a, b, callback) {
  let result = a * b;
  callback(result);
}

calculate(4, 5, function (answer) {
  console.log(answer);
});

// 20

10. forEach, map, filter, reduce

let scores = [10, 12, 4, 19, 18];
متدکارخروجی
forEachانجام یک کار روی هر عضوundefined
mapتبدیل اعضاآرایه جدید هم‌طول
filterانتخاب با شرطآرایه جدید
reduceخلاصه‌سازییک مقدار

forEach

scores.forEach(function (value, index, array) {
  console.log(value, index);
});

map

let scores100 = scores.map((v) => v * 5);

filter

let scoresTop10 = scores.filter((v) => v >= 10);

reduce

let total = scores.reduce((p, v) => p + v, 0);

let average =
  scores.reduce((p, v) => p + v, 0) / scores.length;
forEachفقط انجام بده
mapتبدیل کن
filterانتخاب کن
reduceخلاصه کن

مثال React

products.map((product) => (
  <div key={product.id}>
    {product.name}
  </div>
))

11. Template Literals

let a = 5;
let b = 10;

let message = `
  a = ${a}
  b = ${b}
  sum = ${a + b}
`;

console.log(message);
از backtick یعنی ` استفاده می‌کنیم و با ${ } متغیر یا expression را داخل متن قرار می‌دهیم.

مثال

let userName = "Mehrnaz";
let count = 3;

let message =
  `Hello ${userName}, you have ${count} products.`;

12. قرارداد نام‌گذاری

سبکمثالکاربرد معمول
camelCaseuserName, getElementByIdمتغیر و تابع
PascalCaseUserName, MyComponentClass و Component در React
UPPER_SNAKEMAX_SIZE, API_KEYثابت‌های سراسری
برای React این یکی را خوب یادت بماند: اسم Componentها معمولاً با PascalCase نوشته می‌شود.

13. خطاهای رایج و عیب‌یابی

پیامعلت احتمالی
Identifier 'x' has already been declared تعریف دوباره let یا const در همان scope
Assignment to constant variable مقداردهی مجدد به const
Cannot mix BigInt and other types ترکیب BigInt و Number بدون تبدیل
typeof null === "object" رفتار تاریخی JavaScript
ReferenceError: x is not defined متغیر در محیط فعلی تعریف نشده است
Unexpected token '<' معمولاً فایل HTML را اشتباهی با Node اجرا کرده‌ای
برای HTML خطاها را در Browser Console ببین. برای Node خروجی و خطاها را در Terminal بررسی کن.

14. ترتیب فایل‌های تمرین

test.js
01-introduction-to-javascript.html
02-variable.html
03-datatype.html
04-array.html
05-function.html
06-iteration.html
07-naming-convention.html
08-callback-function.html

15. تمرین کوتاه

  1. سه متغیر با let و یک مقدار با const بساز و یکی را عمداً اشتباه تغییر بده.
  2. یک آرایه ۵ عضوی بساز؛ با map همه را ×۲ کن.
  3. با filter فقط مقادیر بزرگ‌تر یا مساوی ۱۲ را نگه دار.
  4. با reduce مجموع و میانگین آرایه را حساب کن.
  5. یک Callback بنویس که نتیجه ضرب دو عدد را چاپ کند.
  6. یک Template Literal بساز که نام و سن را داخل یک جمله نمایش دهد.

جمع‌بندی نهایی برای مرور سریع

letمقدار قابل تغییر
constreassignment ممنوع
ObjectProperty + Method
Arrayمجموعه‌ای از مقادیر
Functionکد قابل استفاده مجدد
forتکرار
Callbackتابع ورودی تابع دیگر
mapتبدیل Array
filterانتخاب با شرط
reduceArray → یک مقدار
${ }مقدار داخل Template Literal
PascalCaseنام Component در React

کدهای کامل فایل‌های جلسه

این بخش شامل خودِ کدهای فایل‌های اصلی تمرین است؛ یعنی همان فایل‌هایی که داخل پوشه جلسه داری، نه فقط مثال‌های خلاصه‌شده.

test.js

کد کامل فایل اصلی جلسه:

console.log("TEST");

01-introduction-to-javascript.html

کد کامل فایل اصلی جلسه:

<!DOCTYPE html>
<html lang="fa" dir="rtl">
  <head>
    <meta charset="UTF-8" />
    <title>Introduction to JavaScript</title>
  </head>
  <body>
    <h1>JavaScript in Browser</h1>
    <script>
      console.log("Hello from browser");
    </script>
  </body>
</html>

02-variable.html

کد کامل فایل اصلی جلسه:

<!DOCTYPE html>
<html lang="fa" dir="rtl">
  <head>
    <meta charset="UTF-8" />
    <title>Variables in JavaScript</title>
  </head>
  <body>
    <h1>var, let, const</h1>
    <script>
      var oldWay = "with var";
      let age = 25;
      age = 26;

      const PI = 3.14;
      // PI = 3.14159; // TypeError: Assignment to constant variable

      let j = 10;
      // let j = 20; // SyntaxError: Identifier 'j' has already been declared

      console.log(oldWay, age, PI, j);
    </script>
  </body>
</html>

03-datatype.html

کد کامل فایل اصلی جلسه:

<!DOCTYPE html>
<html lang="fa" dir="rtl">
  <head>
    <meta charset="UTF-8" />
    <title>Data Types in JS</title>
  </head>
  <body>
    <h1>Data Types in JS</h1>
    <script>
      // String & Template Literal
      let name = "Ali";
      let a = 5;
      let greeting = `سلام ${name}, a = ${a}`;

      // Number
      let pi = 3.14;

      // BigInt
      let big = 9007199254740991n;
      console.log(big + 10n);

      // Boolean
      let isActive = true;
      const pending = false;

      // undefined & null
      let m;
      let n = null;
      console.log(typeof m, typeof n); // undefined, object

      // Symbol
      let id1 = Symbol("id");
      let id2 = Symbol("id");
      console.log(id1 == id2); // false

      // Object
      const car = {
        brand: "Toyota",
        model: "Corolla",
        start: function () {
          console.log("Car is Started");
        },
      };
      car.start();
      car.brand = "BMW";
      console.log(car);

      console.log(greeting, pi, isActive, pending);
    </script>
  </body>
</html>

04-array.html

کد کامل فایل اصلی جلسه:

<!DOCTYPE html>
<html lang="fa" dir="rtl">
  <head>
    <meta charset="UTF-8" />
    <title>Arrays in JavaScript</title>
  </head>
  <body>
    <h1>Array Methods</h1>
    <script>
      let scores = [10, 19, 13, 8, 20];
      console.log(scores, scores.length);

      scores.push(15);
      scores.unshift(4);
      scores.pop();
      scores.shift();
      scores.splice(1, 2, 17, 18);

      console.log("after mutations:", scores);
    </script>
  </body>
</html>

05-function.html

کد کامل فایل اصلی جلسه:

<!DOCTYPE html>
<html lang="fa" dir="rtl">
  <head>
    <meta charset="UTF-8" />
    <title>Functions in JavaScript</title>
  </head>
  <body>
    <h1>Functions</h1>
    <script>
      function sum(a, b) {
        return a + b;
      }

      function average(a, b) {
        return (a + b) / 2;
      }

      const sum2 = (a, b) => {
        return a + b;
      };

      const sum3 = (a, b) => a + b;

      console.log(sum(10, 134));
      console.log(average(10, 134));
      console.log(sum2(3, 7));
      console.log(sum3(3, 7));
    </script>
  </body>
</html>

06-iteration.html

کد کامل فایل اصلی جلسه:

<!DOCTYPE html>
<html lang="fa" dir="rtl">
  <head>
    <meta charset="UTF-8" />
    <title>Iteration in JavaScript</title>
  </head>
  <body>
    <h1>Loops & Array Methods</h1>
    <script>
      let scores = [10, 12, 4, 19, 18];

      for (let i = 0; i < scores.length; i++) {
        console.log(scores[i]);
      }

      let total = 0;
      for (let i = 0; i < scores.length; i++) {
        total += scores[i];
      }
      console.log("sum:", total);

      function avg(arr) {
        let sum = 0;
        for (let i = 0; i < arr.length; i++) {
          sum += arr[i];
        }
        return sum / arr.length;
      }
      console.log("avg:", avg(scores));

      scores.forEach(function (value, index) {
        console.log("forEach", index, value);
      });

      let scores100 = scores.map((v) => v * 5);
      console.log("map:", scores100);

      let scoresTop10 = scores.filter((v) => v >= 10);
      console.log("filter:", scoresTop10);

      let reduced = scores.reduce((p, v) => p + v, 0);
      console.log("reduce sum:", reduced);
      console.log("reduce avg:", reduced / scores.length);
    </script>
  </body>
</html>

07-naming-convention.html

کد کامل فایل اصلی جلسه:

<!DOCTYPE html>
<html lang="fa" dir="rtl">
  <head>
    <meta charset="UTF-8" />
    <title>Naming Conventions</title>
  </head>
  <body>
    <h1>Naming Conventions</h1>
    <!--
      PascalCase   → UserName, MyComponent (classes, React components)
      camelCase    → userName, getElementById (variables, functions)
      UPPER_SNAKE  → MAX_SIZE, API_KEY (global constants)
    -->
    <script>
      const USER_NAME = "Ali";
      let userName = "ali";
      function getUserName() {
        return userName;
      }
      console.log(USER_NAME, getUserName());
    </script>
  </body>
</html>

08-callback-function.html

کد کامل فایل اصلی جلسه:

<!DOCTYPE html>
<html lang="fa" dir="rtl">
  <head>
    <meta charset="UTF-8" />
    <title>Callback Functions</title>
  </head>
  <body>
    <h1>Callback Functions</h1>
    <script>
      function calc(a, b, callback) {
        let add = a + b;
        let sub = a - b;
        let mul = a * b;
        let div = a / b;
        callback({ add, sub, mul, div });
      }

      calc(10, 5, function (result) {
        console.log(result.add);
        console.log(result.sub);
        console.log(result.mul);
        console.log(result.div);
      });

      calc(10, 5, (result) => {
        console.log("arrow callback", result);
      });
    </script>
  </body>
</html>

README.txt

کد کامل فایل اصلی جلسه:

پوشه تمرین جلسه JavaScript (1405-06-18)

اجرا:
  node test.js

فایل‌های HTML:
  با VS Code + Live Server باز کنید
  F12 → Console برای خروجی console.log

ترتیب:
  test.js
  01-introduction-to-javascript.html
  02-variable.html
  ...
  08-callback-function.html