آرایهها در جاوااسکریپت میتوانند شامل «جایگاههای خالی» (Empty slots) باشند؛ این جایگاههای خالی با خانههایی که با مقدار undefined پر شدهاند، یکسان نیستند. جایگاههای خالی را میتوان به یکی از روشهای زیر ایجاد کرد:
// ۱. استفاده از سازندهی آرایه:
const a = Array(5); // [ <5 empty items> ]
// ۲. استفاده از کاماهای متوالی در مقدار ثابت آرایه:
const b = [1, 2, , , 5]; // [ 1, 2, <2 empty items>, 5 ]
// ۳. مقداردهی مستقیم به ایندکسی بزرگتر از طول فعلی آرایه (array.length):
const c = [1, 2];
c[4] = 5; // [ 1, 2, <2 empty items>, 5 ]
// ۴. افزایش طول آرایه با تنظیم مستقیم ویژگی .length:
const d = [1, 2];
d.length = 5; // [ 1, 2, <3 empty items> ]
// ۵. حذف یک عنصر با استفاده از دگرواژهی delete:
const e = [1, 2, 3, 4, 5];
delete e[2]; // [ 1, 2, <1 empty item>, 4, 5 ]
در برخی از عملیاتها، رفتار جایگاههای خالی به گونهای است که انگار با مقدار undefined پر شدهاند:
const arr = [1, 2, , , 5]; // ایجاد یک آرایه اسپارس
// دسترسی از طریق ایندکس
console.log(arr[2]); // undefined
// استفاده از حلقه for...of
for (const i of arr) {
console.log(i);
}
// خروجی به ترتیب: 1 2 undefined undefined 5
// عملگر پخش کردن یا Spreading
const another = [...arr]; // آرایهی جدید اینگونه خواهد بود: [ 1, 2, undefined, undefined, 5 ]
اما در برخی دیگر از عملیاتها (به ویژه در متدهای پیمایش آرایه)، جایگاههای خالی نادیده گرفته شده و از روی آنها پرش میشود:
// استفاده از متد map
const mapped = arr.map((i) => i + 1); // [ 2, 3, <2 empty items>, 6 ]
// استفاده از متد forEach
arr.forEach((i) => console.log(i)); // فقط مقادیر واقعی را چاپ میکند: 1 2 5
// استفاده از متد filter
const filtered = arr.filter(() => true); // [ 1, 2, 5 ]
// استفاده از متد some
const hasFalsy = arr.some((k) => !k); // false
// شمارش ویژگیهای شیء (Property enumeration)
const keys = Object.keys(arr); // [ '0', '1', '4' ]
// استفاده از حلقه for...in
for (const key in arr) {
console.log(key);
}
// فقط ایندکسهای موجود را چاپ میکند: '0' '1' '4'
// پخش کردن درون یک شیء؛ این کار از شمارش ویژگیها استفاده میکند، نه از ایتریتورِ خودِ آرایه
const objectSpread = { ...arr }; // { '0': 1, '1': 2, '4': 5 }
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: https://developer.mozilla.org/en-US/docs/Web/JavaScript