Skip to content

Latest commit

 

History

History
56 lines (40 loc) · 3.54 KB

File metadata and controls

56 lines (40 loc) · 3.54 KB

Ітэрацыі па масівам і ўласцівасці

Хоць масівы ў JavaScript — аб'екты, няма добрых падставаў для таго, каб выкарыстоўваць цыкл for in для ітэрацыі па масівах. Фактычна, ёсць шэраг добрых падстаў супраць гэтага.

Заўвага: масівы JavaScript не асацыятыўныя масівы. JavaScript мае аб'екты для структуры ключ-значэнне. Але калі асацыятыўныя масівы захоўваюць парадак, аб'екты — не.

З той прычыны, што цыкл for in пералічвае ўсе ўласцівасці, якія ёсць у ланцужку прататыпаў, і таму, што адзіны спосаб выключыць гэтыя значэнні — hasOwnProperty, ітэрацыя атрымліваецца ў 20 разоў марудней за звычайны цыкл for.

Ітэрацыя

Для таго, каб атрымаць найлепшую прадукцыйнасць у ітэрацыі па масіву, лепш выкарыстаць класічны цыкл for.

var list = [1, 2, 3, 4, 5, ...... 100000000];
for(var i = 0, l = list.length; i < l; i++) {
    console.log(list[i]);
}

У вышэйпрыведзеным прыкладзе ёсць яшчэ адзін прыём, з дапамогай якога можна кэшаваць памер масіва: l = list.length.

Негледзячы на тое, што ўласцівасць length вызначана ў самім масіве, пошук гэтай уласцівасці накладвае выдаткі на пошук пры кожнай ітэрацыі цыкла. І хоць новыя рухавікі JavaScript могуць прымяніць аптымізацыю у гэтым выпадку, няма магчымасці дакладна ведаць, ці будзе код выкананы на гэтых новых рухавіках.

Фактычна, адсутнасць кэшавання можа зрабіць выкананне цыкла ў два разы больш марудным, чым з кэшаваным 'length'.

Уласцівасць length

Хоць гэтэр уласцівасці length проста вяртае колькасць элементаў, што знаходзяцца у масіве, сэтэр можа быць выкарыстаны для абразання масіва.

var arr = [1, 2, 3, 4, 5, 6];
arr.length = 3;
arr; // [1, 2, 3]

arr.length = 6;
arr.push(4);
arr; // [1, 2, 3, undefined, undefined, undefined, 4]

Прысвойванне ўласцівасці 'length' меншага значэння абразае масіў. Прысваенне большага значэнне створыць разрэджаны масіў.

У заключэнне

Для лепшай прадукцыйнасці рэкамендуецца заўсёды выкарыстоўваць звычайны цыкл for, і кэшаваць уласціваць length. Выкарыстоўванне for in для ітэрацыі па масіву — прыкмета дрэнна напісанага коду, схільнага да памылак і дрэннай прадукцыйнасці.