چند نکته در مورد آرایه ها

پرسیده شده
فعالیت 1569 روز پیش
دیده شده 646 بار
1

سلام خدمت استاد گرامی و دوستان عزیز .

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  هست به صورت کلید یا اندیس که مرتب میشن . یعنی اگه خونه عنصر ۱۰۰ رو بیاریم اول میشه اول نه اینکه بگیم چون صدمین عنصر اضافه شده یا دیر اضافه شده پس همون اولویتش صدمین باشه .

 

در پایان امیدوارم مفید باشه براتون .

 

فایل پیوست