Objectها در جاوااسکریپت
بهنام نوبخت · ۱۴۰۵/۷/۱۱
در مقاله قبل با Arrayها در جاوااسکریپت آشنا شدیم و یاد گرفتیم چگونه چند مقدار را در یک ساختار واحد ذخیره و مدیریت کنیم. اما در پروژههای واقعی، اطلاعات معمولاً فقط یک لیست ساده از مقادیر نیستند. برای مثال، یک کاربر میتواند نام، نام خانوادگی، سن، ایمیل و شماره تلفن داشته باشد. یک محصول میتواند نام، قیمت، موجودی و دستهبندی داشته باشد.
برای مدیریت چنین اطلاعاتی، Object در جاوااسکریپت یکی از مهمترین ساختارهای داده است. Object به ما اجازه میدهد اطلاعات مرتبط را به شکل Property و Value در کنار یکدیگر قرار دهیم.
در این مقاله از پایه با Object در جاوااسکریپت آشنا میشویم و نحوه ساخت Object، دسترسی به Propertyها، اضافه و حذف کردن اطلاعات، تغییر مقادیر، متدها، Objectهای تو در تو، پیمایش Object و چند متد مهم مانند Object.keys()، Object.values() و Object.entries() را یاد میگیریم.
Object در جاوااسکریپت چیست؟
Object ساختاری برای نگهداری مجموعهای از اطلاعات مرتبط با یکدیگر است.
برای مثال، اطلاعات یک کاربر را در نظر بگیرید:
let user = {
firstName: "Ali",
lastName: "Ahmadi",
age: 25,
email: "ali@example.com"
};در این Object چهار Property داریم:
firstName → Ali
lastName → Ahmadi
age → 25
email → ali@example.comهر Property معمولاً از دو بخش تشکیل میشود:
Property → Valueمثلاً:
age: 25در اینجا:
ageنام Property است.25مقدار Value است.
چرا از Object استفاده میکنیم؟
Objectها برای نمایش موجودیتهایی که چند ویژگی مرتبط دارند بسیار مناسب هستند.
برای مثال یک کاربر:
let user = {
name: "Ali",
age: 25,
city: "Istanbul"
};یک محصول:
let product = {
name: "Laptop",
price: 50000,
stock: 10
};یک خودرو:
let car = {
brand: "Toyota",
model: "Corolla",
year: 2025
};در پروژههای واقعی، Objectها برای نمایش دادههایی مانند User، Product، Order، Company، Advertisement و بسیاری از موجودیتهای دیگر بسیار پرکاربرد هستند.
ساخت یک Object
سادهترین روش ایجاد Object استفاده از {} است:
let person = {};این یک Object خالی ایجاد میکند.
میتوانیم هنگام ایجاد Object اطلاعات نیز قرار دهیم:
let person = {
name: "Sara",
age: 22
};Property چیست؟
در Object هر اطلاعات با یک نام مشخص ذخیره میشود.
مثلاً:
let user = {
name: "Ali",
age: 25,
city: "Istanbul"
};Propertyهای این Object عبارتاند از:
name
age
cityو مقدار آنها:
Ali
25
Istanbulدسترسی به Property با Dot Notation
یکی از سادهترین روشهای دسترسی به Property استفاده از Dot Notation است.
مثلاً:
let user = {
name: "Ali",
age: 25,
city: "Istanbul"
};
console.log(user.name);خروجی:
Aliبرای سن:
console.log(user.age);خروجی:
25و برای شهر:
console.log(user.city);خروجی:
Istanbulدسترسی به Property با Bracket Notation
روش دیگری برای دسترسی به Property استفاده از براکت [] است.
console.log(user["name"]);خروجی:
Aliبرای سن:
console.log(user["age"]);Dot Notation یا Bracket Notation؟
هر دو روش معتبر هستند.
Dot Notation:
user.nameBracket Notation:
user["name"]در حالتهای ساده، Dot Notation خواناتر است.
اما Bracket Notation یک قابلیت مهم دارد: میتوانیم نام Property را داخل یک متغیر قرار دهیم.
مثلاً:
let propertyName = "age";
console.log(user[propertyName]);خروجی:
25در این حالت استفاده از:
user.propertyNameبه دنبال Propertyای با نام propertyName میگردد، نه مقداری که داخل متغیر قرار دارد.
تغییر مقدار یک Property
Propertyهای Object قابل تغییر هستند.
مثلاً:
let user = {
name: "Ali",
age: 25
};
user.age = 26;
console.log(user.age);خروجی:
26میتوانیم مقدار String را نیز تغییر دهیم:
user.name = "Reza";اضافه کردن Property جدید
اگر Property موردنظر وجود نداشته باشد، میتوانیم آن را اضافه کنیم.
مثلاً:
let user = {
name: "Ali",
age: 25
};
user.city = "Istanbul";
console.log(user);خروجی:
{
name: "Ali",
age: 25,
city: "Istanbul"
}یا با Bracket Notation:
user["email"] = "ali@example.com";حذف Property با delete
برای حذف یک Property میتوانیم از delete استفاده کنیم.
let user = {
name: "Ali",
age: 25,
city: "Istanbul"
};
delete user.city;
console.log(user);حالا city دیگر در Object وجود ندارد.
بررسی وجود Property
برای بررسی وجود یک Property میتوانیم از in استفاده کنیم.
let user = {
name: "Ali",
age: 25
};
console.log("name" in user);خروجی:
trueاما:
console.log("email" in user);خروجی:
falseمقدار undefined در Object
اگر بخواهیم به Propertyای که وجود ندارد دسترسی پیدا کنیم:
let user = {
name: "Ali"
};
console.log(user.age);خروجی:
undefinedاین موضوع با وجود داشتن Property و مقدار undefined یکسان نیست.
مثلاً:
let user = {
name: "Ali",
age: undefined
};در اینجا Property age وجود دارد، اما مقدار آن undefined است.
Object میتواند انواع مختلف داده داشته باشد
Propertyهای یک Object میتوانند انواع مختلف داده را نگهداری کنند.
let user = {
name: "Ali",
age: 25,
active: true,
score: 18.5
};حتی میتوانیم Array داشته باشیم:
let user = {
name: "Ali",
skills: ["HTML", "CSS", "جاوااسکریپت"]
};یا Object دیگری:
let user = {
name: "Ali",
address: {
city: "Istanbul",
country: "Türkiye"
}
};این ساختارها در پروژههای واقعی بسیار رایج هستند.
Object تو در تو یا Nested Object
وقتی یک Object داخل Object دیگری قرار میگیرد، با یک Nested Object روبهرو هستیم.
مثال:
let user = {
name: "Ali",
address: {
city: "Istanbul",
country: "Türkiye"
}
};برای دسترسی به city:
console.log(user.address.city);خروجی:
Istanbulبرای country:
console.log(user.address.country);Object شامل Array
برعکس حالت قبل، یک Property نیز میتواند شامل Array باشد.
let user = {
name: "Ali",
skills: ["HTML", "CSS", "جاوااسکریپت"]
};برای دسترسی به اولین مهارت:
console.log(user.skills[0]);خروجی:
HTMLبرای مهارت دوم:
console.log(user.skills[1]);Object میتواند Function داشته باشد
یک Property از Object میتواند یک تابع نیز باشد.
در این حالت معمولاً به آن Method گفته میشود.
مثال:
let user = {
name: "Ali",
sayHello: function() {
console.log("Hello");
}
};برای اجرای Method:
user.sayHello();خروجی:
HelloMethod چیست؟
بهصورت ساده، وقتی یک Function بهعنوان Property یک Object قرار میگیرد، معمولاً آن را Method مینامیم.
مثال:
let user = {
name: "Ali",
introduce: function() {
console.log("My name is " + this.name);
}
};اجرای آن:
user.introduce();خروجی:
My name is Aliکلمه کلیدی this
در Methodهای Object، یکی از مفاهیم مهم this است.
مثلاً:
let user = {
name: "Ali",
introduce: function() {
console.log(this.name);
}
};
user.introduce();در این مثال:
this.nameبه Property name مربوط به همان Object اشاره میکند.
یعنی:
this
↓
user
↓
nameمفهوم this در جاوااسکریپت دارای جزئیات بیشتری است که در بخش مفاهیم پیشرفتهتر دوره با دقت بیشتری بررسی خواهد شد.
روش کوتاهتر برای نوشتن Method
در Objectهای جاوااسکریپت میتوانیم Method را به شکل کوتاهتر نیز بنویسیم:
let user = {
name: "Ali",
introduce() {
console.log("My name is " + this.name);
}
};این روش در جاوااسکریپت مدرن بسیار رایج است.
Object و const
یکی از نکات مهم این است که وقتی Object را با const تعریف میکنیم، همچنان میتوانیم Propertyهای آن را تغییر دهیم.
مثلاً:
const user = {
name: "Ali",
age: 25
};
user.age = 26;
console.log(user.age);این کد صحیح است.
اما نمیتوانیم خود Object را به یک Object کاملاً جدید اختصاص دهیم:
const user = {
name: "Ali"
};
user = {
name: "Sara"
};این کار باعث خطا میشود.
به زبان ساده:
const Object
↓
Properties can change
↓
Reference cannot be reassignedObject و Array چه تفاوتی دارند؟
Array و Object هر دو برای نگهداری داده استفاده میشوند، اما کاربرد آنها متفاوت است.
Array:
let colors = ["Red", "Green", "Blue"];برای نگهداری یک مجموعه یا لیست مناسب است.
Object:
let user = {
name: "Ali",
age: 25,
city: "Istanbul"
};برای نمایش یک موجودیت با ویژگیهای مختلف مناسب است.
مقایسه:
ساختار | کاربرد |
|---|---|
Array | نگهداری مجموعهای از مقادیر |
Object | نگهداری ویژگیهای مرتبط با یک موجودیت |
البته در پروژههای واقعی این دو ساختار معمولاً در کنار یکدیگر استفاده میشوند.
Array از Objectها
یکی از ساختارهای بسیار مهم در برنامهنویسی، Array از Objectها است.
مثلاً:
let users = [
{
name: "Ali",
age: 25
},
{
name: "Sara",
age: 22
},
{
name: "Reza",
age: 30
}
];در اینجا یک Array داریم که هر عنصر آن یک Object است.
برای دسترسی به اولین کاربر:
console.log(users[0]);برای نام اولین کاربر:
console.log(users[0].name);خروجی:
Aliبرای سن کاربر دوم:
console.log(users[1].age);خروجی:
22این ساختار در پروژههای واقعی بسیار مهم است، زیرا دادههایی که از API دریافت میکنیم اغلب به شکل Array of Objects هستند.
پیمایش Array از Objectها
میتوانیم با حلقه for اطلاعات کاربران را نمایش دهیم:
let users = [
{
name: "Ali",
age: 25
},
{
name: "Sara",
age: 22
},
{
name: "Reza",
age: 30
}
];
for (let i = 0; i < users.length; i++) {
console.log(users[i].name);
}
خروجی:
Ali
Sara
Rezaیا با for...of:
for (let user of users) {
console.log(user.name);
}این ساختار در ادامه دوره اهمیت بسیار زیادی خواهد داشت.
Object.keys()
متد Object.keys() نام Propertyهای Object را در قالب یک Array برمیگرداند.
مثال:
let user = {
name: "Ali",
age: 25,
city: "Istanbul"
};
console.log(Object.keys(user));خروجی:
["name", "age", "city"]بنابراین:
Object.keys(user)یک Array شامل نام Propertyها برمیگرداند.
Object.values()
متد Object.values() مقدار Propertyها را برمیگرداند.
let user = {
name: "Ali",
age: 25,
city: "Istanbul"
};
console.log(Object.values(user));خروجی:
["Ali", 25, "Istanbul"]Object.entries()
متد Object.entries() Property و Value را بهصورت مجموعهای از Arrayها برمیگرداند.
let user = {
name: "Ali",
age: 25
};
console.log(Object.entries(user));خروجی مفهومی:
[
["name", "Ali"],
["age", 25]
]این متد در کار با Objectها و دادههای API بسیار کاربردی است.
پیمایش Propertyهای Object
میتوانیم از Object.keys() و حلقه استفاده کنیم:
let user = {
name: "Ali",
age: 25,
city: "Istanbul"
};
let keys = Object.keys(user);
for (let key of keys) {
console.log(key);
}خروجی:
name
age
cityدسترسی همزمان به Key و Value
با Object.entries() میتوانیم هم نام Property و هم مقدار آن را دریافت کنیم:
let user = {
name: "Ali",
age: 25,
city: "Istanbul"
};
for (let [key, value] of Object.entries(user)) {
console.log(key, value);
}خروجی:
name Ali
age 25
city Istanbulساختار:
Object
↓
Object.entries()
↓
[key, value]
↓
for...ofبررسی Property با hasOwnProperty
روش دیگری برای بررسی اینکه یک Object دارای Property مشخصی است یا خیر، استفاده از hasOwnProperty() است.
let user = {
name: "Ali",
age: 25
};
console.log(user.hasOwnProperty("name"));خروجی:
trueاما:
console.log(user.hasOwnProperty("email"));خروجی:
falseبرای نیازهای ساده، in نیز میتواند استفاده شود:
"name" in userObject و JSON
Objectهای جاوااسکریپت شباهت زیادی به ساختار JSON دارند.
مثلاً Object:
let user = {
name: "Ali",
age: 25
};ساختار JSON نیز شبیه آن است:
{
"name": "Ali",
"age": 25
}اما Object جاوااسکریپت و JSON دقیقاً یک چیز نیستند.
JSON یک فرمت متنی استاندارد برای انتقال و ذخیره داده است و در ارتباط با APIها کاربرد بسیار زیادی دارد.
در مقالههای آینده بخش اختصاصی برای JSON و ذخیرهسازی اطلاعات خواهیم داشت.
مثال کاربردی: Object محصول
فرض کنید یک فروشگاه اینترنتی داریم:
let product = {
name: "Laptop",
price: 50000000,
stock: 8,
available: true
};نمایش اطلاعات:
console.log(product.name);
console.log(product.price);
console.log(product.stock);تغییر موجودی:
product.stock = 7;اضافه کردن دستهبندی:
product.category = "Electronics";مثال کاربردی: Object کاربر
let user = {
firstName: "Ali",
lastName: "Ahmadi",
age: 25,
email: "ali@example.com",
active: true
};نمایش نام کامل:
console.log(user.firstName + " " + user.lastName);خروجی:
Ali Ahmadiبررسی وضعیت کاربر:
if (user.active) {
console.log("User is active");
}مثال کاربردی: تابع داخل Object
میتوانیم اطلاعات و رفتار مرتبط را در یک Object قرار دهیم:
let calculator = {
add(a, b) {
return a + b;
},
subtract(a, b) {
return a - b;
}
};
console.log(calculator.add(10, 5));
console.log(calculator.subtract(10, 5));خروجی:
15
5این مفهوم مقدمهای برای برنامهنویسی شیءگرا (OOP) است که در مقاله بعدی بهصورت عمیقتر بررسی خواهد شد.
اشتباهات رایج در کار با Objectها
۱. اشتباه گرفتن Array و Object
Array:
let users = ["Ali", "Sara"];Object:
let user = {
name: "Ali",
age: 25
};Array بیشتر برای مجموعهای از عناصر و Object برای ویژگیهای یک موجودیت استفاده میشود.
۲. اشتباه در دسترسی به Property
اگر Object داشته باشیم:
let user = {
name: "Ali"
};دسترسی صحیح
user.nameیا:
user["name"]۳. استفاده از Property اشتباه
console.log(user.username);اگر username وجود نداشته باشد، نتیجه:
undefinedخواهد بود.
۴. فراموش کردن نقطه در Nested Object
اگر داشته باشیم:
let user = {
address: {
city: "Istanbul"
}
};دسترسی صحیح:
user.address.city۵. اشتباه گرفتن Object.keys با Object.values
Object.keys(user);نام Propertyها را میدهد.
Object.values(user);مقدار Propertyها را میدهد.
نکات مهم برای کار با Object
هنگام استفاده از Objectها این موارد را به خاطر بسپارید:
Object اطلاعات مرتبط را در قالب Property و Value نگهداری میکند.
برای دسترسی ساده از Dot Notation استفاده کنید.
برای Propertyهای پویا از Bracket Notation استفاده کنید.
با
lengthبرای Object کار نمیکنیم؛ برای شمارش Propertyها میتوان ازObject.keys().lengthاستفاده کرد.push()وpop()مربوط به Array هستند، نه Object معمولی.Object میتواند شامل Array یا Object دیگری باشد.
Function داخل Object معمولاً Method نامیده میشود.
thisدر Methodها برای دسترسی به Object جاری کاربرد دارد.Object.keys()نام Propertyها را برمیگرداند.Object.values()مقادیر را برمیگرداند.Object.entries()جفتهای Key و Value را برمیگرداند.Array از Objectها یکی از ساختارهای بسیار مهم در پروژههای واقعی است.
تمرینهای عملی
تمرین ۱
یک Object به نام person ایجاد کنید که شامل موارد زیر باشد:
نام
نام خانوادگی
سن
شهر
سپس هر Property را در Console نمایش دهید.
تمرین ۲
Object زیر را ایجاد کنید:
let product = {
name: "Phone",
price: 20000000,
stock: 5
};سپس:
قیمت را تغییر دهید.
موجودی را تغییر دهید.
یک Property به نام
categoryاضافه کنید.Object نهایی را نمایش دهید.
تمرین ۳
Object زیر را ایجاد کنید:
let user = {
name: "Ali",
age: 25,
city: "Istanbul"
};با استفاده از Object.keys() تمام Propertyها را نمایش دهید.
تمرین ۴
با استفاده از Object.values() تمام Valueهای Object را نمایش دهید.
تمرین ۵
Object زیر را ایجاد کنید:
let user = {
name: "Ali",
address: {
city: "Istanbul",
country: "Türkiye"
}
};سپس مقدار city را نمایش دهید.
تمرین ۶
یک Array از سه Object کاربر ایجاد کنید:
let users = [
{ name: "Ali", age: 25 },
{ name: "Sara", age: 22 },
{ name: "Reza", age: 30 }
];با استفاده از یک حلقه، نام و سن تمام کاربران را نمایش دهید.
تمرین چالشی
یک Object برای یک محصول ایجاد کنید که شامل:
namepricestockcategoryavailable
باشد.
سپس یک Method به نام getInfo ایجاد کنید که اطلاعات محصول را نمایش دهد.
نمونه ساختار:
let product = {
name: "Laptop",
price: 50000000,
stock: 10,
category: "Electronics",
available: true,
getInfo() {
// Your code
}
};
product.getInfo();سعی کنید داخل Method از this استفاده کنید.
جمعبندی
در این مقاله با Objectها در جاوااسکریپت آشنا شدیم و یاد گرفتیم چگونه اطلاعات مرتبط را در یک ساختار منظم ذخیره کنیم.
مهمترین مفاهیمی که یاد گرفتیم:
Object چیست.
Property و Value چه هستند.
چگونه Object ایجاد کنیم.
چگونه با Dot Notation به Property دسترسی داشته باشیم.
چگونه از Bracket Notation استفاده کنیم.
چگونه Property را تغییر دهیم.
چگونه Property جدید اضافه کنیم.
چگونه با
deleteیک Property را حذف کنیم.چگونه وجود یک Property را بررسی کنیم.
Objectهای تو در تو یا Nested Object چیستند.
چگونه Array را داخل Object قرار دهیم.
Method چیست.
thisچه کاربردی دارد.چگونه Array از Objectها ایجاد کنیم.
چگونه Objectها را پیمایش کنیم.
Object.keys()،Object.values()وObject.entries()چه کاربردی دارند.تفاوت کلی Object و Array چیست.
ارتباط Objectها با JSON چیست.
Objectها یکی از پایههای اصلی جاوااسکریپت و برنامهنویسی مدرن هستند. دادههایی که از API دریافت میکنید، اطلاعات کاربران، محصولات، سفارشها و بسیاری از موجودیتهای نرمافزاری معمولاً به شکل Object یا مجموعهای از Objectها نمایش داده میشوند.
نظرات
هنوز نظری ثبت نشده است.