متغیرها و انواع داده
متغیرها و انواع داده؛ آموزش JavaScript به زبان ساده، همراه با مثال و خروجی.
اجرای اولین کد
console.log("Hello, JavaScript!"); // → Hello, JavaScript!
- در مرورگر: کلید
F12← تب Console. - در Node.js: فایل
app.jsبساز و باnode app.jsاجرا کن.
کامنتها
// کامنت تکخطی
/* کامنت
چندخطی */
تعریف متغیر: var، let، const
var | let | const | |
|---|---|---|---|
| Scope | تابع (function) | بلوک (block) | بلوک (block) |
| تغییر مقدار | بله | بله | نه (دوبارهریزی ممنوع) |
| تعریف مجدد در یک scope | بله | خیر | خیر |
| Hoisting | بله، با مقدار undefined | بله ولی در TDZ | بله ولی در TDZ |
let age = 25;
age = 26; // مجازه
const PI = 3.14159;
// PI = 3; // ❌ TypeError: Assignment to constant variable
var old = "قدیمی"; // در کد جدید استفاده نکن
قانون طلایی: پیشفرض
const. فقط اگه لازم شد مقدار عوض بشهlet. ازvarاستفاده نکن.
const با آبجکت و آرایه
const فقط ارجاع (reference) رو قفل میکنه، نه محتوا رو:
const user = { name: "Ali" };
user.name = "Reza"; // مجازه
// user = {}; // ❌ خطا
const nums = [1, 2];
nums.push(3); // مجازه → [1, 2, 3]
برای قفل کردن واقعی: Object.freeze(user) (در Object توضیح داده شده).
قوانین نامگذاری
- با حرف،
_یا$شروع بشه (نه عدد). - حساس به حروف بزرگ و کوچیکه:
age≠Age. - کلمات رزرو شده (
class,return, ...) ممنوع. - قرارداد:
camelCaseبرای متغیر و تابع،PascalCaseبرای class،UPPER_SNAKEبرای ثابتها.
let firstName = "Sara";
const MAX_RETRY = 3;
class UserAccount {}
انواع داده (Data Types)
جاوا اسکریپت ۸ نوع داره: ۷ نوع primitive و ۱ نوع object.
Primitive ها
// 1) string
const s = "سلام";
const s2 = 'single';
const s3 = `template ${1 + 2}`; // → "template 3"
// 2) number (عدد صحیح و اعشاری، هر دو)
const n = 42;
const f = 3.14;
const inf = Infinity;
const notNum = NaN; // Not a Number
// 3) bigint (عدد بسیار بزرگ)
const big = 9007199254740993n;
// 4) boolean
const yes = true;
const no = false;
// 5) undefined (مقدار نگرفته)
let x;
console.log(x); // → undefined
// 6) null (خالی بودن عمدی)
const empty = null;
// 7) symbol (شناسهی یکتا)
const id = Symbol("id");
Object
همهچیز غیر از primitive ها: آبجکت، آرایه، تابع، Date، Map و ...
const person = { name: "Ali", age: 30 };
const list = [1, 2, 3];
function hello() {}
typeof
typeof "hi"; // → "string"
typeof 10; // → "number"
typeof 10n; // → "bigint"
typeof true; // → "boolean"
typeof undefined; // → "undefined"
typeof Symbol(); // → "symbol"
typeof {}; // → "object"
typeof []; // → "object" (آرایه هم object است)
typeof function(){};// → "function"
typeof null; // → "object" ⚠️ باگ تاریخی زبان
تشخیص دقیقتر:
Array.isArray([]); // → true
Object.prototype.toString.call(null); // → "[object Null]"
Number.isNaN(NaN); // → true
تبدیل نوع (Type Conversion)
صریح (Explicit)
Number("42"); // → 42
Number("abc"); // → NaN
Number(""); // → 0
Number(true); // → 1
String(123); // → "123"
String(null); // → "null"
Boolean(""); // → false
Boolean("0"); // → true (رشتهی غیرخالی)
parseInt("42px"); // → 42
parseFloat("3.14abc"); // → 3.14
ضمنی (Implicit / Coercion)
"5" + 2; // → "52" (+ با رشته = الحاق)
"5" - 2; // → 3 (- فقط عددیه)
"5" * "2"; // → 10
true + 1; // → 2
[] + {}; // → "[object Object]"
مقادیر Falsy
فقط این ۸ مقدار در شرطها false حساب میشن:
false, 0, -0, 0n, "", null, undefined, NaN
هر چیز دیگهای truthyـه (حتی "0", [], {}).
Primitive در برابر Reference
// primitive: کپی مقدار
let a = 10;
let b = a;
b = 20;
console.log(a); // → 10
// object: کپی ارجاع (هر دو به یک آبجکت اشاره میکنن)
const o1 = { v: 1 };
const o2 = o1;
o2.v = 99;
console.log(o1.v); // → 99
Template Literals
const name = "Ali";
const msg = `سلام ${name}
این یک رشتهی چندخطیه و حاصل 2+3 برابر ${2 + 3} است`;
console.log(msg);
Tagged template
function tag(strings, ...values) {
return strings.raw.join("|") + " :: " + values.join(",");
}
tag`a${1}b${2}c`; // → "a|b|c :: 1,2"
خروجی و ورودی ساده
console.log("log");
console.error("خطا");
console.warn("هشدار");
console.table([{ a: 1 }, { a: 2 }]); // جدول
console.group("گروه"); console.log("داخل"); console.groupEnd();
console.time("t"); /* کد */ console.timeEnd("t");
// فقط در مرورگر
// alert("پیام"); confirm("مطمئنی؟"); prompt("اسمت؟");