انواع داده (Data types) در JS
زبان JavaScript دارای 8 نوع داده (data type) مختلف است.
- رشته - String
- عدد - Number
- عدد بزرگ - Bigint
- بولین - Boolean
- تعریف نشده - Undefined
- نال - Null
- شیء آرایه - Array Object
- شیء - Object
- نماد - Symbol
نکته: در JS، نوع داده آرایه وجود ندارد. در واقع آرایه، نوعی Object است.
مفهوم انواع داده در JS
در هر زبان برنامه نویسی مسلط بودن و درک تفاوت های انواع داده ها یک امر ضروری است.
- در جاوا اسکریپت هر نوع داده دارای متدها (methods) و ویژگی های (properties) منحصر به فرد، آن نوع داده است.
- همینطور بر اساس نوع داده امکان دارد ماهیت عملگرهای ریاضی نیز تغییر کند.
console.log("PNL" + "dev") // PNLdev
console.log(2 + 3) // 5
در خط 1 نمونه کد، عملگر +، دو رشته (string) را به هم چسبانده (concate) است.
در خط 2 نمونه کد، عملگر +، دو عدد (number) را با هم جمع حسابی کرده است.
نکته: همانطور که مشاهده کردید، ماهیت + با تفاوت نوع داده، تغییر کرد.
رشته (String) در JS
یک رشته (string) مجموعه ای از کارکترها (عدد، حروف، علامت ها یا ...) است.
در واقع هرچه بین کوتیشن (نقل قول) قرار بگیرد، یک رشته است. مانند: "hi world" یا 'hi world'.
نکته: رشته ها بین کوتیشن ' ' یا دبل کوتیشن " " قرار می گیرند.
let name = "احسان";
let family = 'اسلامی';
name + " " + family;
عدد (number) در JS
اعداد در js می توانند با اعشار یا بدون اعشار (عدد صحیح) ذخیره شوند.
برای قرار دادن اعداد درون متغیر، شما می توانید بدون ممیز یا با ممیز عددی را وارد کنید.
let x = 10.00;
let y = 10;
let z = 10.10;
عدد بزرگ (Bigint) در JS
bigint یک نوع داده عددی برای اعداد بزرگ است.
همه ی اعداد در js در قالب ممیز 64 بیتی ذخیره می شوند اما bigint قابلیت ذخیره و نمایش بیش از 64 بیت را دارد.
برای ساخت BigInt دو راه وجود دارد:
- از تابع سراسری ()BigInt استفاده کنیم.
- در انتهای عدد از کارکتر n استفاده کنیم.
let x = BigInt("11001001001001101011010100010");
بولین (Boolean) در JS
بولین ها (booleans) فقط شامل دو مقدار true (صحیح) یا false (غلط) هستند.
همیشه نتیجه مقایسه یک بولین است.
نکته: علامت های مقایسه مانند ==، !=، >، <، >=، <= هستند که جواب آن ها همیشه یک bool است.
let x = 5;
let y = 5;
let z = 6;
x == y; // true
x == z; // false
تعریف نشده (Undefined) در JS
undefined به معنی تعریف نشده است و مقدار آن تهی است.
وقتی یک متغیری تعریف می شود و به آن مقداردهی نمی شود. مقدار آن undefined می شود.
let age = 30;
age = undefined // undefined
وقتی نوع متغیری undefined گذاشته می شود، مقدار آن نیز undefined می شود.
نکته: مقدار undefined برابر با تهی است. تهی با یک رشته خالی برابر نیست.
نکته: بهتر است مقدار undefined را به متغیر ندهید ،خطا نمی دهد ولی اصولی نیست.
'' == undefined; // false
نال (Null) در JS
null یا نال، تهی است.
مقدار null هم دقیقاً مانند undefined به معنی هیچ مقداری یا تهی است. اما این دو نوع داده کاملاً با هم متفاوت هستند.
برخلاف null ،undefined را می توان به عنوان مقدار به متغیر نسبت داد.
در واقع مقدار null برای یک متغیر، به این معنی است که این متغیر از نوع شئ یا Object است. اما هنوز به هیچ شئ خاصی اشاره نمیکند ، چون با عملگر typeof نوع داده null را Object را برمی گرداند.
let age = 30;
age = null // null
وقتی نوع متغیری null گذاشته می شود، مقدار آن نیز null می شود.
نکته: مقدار null برابر با تهی است.
نکته: null با undefined هر دو تهی هستند و با هم برابرند.
نکته: بهتر است برای تهی کردن یک متغیر به جای undefined از null استفاده شود. از undefined اصولا استفاده نمی شود و صرفا متغیرهایی که مقداردهی نشده اند، به صورت پیشفرض undefined در نظر گرفته می شوند.
آرایه (Array) در JS
آرایه (array) مجموعه ای از متغیرها و مقادیر است. در آرایه می توان انواع مختلف داده را ذخیره کرد.
آرایه ها در JS درون براکت [ ] نوشته می شوند.
const array = ["hi world"];
و آیتم ها با کاما (,) از هم جدا می شوند. به هر آیتم یا خانه آرایه اصطلاحا یک المان آرایه گفته می شود.
const array = ["hi", "world"];
همانطور که در نمونه کد بالا دیدید، یک مجموعه به نام array شامل دو مقدار رشته ای (hi - world) است.
هر خانه آرایه یک شماره دارد که به آن ایندکس index گفته می شود.
ایندکس ها از 0 شروع می شوند. در نمونه کد بالا خانه اول (hi) ایندکس 0 است. خانه دوم (world) ایندکس 1 است.
برای فراخوانی هر خانه ی آرایه، باید از شماره ایندکس آن استفاده کرد.
const array = ["hi", "world"];
console.log(array[0]); // hi چاپ می شود
console.log(array[1]); // world چاپ می شود
const cars = ["BENZ", "BMW"];
document.getElementById("demo").innerHTML = cars[0];
نکته: در JS، نوع داده آرایه وجود ندارد. در واقع آرایه، نوعی Object است.
شئ (Object) در JS
اشیاء یا object در js با براکت مجعد - { } - curly brace نوشته می شوند.
یک شی JS از ویژگی ها (property) و متدهای (method) مختلف تشکیل شده است.
ویژگی های یک شی جاوا اسکریپتی به صورت name: value نوشته می شود.
const obj = {
name: 'ehsan'
};
ویژگی های یک شی جاوا اسکریپتی با کاما , از هم جدا می شوند.
const obj = {
name: 'ehsan',
family: 'eslami',
age: 31
};
برای فراخوانی مقدار یک ویژگی آبجکت می توانیم مانند آرایه آن را فراخوانی کنیم.
const obj = {
name: 'ehsan',
family: 'eslami',
age: 31
};
console.log(obj['age']); // 31
console.log(obj.age); // 31
نکته: همانطور که در نمونه کد بالا در خط 7 مشاهده کردید، از نقطه برای فراخوانی مقدار ویژگی نیز استفاده می شود.
نکته: به ساختار نام = مقدار (name:value) ساختار جفتی (assocative) گفته می شود.
مقایسه ابجکت و آرایه جاوا اسکریپت:
Object | Array |
براکت مجعد { } | براکت - [ ] |
ایندکس غیر عددی | ایندکس عددی |
object یا (شیء) جاوا اسکریپتی شامل موارد زیر است:
- object
- array
- date و ...
در نمونه کد زیر چند نوع مختلف object نوشته شده است.
// Object:
const person = {
name:"ehsan",
family:"eslami"
};
// Array object:
const students = ["ehsan", "mahshid", "mona"];
// Date object:
const date = new Date("2024-04-24");
نکته: در اصل آرایه نوعی آبجکت است، و برخلاف زبان های دیگر جاوا اسکریپتی نوع داده ای به اسم آرایه ندارد.
const person = {
firstName: "ehsan",
lastName : "eslami",
age: 31
};
document.getElementById("test").innerHTML = person.firstName + " is " + person.age + " years old.";
نوع داده در JS بسیار منعطف است
در JS برخلاف زبان های دیگر، می توان با مقداردهی نوع داده جدید، نوع قبلی داده را تغییر داد.
در این نمونه کد:
- در خط 1 متغیر دارای نوع undefined و مقدار undefined است.
- در خط 2 متغیر دارای نوع number و مقدار 2 است.
- در خط 3 متغیر دارای نوع string و مقدار hi است.
let x; // x => Undefined
x = 2; // x => Number
x = "hi"; // x => String
متغیر های ابتدایی (Primitive Variable) در JS
متغیرهایی که از نوع string، number، bigint، boolean، symbol، null، undefined هستند، متغیرهای ابتدایی نامیده می شوند.
به زبان دیگر هر متغیری که توانایی ذخیره چند متغیر را به صورت همزمان نداشته باشد، متغیر ابتدایی نامیده می شود.
هر متغیری که از انواع بالا نباشد، اشیاء یا object نامیده می شود.
نکته: در JS می توان متغیرهای ابتدایی (مانند رشته و ...) را به صورت شیء هم تعریف کرد، ولی اکیدا توصیه می شود این کار را نکنید.
عملگر (instanceof) در JS
عملگر instanceof در جاوا اسکریپت برای بررسی نوع یک شی در زمان اجرا استفاده می شود. اگر درست باشد یک مقدار بولین برمیگرداند، آنگاه نشان میدهد که شی نمونهای از یک کلاس خاص است و اگر غلط باشد، اینطور نیست.
نکته: بولین (boolean) مقدار درست یا غلط ( true یا false)
const person= ["Amir", "Ali", "Reza" , "Amin"];
document.getElementById("demo").innerHTML =
"Array: " + (person instanceof Array);
عملگر (typeof) در JS
اپراتور typeof نوع متغیر جاوااسکریپت را برمیگرداند.
انواع دادههای اصلی
در جاوااسکریپت، یک مقدار ابتدایی یک مقدار تکی بدون خصوصیات یا متدها است.
جاوااسکریپت 7 نوع داده ابتدایی دارد:
- رشته (string)
- عدد (number)
- بولین (boolean)
- bigint
- سمبل (symbol)
- خالی (Null)
- تعریف نشده( undefinde)
عملگر typeof نوع یک متغیر یا یک عبارت را برمی گرداند.
document.getElementById("demo").innerHTML =
typeof "Amir" // رشته - string
typeof ("Amir"+"Ali") // رشته - string
typeof 3.14 // عدد - number
typeof 33 // عدد - number
typeof (33 + 66) // عدد - number
typeof true // بولین - boolean
typeof false // بولین - boolean
typeof 1234n // bigint
typeof Symbol() // سمبل - symbol
typeof x // تعریف نشد - undefined
typeof null // شی - object
نکته: در جاوااسکریپت، null یک مقدار ابتدایی است. با این حال، typeof ، object را برمیگرداند. این یک باگ معروف در جاوااسکریپت است و دلایل تاریخی دارد.
یک نوع داده پیچیده می تواند چندین مقدار و یا انواع داده های مختلف را باهم ذخیره کند.
جاوا اسکریپت یک نوع داده پیچیده دارد:
شی (object)
انواع پیچیده دیگر مانند آرایه ها، توابع، مجموعه ها و نقشه ها فقط انواع مختلفی از اشیاء هستند.
عملگر typeof تنها دو نوع را برمی گرداند:
شی (object)
تابع (function)
document.getElementById("demo").innerHTML =
typeof {name:'Ehsan'} + "<br>" +
typeof [1,2,3,4] + "<br>" +
typeof new Map() + "<br>" +
typeof new Set() + "<br>" +
typeof null + "<br>" +
typeof function myFunc(){};
نکته: عملگر typeof شیء را برای همه انواع اشیاء برمی گرداند. اشیاء ، آرایه ها ، مجموعه ها ، نقشه ها.
نکته: شما نمی توانید از typeof برای تعیین اینکه آیا یک شی جاوا اسکریپت یک آرایه است یا یک تاریخ استفاده کنید.
خلاصه درس
- در این فصل با انواع داده ها در JS آشنا شدیم و برای هر کدام مثالی ساده را برسی کردیم
- در فصل های آینده با انواع داده ها بیشتر آشنا می شوید.
- string
- number
- bigint
- boolean
- null
- symbol
- object
- Undefined