سلام خدمت استاد گرامی و دوستان عزیز .
1- اولین نکته اینه که ساختمان داده آرایه منطقش اونطوریه به صورت پیشفرض که یه سری خونه پشت سر هم هستن تو حافظه که یه سری مقدار توشون هست . تو اکثر موتورهای جاوااسکریپت مکانیزم ساخت و مدیریت آرایه های تایپ دار Typed Arrays به صورت سطری در حافظه هست و اونجوری حافظه اشغال میکنه از جمله V8
2- عناصر آرایه در جاوااسکریپت به صورت اسپارس یا خلوت نگه داشته میشن که حافظه کمتری اشغال بشه . مثلا یه آرایه ۱۰۰ خوونه ای تعریف کردید ولی ۵ تاش مقدار داره فقط به اندازه ی اون ۵ تا حافظه میگیره نه کل ۱۰۰ خونه . این مدیریت حافظه به صورت داینامیکی توسط موتور مربوطه کنترل میشه .
۳- شما وقتی آرایه ای رو به صورت var arr=new Array(10000) تعریف میکنید درواقع در ابتدار هیچ اتفاقی نمیفته و نمیره یه آرایه بسازه با ده هزارتا خونه ... یه آرایه رزرو میکنه به اندازه ی ده هزارتایی ولی هنوز تخصیص حافظه(Allocating( یا Assign رو انجام نمیده . وقتی خونه ها به مرور پرمیشن اونم جامیگیره .
۴- برای تعریف آرایه های چند بعدی میتونید از روش های مختلفی استفاده کنید. مثلا میتونید به صورت
var numeric = [
['input1','input2'],
['inpt3','input4'] ] ;
استفاده کنید . که به صورت زیر میتونیم بهشون دسترسی داشته باشیم :
numeric[0][0] == 'input1';
numeric[0][1] == 'input2';
numeric[1][0] == 'input3';
numeric[1][1] == 'input4';
یا به صورت
var nums = Array.matrix(5,5,0);
print(nums[1][1]); // displays 0
که پارامتر اول تعداد سطر پارامتر دوم تعداد ستون و پارامتر سوم مقدار اینیشیال یا اولیه برای پرکردن خونه هارو به عهده داره .
یا به صورت :
var arrayName = new Array(new Array(new Array()));
که یه آرایه ۳ بعدی تعریف کردیم درواقع .
یا به صورت های دیگه که میتونه حلقه باشه یا از ماژول های آماده استفاده کنید .
۵- میتونید به صورت names[names.length]="" به آخر آرایه عنصر اضافه کنید .
۶- در مورد تفاوت های دیتا تایپ های نال و undefined باید بگم که :
-- آندیفایند یک متغیر هست که تعریف شده هست و فضا داخل رم گرفته ولی هنوز مقداری نداره یا مقداری بهش اساین نشده .
-- ولی نال یک value یا مقدار هست که منتسب میشه به یک متغیر به معنی no value یا هیچی یا بدون مقدار تلقی میشه .
null='value' // خطا
undefined = 'value' // value
منظور از 'value' یک مقدار هست که میتونه هرچیز دیگه ای هم باشه .
۷- این رو هم دقت کنید :
var arr=[] ;
arr[0] =0 ;
arr[99]=0 ya harchi
console.log(arr.length) // 100 [0,undefined X 98 ,0 ya harchi]
۸ - داخل جاوااسکریپت آرایه ها به صورت یک آبجکت قابل دسترسی نگه داشته میشن در واقع .
۹- مقدارهای داخل آرایه اگه از نوع primitive یا اولیه باشن به صورت مستقیم یا مقداری درون آرایه نگه داشته میشن و اگه از نوع آبجکتی باشه اون ریفرنس یا پوینترش به اون آبجکت نگه داشته میشه که طبیعتا با تغیر آبجکت اونم تغیر میکنه ولی برای نوع اولیه اینجوری نیست . موتورهای معروف مثل V8 خودشون keep tracker دارن که مثلا نوع هارو تشخیص بدن و بر اساس اون حافظه بگیرن مثلا اعشاری هست یا صحیح یا ... . چون به صورت ذاتی خود جاوااسکریپت همه رو number میشناسه .
۱۰ - متد و مکانیزم دسترسی به ارایه ها بر اساس key یا کلید یا اندیس اون ها هست نه بر اساس زمان درج یا محل قرارگیریشون بر اساس درج شدن . یعنی offset معنی نداره اونجا . یه ساختمان داده به صورت dictionary هست به صورت کلید یا اندیس که مرتب میشن . یعنی اگه خونه عنصر ۱۰۰ رو بیاریم اول میشه اول نه اینکه بگیم چون صدمین عنصر اضافه شده یا دیر اضافه شده پس همون اولویتش صدمین باشه .
در پایان امیدوارم مفید باشه براتون .