[{"data":1,"prerenderedAt":1732},["ShallowReactive",2],{"$fn_8Nh8VAivMa5m58Et_mkBOcQnT2DzWIF3UhxQYdozU":3,"$fMMUdSFktwQFqMVGPrTtt3EC5yheBp7PzwIqznamFcMo":91,"$f1Prj1xEczHja_-L7FyIGgRHd5_cSWHo7r6AE5aheAik":94,"$fc0LoAJgqXDLbKKd2JS_NpM4SuzBK8EycUXINSg09CKU":420,"$fM3ea55k6lKMPOTM84llDB26VSQDVVbxiQuSBFQw9P_c":423,"$fI5fDmvm-5tr9wcH0eHaKZa1j3y_FQIQaHHPqbZxAHJE":667,"mdc--e4jhd3-key":687,"mdc--4dktif-key":705,"mdc-gi9v1c-key":739,"mdc-x3a35q-key":777,"mdc-2gk3y7-key":810,"mdc--vnvame-key":843,"mdc-6ifrc8-key":876,"mdc-j646w-key":990,"mdc-r53ciy-key":1040,"mdc--8ef2te-key":1166,"mdc-f0m9ar-key":1190,"mdc-m53j57-key":1215,"mdc-xp9ky3-key":1443,"mdc--5s1v5p-key":1508,"mdc--tu8cl-key":1532,"mdc-yc9x2z-key":1550,"mdc-p25w7c-key":1695},{"content":4,"quizQuestionContent":60,"type":79,"pageMeta":80},[5,9,13,16,20,23,27,30,34,37,41,44,47,50,54,57],{"id":6,"value":7,"isTypeH1":8},"1940","Что выведет консоль в случае присвоения свойства массиву по строковому индексу?",true,{"id":10,"value":11,"anchor":12,"isTypeH2":8},"4485","Теория: индексы и length","indices-and-length-theory",{"id":14,"value":15,"isTypeParagraph":8},"10319","В JavaScript массив является объектом `Array`, а элементы хранятся как свойства, ключи которых выглядят как индексы (например, `\"0\"`, `\"1\"`, `\"7\"`).  \nСвойство `length` у массива автоматически связано с максимальным индексом: если установить элемент на индексе `k`, то `length` становится как минимум `k + 1`.\n\nЗапись `a[\"7\"] = 3` использует ключ `\"7\"`. Поскольку это строковая форма неотрицательного целого числа, такой ключ трактуется как индекс массива, а не как «обычное» строковое свойство. В результате:\n- появляется элемент на позиции 7,\n- `length` увеличивается до `8`,\n- между старыми элементами (0–2) и новым элементом (7) образуются пустые слоты (3–6).",{"id":17,"description":18,"titleAlert":19,"isTypeAlertWarning":8},"737","Массив в JavaScript не является «ассоциативным массивом»: произвольные строковые ключи могут стать обычными свойствами объекта массива и не участвовать в стандартных обходах элементов. Важно различать ключ `\"7\"` (индекс) и, например, ключ `\"foo\"` (обычное свойство).",null,{"id":21,"value":22,"isTypeParagraph":8},"10320","Схема массива после `a[\"7\"] = 3` (индексы 0..7):\n\n```\n- `0 → 1`\n- `1 → 2`\n- `2 → 4`\n- `3 → (пусто)`\n- `4 → (пусто)`\n- `5 → (пусто)`\n- `6 → (пусто)`\n- `7 → 3`\n```",{"id":24,"value":25,"anchor":26,"isTypeH2":8},"4486","Теория: пустые слоты (holes) и undefined","empty-slots-vs-undefined",{"id":28,"value":29,"isTypeParagraph":8},"10321","«Пустой слот» означает, что элемента на этом индексе не существует как свойства массива. При этом чтение `a[3]` всё равно вернёт `undefined`, потому что чтение несуществующего свойства объекта возвращает `undefined`.\n\nЭто принципиально отличается от ситуации, когда элемент существует и равен `undefined`. Тогда индекс считается «присутствующим», и многие методы обхода массива будут его посещать.\n\nПример отличия пустого слота от явного `undefined`:\n```\nconst x = [];\nx.length = 3;\n\nconsole.log(x);        // [empty × 3]\nconsole.log(x[1]);     // undefined (но элемента нет)\n\nconsole.log(1 in x);   // false (индекса 1 как свойства нет)\n\nconst y = [undefined, undefined, undefined];\nconsole.log(0 in y);   // true (свойство есть, значение undefined)\n```\nЗдесь `x[1]` и `y[1]` оба читаются как `undefined`, но в `x` элемента нет, а в `y` элемент существует и хранит значение `undefined`.",{"id":31,"value":32,"anchor":33,"isTypeH2":8},"4487","Как именно сработает код","how-the-code-behaves",{"id":35,"value":36,"isTypeParagraph":8},"10322","Исходный код:\n```\nconst a = [1, 2, 4];\na[\"7\"] = 3;\n\nconsole.log(a); // Первый\nconsole.log(a.length); // Второй\nconsole.log(a.map((item) => item)); // Третий\na.forEach((item) => console.log(item)); // Четвёртый\n```\n\nРазбор по шагам:\n1. После `const a = [1, 2, 4]` массив имеет индексы 0..2 и `length = 3`.\n2. После `a[\"7\"] = 3` создаётся элемент на индексе 7, а `length` становится `8`. Индексы 3, 4, 5, 6 остаются пустыми слотами (этих свойств нет).\n3. `console.log(a)` показывает разрежённый массив, обычно как `[1, 2, 4, empty × 4, 3]` (где «empty × 4» визуально означает отсутствующие элементы на 3–6).\n4. `console.log(a.length)` печатает `8`.\n5. `a.map((item) => item)` создаёт новый массив той же длины 8, но колбэк вызывается только для существующих элементов (0, 1, 2, 7). Поэтому «дыры» не превращаются в `undefined`, а сохраняются как пустые слоты, и результат выглядит так же разрежённо.\n6. `a.forEach(...)` вызывает колбэк только для существующих элементов (0, 1, 2, 7). Поэтому в консоль попадут только `1`, `2`, `4`, `3`, а пустые слоты пропустятся полностью.\n\nОжидаемый смысл вывода:\n- Первый: `[1, 2, 4, empty × 4, 3]`\n- Второй: `8`\n- Третий: `[1, 2, 4, empty × 4, 3]`\n- Четвёртый: `1`, `2`, `4`, `3`",{"id":38,"value":39,"anchor":40,"isTypeH2":8},"4488","Почему map и forEach пропускают «дыры»","why-map-and-foreach-skip-holes",{"id":42,"value":43,"isTypeParagraph":8},"10323","Итеративные методы массива (включая `map` и `forEach`) работают не как «цикл от 0 до length-1 с чтением a[i]», а как обход существующих индексов. Поэтому для пустых слотов колбэк не вызывается вообще.\n\nСледствия:\n- `map` не имеет возможности «подставить значение» для дыр, потому что для дыр колбэк не запускается; в новом массиве дырки сохраняются.\n- `forEach` не печатает `undefined` для дыр, потому что обход не доходит до отсутствующих элементов.",{"id":45,"description":46,"titleAlert":19,"isTypeAlertInfo":8},"678","Если требуется именно пройтись по всем индексам от 0 до `length - 1` (включая пустые слоты) и получить `undefined` при чтении отсутствующих элементов, то обычно применяется обычный цикл по индексу.",{"id":48,"value":49,"isTypeParagraph":8},"10324","Пример обхода всех индексов, включая пустые слоты:\n```\nfor (let i = 0; i \u003C a.length; i++) {\n  console.log(i, a[i]); // для дыр будет выводиться undefined, но индекс будет выведен\n}\n```",{"id":51,"value":52,"anchor":53,"isTypeH2":8},"4489","Таблица ожидаемого результата","expected-results-table",{"id":55,"value":56,"isTypeParagraph":8},"10325","| Операция | Длина/количество | Что происходит с «дырами» 3..6 | Что видно в выводе |\n|---|---:|---|---|\n| `console.log(a)` | длина 8 | Дыры существуют | Обычно показываются как empty/hole |\n| `console.log(a.length)` | 8 | Дыры существуют | Печатается число 8 |\n| `a.map(item => item)` | длина 8 | Дыры сохраняются | Результат тоже разрежённый |\n| `a.forEach(...)` | 4 вызова колбэка | Дыры пропускаются | Печатается 1, 2, 4, 3 |",{"id":58,"value":59,"isTypeParagraph":8},"10326","Кратко: присваивание `a[\"7\"] = 3` создаёт элемент с индексом 7 и увеличивает `length` до 8, оставляя индексы 3–6 пустыми слотами; `map` сохраняет пустые слоты, а `forEach` пропускает их и выводит только существующие элементы.",{"id":61,"options":62,"hint":76,"solution":77,"description":78},"1169",[63,66,70,73],{"id":64,"label":65,"isCorrect":8},"4820","Первый: `[1, 2, 4, empty × 4, 3]`. Второй: `8`. Третий: `[1, 2, 4, empty × 4, 3]`, Четвёртый: `1, 2, 4, 3`",{"id":67,"label":68,"isCorrect":69},"4821","Первый: `[1, 2, 4, 3]`. Второй: `4`. Третий: `[1, 2, 4, 3]`, Четвёртый: `1, 2, 4, 3`",false,{"id":71,"label":72,"isCorrect":69},"4822","Первый: `[1, 2, 4, undefined, undefined, undefined, undefined, 3]`. Второй: `8`. Третий: `[1, 2, 4, undefined, undefined, undefined, undefined, 3]`, Четвёртый: `1, 2, 4, undefined, undefined, undefined, undefined, 3`",{"id":74,"label":75,"isCorrect":69},"4823","`Ошибка TypeError`","Cледует проверить, считается ли ключ индексом массива (строка вида `\"7\"`), и помнить, что разрежённость означает отсутствие элементов как свойств, из-за чего `map` и `forEach` не вызывают колбэк для пустых слотов.","**Правильный вариант: 1** — вывод в консоли покажет разрежённый массив с четырьмя пустыми слотами, `a.length` станет `8`, `map` сохранит пустые слоты, а `forEach` выведет только существующие элементы: `1, 2, 4, 3`.","Дан код:\n\n```\nconst a = [1, 2, 4];\na[\"7\"] = 3;\n\nconsole.log(a); // Первый\nconsole.log(a.length); // Второй\nconsole.log(a.map((item) => item)); // Третий\na.forEach((item) => console.log(item)); // Четвёртый\n```\n\nЧто выведетcя в ```console.log```-ах?","quizQuestion",{"title":81,"description":82,"ogTitle":83,"ogDescription":82,"ogImageUrl":84,"canonical":19,"ogLocale":85,"ogSiteName":86,"ogImageType":87,"ogImageWidth":88,"ogImageHeight":89,"ogType":90,"ogUrl":19},"Присвоение свойства массиву по строковому индексу","Почему a[\"7\"]=3 создаёт «дыры», как меняется length и почему map/forEach пропускают пустые слоты","Разрежённый массив JS: индексы, length, map и forEach","/og-image.png","ru_RU","goodwebjob.ru","image_jpeg","1200","630","article",{"siteName":92,"siteUrl":93},"GOOD WEB JOB!","https://goodwebjob.ru",{"slugs":95},[96,99,102,105,108,111,114,117,120,123,126,129,132,135,138,141,144,147,150,153,156,159,162,165,168,171,174,177,180,183,186,189,192,195,198,201,204,207,210,213,216,219,222,225,228,231,234,237,240,243,246,249,252,255,258,261,264,267,270,273,276,279,282,285,288,291,294,297,300,303,306,309,312,315,318,321,324,327,330,333,336,339,342,345,348,351,354,357,360,363,366,369,372,375,378,381,384,387,390,393,396,399,402,405,408,411,414,417],{"name":97,"value":98},"Теоретические задания","theoretical-tasks",{"name":100,"value":101},"Что вернёт этот код: typeof (function(){})()","what-this-code-will-return-typeof-function",{"name":103,"value":104},"С чего начать?","where-to-begin",{"name":106,"value":107},"Почему опасно писать прямо в прототипы базовых типов?","why-is-it-dangerous-to-write-directly-to-the-prototypes-of-basic-types",{"name":109,"value":110},"Backend","backend",{"name":112,"value":113},"Frontend","frontend",{"name":115,"value":116},"Какие логические значения в console.log будут получены?","prototype-what-logical-values-will-be-received-in-console-log",{"name":118,"value":119},"Нечётные числа должны отсортироваться по возрастанию, а чётные должны остаться на своих местах","odd-numbers-should-be-sorted-in-ascending-order-and-even-numbers-should-remain-in-their-original-positions",{"name":121,"value":122}," Найти в массиве неповторяющиеся числа","find-non-repeating-numbers-in-an-array",{"name":124,"value":125},"arr.push(0) повлияет на массив так же, как если бы мы выполнили...","arr-push-0-will-affect-the-array-in-the-same-way-as-if-we-performed",{"name":127,"value":128},"Дана строка: 'one.two.three.four.five'. Необходимо из строки сделать вложенный объект","the-string-one-two-three-four-five-is-given-it-is-necessary-to-make-a-nested-object-out-of-the-string",{"name":130,"value":131},"Реализовать функцию, похоже как в Jquery","implement-a-function-similar-to-jquery",{"name":133,"value":134},"Для каждого вложенного объекта нужно добавить свойство level, которое равняется числу - номер вложенности","for-each-nested-object-you-need-to-add-the-level-property-which-is-equal-to-a-number-the-nesting-number",{"name":136,"value":137},"Какое значение выведет консоль с object.property?","what-value-will-the-console-output-with-object-property",{"name":139,"value":140},"Что выведется в console.log([arr[0](), arr[0]()])?","what-will-be-displayed-in-console-log-arr-0-arr-0",{"name":142,"value":143},"Вернуть массив от 1 до n, где числа, кратные 3, заменены на 'fizz', кратные 5 - на 'buzz', а кратные и 3, и 5 одновременно - на 'fizzbuzz'","returns-an-array-from-1-to-n-replacing-numbers-that-are-multiples-of-3-with-fizz-numbers-that-are-multiples-of-5-with-buzz-and-numbers-that-are-multiples-of-both-3-and-5-with-fizzbuzz",{"name":145,"value":146},"Необходимо проверить, являются ли две строки анаграммами друг друга","checks-whether-two-strings-are-anagrams-of-each-other",{"name":148,"value":149},"Определить, является ли слово палиндромом","determines-whether-a-word-is-a-palindrome",{"name":151,"value":152},"Есть массив, в котором лежат объекты с датами, необходимо отсортировать даты по возрастанию","there-is-an-array-containing-objects-with-dates-that-need-to-be-sorted-by-date",{"name":154,"value":155},"Реализовать функцию, принимающую аргументы \"*\", \"1\", \"b\", \"1c\" и возвращающую строку \"1*b*1c\"","implement-a-function-that-accepts-arguments-1-b-1c-and-the-return-string-1-b-1c",{"name":157,"value":158},"Дано дерево (вложенный объект), надо найти сумму всех вершин","given-a-tree-nested-object-it-is-necessary-to-find-the-sum-of-all-vertices",{"name":160,"value":161},"Для каждой ветви дерева записать номер вложенности данной ветви","for-each-branch-of-the-tree-write-down-the-nesting-number-of-this-branch",{"name":163,"value":164},"Есть слова в массиве, необходимо определить, состоят ли они из одних и тех же букв","there-are-words-in-the-array-it-is-necessary-to-determine-whether-they-consist-of-the-same-letters",{"name":166,"value":167},"Числа от 1 до 100 находятся в массиве, они хаотично перемешанные, но в нём не хватает одного числа из этой последовательности. Необходимо найти его","the-numbers-from-1-to-100-are-in-the-array-they-are-randomly-mixed-but-it-lacks-one-number-from-this-sequence-it-is-necessary-to-find-him",{"name":169,"value":170},"Есть строка, состоящая из разных скобок, необходимо проверить, закрыты ли все","there-is-a-string-consisting-of-different-brackets-it-is-necessary-to-check-whether-all-are-closed",{"name":172,"value":173},"Напишите функцию, который сделает из массива объект","write-a-function-that-will-make-an-object-out-of-an-array",{"name":175,"value":176},"Что выведет console.log в результате выполнения цикла while?","what-will-console-log-output-as-a-result-of-executing-the-while-loop",{"name":178,"value":179},"Есть функция и объект. Напишите все известные вам способы, чтобы вывести в консоли значение x из объекта, используя функцию","there-is-a-function-and-an-object-write-all-the-ways-you-know-to-output-the-value-of-x-from-an-object-in-the-console-using-the-function",{"name":181,"value":182},"Что выведет консоль в случае присвоения свойства массиву по строковому отрицательному индексу?","what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-negative-string-index",{"name":184,"value":185},"Что выведет консоль в случае удаления элемента массива с помощью оператора delete?","what-will-the-console-output-if-an-array-element-is-deleted-using-the-delete-operator",{"name":187,"value":188},"Уникализация значений в массиве","unifying-values-in-an-array",{"name":190,"value":191},"«Расплющивание» массива","flattening-the-array",{"name":193,"value":194},"Что вернёт метод book.getUpperName()?","what-will-the-book-get-upper-name-method-return",{"name":196,"value":197},"Сжатие строк","string-compression",{"name":199,"value":200},"Что выведет консоль в случае присвоения свойства массиву по строковому положительному индексу?","what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-positive-string-index",{"name":202,"value":203},"Что получится в результате передачи объекта как аргумента в функцию и выполнения кода?","what-will-happen-when-an-object-is-passed-as-an-argument-to-a-function-and-the-code-is-executed",{"name":205,"value":206},"Как браузер после ввода домена понимает, откуда брать сайт?","how-does-the-browser-know-where-to-get-the-website-after-entering-the-domain",{"name":208,"value":209},"Как домен попадает в DNS в таблицу соответствия: домен – ip","how-does-a-domain-get-into-the-dns-mapping-table-domain-ip",{"name":211,"value":212},"Как браузер решает, какое соединение ему открывать, TCP или UDP?","how-does-a-browser-decide-whether-to-open-a-tcp-or-udp-connection",{"name":214,"value":215},"Ключевые отличия TCP и UDP","key-differences-between-tcp-and-udp",{"name":217,"value":218},"\"TCP/IP\" - кем является TCP, а кем IP в данном случае?","tcp-ip-who-is-tcp-and-who-is-ip-in-this-case",{"name":220,"value":221},"Что такое HTTP и из чего состоит?","what-is-http-and-what-does-it-consist-of",{"name":223,"value":224},"Что такое заголовки в HTTP и зачем они нужны?","what-are-http-headers-and-why-do-we-need-them",{"name":226,"value":227},"Что такое параметры в HTTP?","what-are-http-parameters",{"name":229,"value":230},"Где находится HTML-код в структуре HTTP-ответа?","where-is-the-html-code-located-in-the-http-response-structure",{"name":232,"value":233},"Что такое HTML?","what-is-html",{"name":235,"value":236},"Чем отличаются 1.0, 1.1, 2.0, 3.0 версии HTTP?","what-are-the-differences-between-http-versions-1-0-1-1-2-0-and-3-0",{"name":238,"value":239},"Пользователь авторизован на сайте. Как сервер узнает об этом с последующими другими заходами, что «я – авторизованный пользователь»?","the-user-is-logged-in-on-the-website-how-does-the-server-know-that-i-am-an-authorized-user-when-the-user-logs-in-again",{"name":241,"value":242},"Что такое cookie?","what-is-a-cookie",{"name":244,"value":245},"Кто является инициатором записи cookie в браузере?","who-initiates-the-cookie-recording-in-the-browser",{"name":247,"value":248},"Есть ли возможность с клиента (с браузера) управлять cookie?","is-it-possible-to-manage-cookies-from-the-client-browser",{"name":250,"value":251},"Лайвкодинг","livecoding",{"name":253,"value":254},"Что вернёт следующий код? Object.create(null).hasOwnProperty('toString')","what-will-the-following-code-return-object-create-null-has-own-property-to-string",{"name":256,"value":257},"Всё, что идет по HTTPS – оно защищено?","is-everything-that-goes-through-https-secure",{"name":259,"value":260},"Все данные зашифрованы, используется https. Хакер взламывает dns и делает подмену одного ip на другой, на фишинговый сайт. В этом случае, злоумышленник может получить данные (логин \\ пароль)?","all-data-is-encrypted-https-is-used-let-s-assume-a-hacker-hacks-the-dns-and-makes-a-substitution-of-one-ip-for-another-a-phishing-site",{"name":262,"value":263},"Есть веб-приложение. Помимо HTTP, какие протоколы того же уровня (Application Layer) можно дополнительно использовать в веб-приложении в браузере?","there-is-a-web-application-in-addition-to-http-what-other-protocols-of-the-same-level-application-layer-can-be-used-in-the-web-application-in-browser",{"name":265,"value":266},"Как браузер парсит JavaScript и изображения при рендеринге?","how-the-browser-parses-javascript-and-images-when-rendering",{"name":268,"value":269},"Что происходит, когда HTTP прислал HTML? Что браузер дальше делает c HTML с учетом того, что она валидная?","what-happens-when-http-sends-html-what-does-the-browser-do-with-this-html-given-that-it-is-valid",{"name":271,"value":272},"Что в браузере блокирует рендеринг страницы?","what-is-blocking-the-page-rendering-in-the-browser",{"name":274,"value":275},"Что такое DOM в браузере? Что такое CSSOM?","what-is-dom-in-a-browser-what-is-cssom",{"name":277,"value":278},"Что является узлами в DOM?","what-are-nodes-in-the-dom",{"name":280,"value":281},"Из чего состоит CSSOM?","what-does-cssom-consist-of",{"name":283,"value":284},"Дан HTML-код. Какой будет цвет у текста «Some dummy text»?","the-html-code-is-given-what-will-be-the-color-of-the-some-dummy-text",{"name":286,"value":287},"Есть шаблон HTML и CSS кода. Какой будет цвет у текста «Таким образом, постоянное»?","there-is-a-template-for-html-and-css-code-what-color-will-the-text-thus-constant-have",{"name":289,"value":290},"Есть шаблон вложенного HTML кода. Какой будет цвет у текста «One more dummy text»?","there-is-a-template-for-embedded-html-code-what-will-be-the-color-of-the-one-more-dummy-text",{"name":292,"value":293},"Есть шаблон вложенного HTML кода. Будет ли display:block у body влиять на span?","there-is-a-template-for-embedded-html-code-will-there-be-a-display-does-bodys-block-affect-span",{"name":295,"value":296},"Есть HTML код. Будет ли font-weight на span влиять?","there-is-an-html-code-will-font-weight-affect-span",{"name":298,"value":299},"Flexbox и Grid, чем отличаются друг от друга?","what-are-the-differences-between-flexbox-and-grid",{"name":301,"value":302},"Заменяют ли Flexbox и Grid друг друга?","do-flexbox-and-grid-replace-each-other",{"name":304,"value":305},"Есть CSS и JS анимация. Какая между ними разница, что быстрее, что более удобно?","there-are-css-and-js-animations-what-is-the-difference-between-them-and-which-is-faster-and-more-convenient",{"name":307,"value":308},"Сборник задач","tasks",{"name":310,"value":311},"Какие способы объявления функции есть в JavaScript?","what-are-the-ways-to-declare-a-function-in-javascript",{"name":313,"value":314},"Что такое this в JavaScript?","what-is-this-in-javascript",{"name":316,"value":317},"Что такое Event Loop, как работает?","what-is-an-event-loop-and-how-does-it-work",{"name":319,"value":320},"Что будет, если вызвать typeof на необъявленной переменной?","what-happens-if-you-call-typeof-on-an-undeclared-variable",{"name":322,"value":323},"Что показывает оператор typeof в JavaScript?","what-does-the-typeof-operator-show-in-javascript",{"name":325,"value":326},"Какие типы данных существует в JavaScript?","what-types-of-data-exist-in-javascript",{"name":328,"value":329},"Какую структуру использовать для хранения упорядоченного списка строк в JavaScript?","what-is-the-best-structure-to-use-for-storing-an-ordered-list-of-strings-in-javascript",{"name":331,"value":332},"Что вернет typeof для массива?","what-will-typeof-return-for-an-array",{"name":334,"value":335},"Почему оператор typeof, применённый к массиву, возвращает объект?","why-does-the-typeof-operator-applied-to-an-array-return-an-object",{"name":337,"value":338},"Если нужно хранить список уникальных строк, какую структуру данных выбрать?","if-you-need-to-store-a-list-of-unique-strings-which-data-structure-should-i-choose",{"name":340,"value":341},"Что возвращает typeof для new Set в JavaScript?","what-does-typeof-return-for-new-set-in-javascript",{"name":343,"value":344},"Для чего нужен React, какие он решает проблемы?","what-is-react-used-for-and-what-problems-does-it-solve",{"name":346,"value":347},"Если убрать в React VDOM/Fiber, и вручную изменять DOM, разве это не оптимально?","if-you-remove-the-vdom-fiber-in-react-and-manually-change-the-dom-isn-t-that-optimal",{"name":349,"value":350},"Есть блок кода. Что в реальном DOM изменится после нажатия на кнопку?","there-is-a-block-of-code-what-changes-in-the-real-dom-after-clicking-the-button",{"name":352,"value":353},"Есть код, в котором список и кнопка. Что в реальном DOM изменится после нажатия на кнопку?","there-is-a-code-in-which-there-is-a-list-and-a-button-what-will-change-in-the-real-dom-after-clicking-on-the-button",{"name":355,"value":356},"Зачем нужен Redux (Mobx/Effector)? Зачем нужен менеджер состояния? Какие проблемы решает?","why-do-we-need-redux-mobx-effector-why-do-we-need-a-state-manager-what-problems-does-it-solve",{"name":358,"value":359},"Как диагностировать и исправить нежелательное изменение цвета фона по клику на кнопку, если исходный код сайта запутан и недоступен для прямого чтения?","how-can-diagnose-and-fix-unwanted-background-color-changes-when-clicking-on-a-button-if-the-source-code-of-the-site-is-confusing-and-inaccessible-to-direct-reading",{"name":361,"value":362},"Разрабатывал, взял закоммитил, запушил. Оказалось, что запушил не в ту ветку, точнее, коммит не в ту ветку. Какие действия?","developed-it-committed-it-and-launched-it-it-turned-out-that-i-had-pushed-it-to-the-wrong-branch-or-rather-the-commit-was-in-the-wrong-branch-what-actions",{"name":364,"value":365},"В git есть несколько вариантов слияния веток, какие? Чем отличаются?","git-has-several-options-for-merging-branches-which-ones-how-are-they-different",{"name":367,"value":368},"Какие существуют стратегии ветвления для работы команды? Что это такое?","what-are-the-branching-strategies-for-the-team-what-is-it",{"name":370,"value":371},"По каким характеристикам, ревьюер понимает, что данный код - хороший, а этот код - плохой?","how-does-a-reviewer-know-which-code-is-good-and-which-code-is-bad",{"name":373,"value":374},"Дан фрагмент bash-скрипта: cd ~; mkdir foo... Что в нем происходит?","here-is-a-fragment-of-a-bash-script-cd-mkdir-foo-what-is-happening-in-this-script",{"name":376,"value":377},"Дан фрагмент bash-скрипта: target=$(ps -Af | grep $1 | head -n 1)...","here-is-a-fragment-of-a-bash-script-target-ps-af-grep-1-head-n-1",{"name":379,"value":380},"Что такое алгоритмическая сложность?","what-is-algorithmic-complexity",{"name":382,"value":383},"Какая алгоритмическая сложность у \"быстрой сортировки\"?","what-is-the-algorithmic-complexity-of-quick-sort",{"name":385,"value":386},"Почему в JavaScript два объекта с одинаковым содержимым при сравнении возвращают false?","why-do-two-objects-with-the-same-content-return-false-when-compared-in-javascript",{"name":388,"value":389},"Каким способом может выполняться авторизация пользователя на сайте?","how-can-a-user-be-authorized-on-a-website",{"name":391,"value":392},"В чем разница между микро- и макро-тасками в JavaScript?","what-is-the-difference-between-micro-and-macro-tasks-in-javascript",{"name":394,"value":395},"В комнате три человека. Какова вероятность того, что хотя бы двое из них одного пола? То есть два и более.","there-are-three-people-in-the-room-what-is-the-probability-that-at-least-two-of-them-are-of-the-same-sex-that-is-two-or-more",{"name":397,"value":398},"Есть монета. Ее подбрасывают пять раз подряд. Каждый раз записывается, что выпало - орел или решка. Сколько разных последовательностей орлов и решек может при этом получиться?","there-is-a-coin-it-is-tossed-five-times-in-a-row-each-time-it-is-recorded-whether-it-lands-on-heads-or-tails-how-many-different-sequences-of-heads-and-tails-can-be-obtained",{"name":400,"value":401},"Как гарантированно найти лёгкую фальшивую монету среди 8 за минимальное число взвешиваний на чашечных весах?","how-can-you-guarantee-to-find-an-easy-fake-coin-among-8-in-the-minimum-number-of-weighings-on-a-balance-scale",{"name":403,"value":404},"Подготовка к тех.интервью","technical-interview",{"name":406,"value":407},"Верно ли утверждение, что злоумышленник, контролирующий роутер и прослушивающий трафик, может получить логины и пароли от сайтов, на которые заходит клиент?","is-it-true-that-an-attacker-who-controls-a-router-and-listens-to-traffic-can-obtain-logins-and-passwords-from-websites-that-a-client-visits",{"name":409,"value":410},"Что такое DNS, как DNS находит нужный IP-адрес?","what-is-dns-and-how-does-dns-find-the-correct-ip-address",{"name":412,"value":413},"Переменные объявлены следующим образом: a=3; b=«hello»;. Укажите правильное утверждение","variables-are-declared-as-follows-specify-the-correct-statement",{"name":415,"value":416},"Какой механизм лежит в основе оптимизации обновлений DOM в React?","what-is-the-underlying-mechanism-for-optimizing-dom-updates-in-react",{"name":418,"value":419},"Что мешает организовать централизованное состояние без менеджера состояния? Если организовать состояние механизмами реакта: контекстом, стейтом, в чем проблема? Что менеджеры состояния привносят?","what-prevents-you-from-organizing-a-centralized-state-without-a-state-manager-if-you-organize-the-state-using-react-context-and-state-mechanisms-what-is-the-problem-what-do-state-managers-add",[421],{"label":403,"slug":404,"to":422},"/technical-interview/where-to-begin",{"navigationList":424,"navigationSublist":430},[425,427],{"path":422,"isActive":69,"name":103,"icon":426,"isNavbarMobileDisabled":8},"material-symbols:visibility-outline-rounded",{"path":428,"isActive":8,"name":307,"icon":429,"isNavbarMobileDisabled":69},"/technical-interview/tasks","material-symbols:task-outline",[431,438,457,466,471,566,583,590,595,638,653,658],{"title":432,"list":433,"isOpened":69},"Bash",[434,436],{"name":373,"path":435,"isActive":69},"/technical-interview/tasks/here-is-a-fragment-of-a-bash-script-cd-mkdir-foo-what-is-happening-in-this-script",{"name":376,"path":437,"isActive":69},"/technical-interview/tasks/here-is-a-fragment-of-a-bash-script-target-ps-af-grep-1-head-n-1",{"title":439,"list":440,"isOpened":69},"CSS",[441,443,445,447,449,451,453,455],{"name":283,"path":442,"isActive":69},"/technical-interview/tasks/the-html-code-is-given-what-will-be-the-color-of-the-some-dummy-text",{"name":286,"path":444,"isActive":69},"/technical-interview/tasks/there-is-a-template-for-html-and-css-code-what-color-will-the-text-thus-constant-have",{"name":289,"path":446,"isActive":69},"/technical-interview/tasks/there-is-a-template-for-embedded-html-code-what-will-be-the-color-of-the-one-more-dummy-text",{"name":292,"path":448,"isActive":69},"/technical-interview/tasks/there-is-a-template-for-embedded-html-code-will-there-be-a-display-does-bodys-block-affect-span",{"name":295,"path":450,"isActive":69},"/technical-interview/tasks/there-is-an-html-code-will-font-weight-affect-span",{"name":298,"path":452,"isActive":69},"/technical-interview/tasks/what-are-the-differences-between-flexbox-and-grid",{"name":301,"path":454,"isActive":69},"/technical-interview/tasks/do-flexbox-and-grid-replace-each-other",{"name":304,"path":456,"isActive":69},"/technical-interview/tasks/there-are-css-and-js-animations-what-is-the-difference-between-them-and-which-is-faster-and-more-convenient",{"title":458,"list":459,"isOpened":69},"Git",[460,462,464],{"name":361,"path":461,"isActive":69},"/technical-interview/tasks/developed-it-committed-it-and-launched-it-it-turned-out-that-i-had-pushed-it-to-the-wrong-branch-or-rather-the-commit-was-in-the-wrong-branch-what-actions",{"name":364,"path":463,"isActive":69},"/technical-interview/tasks/git-has-several-options-for-merging-branches-which-ones-how-are-they-different",{"name":367,"path":465,"isActive":69},"/technical-interview/tasks/what-are-the-branching-strategies-for-the-team-what-is-it",{"title":467,"list":468,"isOpened":69},"HTML",[469],{"name":232,"path":470,"isActive":69},"/technical-interview/tasks/what-is-html",{"title":472,"list":473,"isOpened":69},"JavaScript",[474,476,478,480,482,484,486,488,490,492,494,496,498,500,502,504,506,508,510,512,514,516,518,520,522,524,526,528,530,532,534,536,538,540,542,544,546,548,550,552,554,556,558,560,562,564],{"name":115,"path":475,"isActive":69},"/technical-interview/tasks/prototype-what-logical-values-will-be-received-in-console-log",{"name":106,"path":477,"isActive":69},"/technical-interview/tasks/why-is-it-dangerous-to-write-directly-to-the-prototypes-of-basic-types",{"name":253,"path":479,"isActive":69},"/technical-interview/tasks/what-will-the-following-code-return-object-create-null-has-own-property-to-string",{"name":136,"path":481,"isActive":69},"/technical-interview/tasks/what-value-will-the-console-output-with-object-property",{"name":139,"path":483,"isActive":69},"/technical-interview/tasks/what-will-be-displayed-in-console-log-arr-0-arr-0",{"name":175,"path":485,"isActive":69},"/technical-interview/tasks/what-will-console-log-output-as-a-result-of-executing-the-while-loop",{"name":178,"path":487,"isActive":69},"/technical-interview/tasks/there-is-a-function-and-an-object-write-all-the-ways-you-know-to-output-the-value-of-x-from-an-object-in-the-console-using-the-function",{"name":193,"path":489,"isActive":69},"/technical-interview/tasks/what-will-the-book-get-upper-name-method-return",{"name":412,"path":491,"isActive":69},"/technical-interview/tasks/variables-are-declared-as-follows-specify-the-correct-statement",{"name":199,"path":493,"isActive":69},"/technical-interview/tasks/what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-positive-string-index",{"name":181,"path":495,"isActive":69},"/technical-interview/tasks/what-will-the-console-display-if-a-property-is-assigned-to-an-array-using-a-negative-string-index",{"name":184,"path":497,"isActive":69},"/technical-interview/tasks/what-will-the-console-output-if-an-array-element-is-deleted-using-the-delete-operator",{"name":100,"path":499,"isActive":69},"/technical-interview/tasks/what-this-code-will-return-typeof-function",{"name":202,"path":501,"isActive":69},"/technical-interview/tasks/what-will-happen-when-an-object-is-passed-as-an-argument-to-a-function-and-the-code-is-executed",{"name":310,"path":503,"isActive":69},"/technical-interview/tasks/what-are-the-ways-to-declare-a-function-in-javascript",{"name":313,"path":505,"isActive":69},"/technical-interview/tasks/what-is-this-in-javascript",{"name":316,"path":507,"isActive":69},"/technical-interview/tasks/what-is-an-event-loop-and-how-does-it-work",{"name":319,"path":509,"isActive":69},"/technical-interview/tasks/what-happens-if-you-call-typeof-on-an-undeclared-variable",{"name":322,"path":511,"isActive":69},"/technical-interview/tasks/what-does-the-typeof-operator-show-in-javascript",{"name":325,"path":513,"isActive":69},"/technical-interview/tasks/what-types-of-data-exist-in-javascript",{"name":328,"path":515,"isActive":69},"/technical-interview/tasks/what-is-the-best-structure-to-use-for-storing-an-ordered-list-of-strings-in-javascript",{"name":331,"path":517,"isActive":69},"/technical-interview/tasks/what-will-typeof-return-for-an-array",{"name":334,"path":519,"isActive":69},"/technical-interview/tasks/why-does-the-typeof-operator-applied-to-an-array-return-an-object",{"name":337,"path":521,"isActive":69},"/technical-interview/tasks/if-you-need-to-store-a-list-of-unique-strings-which-data-structure-should-i-choose",{"name":340,"path":523,"isActive":69},"/technical-interview/tasks/what-does-typeof-return-for-new-set-in-javascript",{"name":385,"path":525,"isActive":69},"/technical-interview/tasks/why-do-two-objects-with-the-same-content-return-false-when-compared-in-javascript",{"name":391,"path":527,"isActive":69},"/technical-interview/tasks/what-is-the-difference-between-micro-and-macro-tasks-in-javascript",{"name":124,"path":529,"isActive":69},"/technical-interview/tasks/arr-push-0-will-affect-the-array-in-the-same-way-as-if-we-performed",{"name":142,"path":531,"isActive":69},"/technical-interview/tasks/returns-an-array-from-1-to-n-replacing-numbers-that-are-multiples-of-3-with-fizz-numbers-that-are-multiples-of-5-with-buzz-and-numbers-that-are-multiples-of-both-3-and-5-with-fizzbuzz",{"name":127,"path":533,"isActive":69},"/technical-interview/tasks/the-string-one-two-three-four-five-is-given-it-is-necessary-to-make-a-nested-object-out-of-the-string",{"name":157,"path":535,"isActive":69},"/technical-interview/tasks/given-a-tree-nested-object-it-is-necessary-to-find-the-sum-of-all-vertices",{"name":133,"path":537,"isActive":69},"/technical-interview/tasks/for-each-nested-object-you-need-to-add-the-level-property-which-is-equal-to-a-number-the-nesting-number",{"name":160,"path":539,"isActive":69},"/technical-interview/tasks/for-each-branch-of-the-tree-write-down-the-nesting-number-of-this-branch",{"name":151,"path":541,"isActive":69},"/technical-interview/tasks/there-is-an-array-containing-objects-with-dates-that-need-to-be-sorted-by-date",{"name":163,"path":543,"isActive":69},"/technical-interview/tasks/there-are-words-in-the-array-it-is-necessary-to-determine-whether-they-consist-of-the-same-letters",{"name":169,"path":545,"isActive":69},"/technical-interview/tasks/there-is-a-string-consisting-of-different-brackets-it-is-necessary-to-check-whether-all-are-closed",{"name":121,"path":547,"isActive":69},"/technical-interview/tasks/find-non-repeating-numbers-in-an-array",{"name":172,"path":549,"isActive":69},"/technical-interview/tasks/write-a-function-that-will-make-an-object-out-of-an-array",{"name":145,"path":551,"isActive":69},"/technical-interview/tasks/checks-whether-two-strings-are-anagrams-of-each-other",{"name":118,"path":553,"isActive":69},"/technical-interview/tasks/odd-numbers-should-be-sorted-in-ascending-order-and-even-numbers-should-remain-in-their-original-positions",{"name":148,"path":555,"isActive":69},"/technical-interview/tasks/determines-whether-a-word-is-a-palindrome",{"name":190,"path":557,"isActive":69},"/technical-interview/tasks/flattening-the-array",{"name":154,"path":559,"isActive":69},"/technical-interview/tasks/implement-a-function-that-accepts-arguments-1-b-1c-and-the-return-string-1-b-1c",{"name":196,"path":561,"isActive":69},"/technical-interview/tasks/string-compression",{"name":187,"path":563,"isActive":69},"/technical-interview/tasks/unifying-values-in-an-array",{"name":166,"path":565,"isActive":69},"/technical-interview/tasks/the-numbers-from-1-to-100-are-in-the-array-they-are-randomly-mixed-but-it-lacks-one-number-from-this-sequence-it-is-necessary-to-find-him",{"title":567,"list":568,"isOpened":69},"React",[569,571,573,575,577,579,581],{"name":343,"path":570,"isActive":69},"/technical-interview/tasks/what-is-react-used-for-and-what-problems-does-it-solve",{"name":415,"path":572,"isActive":69},"/technical-interview/tasks/what-is-the-underlying-mechanism-for-optimizing-dom-updates-in-react",{"name":346,"path":574,"isActive":69},"/technical-interview/tasks/if-you-remove-the-vdom-fiber-in-react-and-manually-change-the-dom-isn-t-that-optimal",{"name":349,"path":576,"isActive":69},"/technical-interview/tasks/there-is-a-block-of-code-what-changes-in-the-real-dom-after-clicking-the-button",{"name":352,"path":578,"isActive":69},"/technical-interview/tasks/there-is-a-code-in-which-there-is-a-list-and-a-button-what-will-change-in-the-real-dom-after-clicking-on-the-button",{"name":355,"path":580,"isActive":69},"/technical-interview/tasks/why-do-we-need-redux-mobx-effector-why-do-we-need-a-state-manager-what-problems-does-it-solve",{"name":418,"path":582,"isActive":69},"/technical-interview/tasks/what-prevents-you-from-organizing-a-centralized-state-without-a-state-manager-if-you-organize-the-state-using-react-context-and-state-mechanisms-what-is-the-problem-what-do-state-managers-add",{"title":584,"list":585,"isOpened":69},"Алгоритмы",[586,588],{"name":379,"path":587,"isActive":69},"/technical-interview/tasks/what-is-algorithmic-complexity",{"name":382,"path":589,"isActive":69},"/technical-interview/tasks/what-is-the-algorithmic-complexity-of-quick-sort",{"title":591,"list":592,"isOpened":69},"Дебаггинг",[593],{"name":358,"path":594,"isActive":69},"/technical-interview/tasks/how-can-diagnose-and-fix-unwanted-background-color-changes-when-clicking-on-a-button-if-the-source-code-of-the-site-is-confusing-and-inaccessible-to-direct-reading",{"title":596,"list":597,"isOpened":69},"Компьютерные сети",[598,600,602,604,606,608,610,612,614,616,618,620,622,624,626,628,630,632,634,636],{"name":205,"path":599,"isActive":69},"/technical-interview/tasks/how-does-the-browser-know-where-to-get-the-website-after-entering-the-domain",{"name":409,"path":601,"isActive":69},"/technical-interview/tasks/what-is-dns-and-how-does-dns-find-the-correct-ip-address",{"name":208,"path":603,"isActive":69},"/technical-interview/tasks/how-does-a-domain-get-into-the-dns-mapping-table-domain-ip",{"name":211,"path":605,"isActive":69},"/technical-interview/tasks/how-does-a-browser-decide-whether-to-open-a-tcp-or-udp-connection",{"name":214,"path":607,"isActive":69},"/technical-interview/tasks/key-differences-between-tcp-and-udp",{"name":217,"path":609,"isActive":69},"/technical-interview/tasks/tcp-ip-who-is-tcp-and-who-is-ip-in-this-case",{"name":220,"path":611,"isActive":69},"/technical-interview/tasks/what-is-http-and-what-does-it-consist-of",{"name":223,"path":613,"isActive":69},"/technical-interview/tasks/what-are-http-headers-and-why-do-we-need-them",{"name":226,"path":615,"isActive":69},"/technical-interview/tasks/what-are-http-parameters",{"name":229,"path":617,"isActive":69},"/technical-interview/tasks/where-is-the-html-code-located-in-the-http-response-structure",{"name":235,"path":619,"isActive":69},"/technical-interview/tasks/what-are-the-differences-between-http-versions-1-0-1-1-2-0-and-3-0",{"name":238,"path":621,"isActive":69},"/technical-interview/tasks/the-user-is-logged-in-on-the-website-how-does-the-server-know-that-i-am-an-authorized-user-when-the-user-logs-in-again",{"name":241,"path":623,"isActive":69},"/technical-interview/tasks/what-is-a-cookie",{"name":244,"path":625,"isActive":69},"/technical-interview/tasks/who-initiates-the-cookie-recording-in-the-browser",{"name":247,"path":627,"isActive":69},"/technical-interview/tasks/is-it-possible-to-manage-cookies-from-the-client-browser",{"name":406,"path":629,"isActive":69},"/technical-interview/tasks/is-it-true-that-an-attacker-who-controls-a-router-and-listens-to-traffic-can-obtain-logins-and-passwords-from-websites-that-a-client-visits",{"name":256,"path":631,"isActive":69},"/technical-interview/tasks/is-everything-that-goes-through-https-secure",{"name":259,"path":633,"isActive":69},"/technical-interview/tasks/all-data-is-encrypted-https-is-used-let-s-assume-a-hacker-hacks-the-dns-and-makes-a-substitution-of-one-ip-for-another-a-phishing-site",{"name":262,"path":635,"isActive":69},"/technical-interview/tasks/there-is-a-web-application-in-addition-to-http-what-other-protocols-of-the-same-level-application-layer-can-be-used-in-the-web-application-in-browser",{"name":388,"path":637,"isActive":69},"/technical-interview/tasks/how-can-a-user-be-authorized-on-a-website",{"title":639,"list":640,"isOpened":69},"Отрисовка в браузере",[641,643,645,647,649,651],{"name":268,"path":642,"isActive":69},"/technical-interview/tasks/what-happens-when-http-sends-html-what-does-the-browser-do-with-this-html-given-that-it-is-valid",{"name":265,"path":644,"isActive":69},"/technical-interview/tasks/how-the-browser-parses-javascript-and-images-when-rendering",{"name":271,"path":646,"isActive":69},"/technical-interview/tasks/what-is-blocking-the-page-rendering-in-the-browser",{"name":274,"path":648,"isActive":69},"/technical-interview/tasks/what-is-dom-in-a-browser-what-is-cssom",{"name":277,"path":650,"isActive":69},"/technical-interview/tasks/what-are-nodes-in-the-dom",{"name":280,"path":652,"isActive":69},"/technical-interview/tasks/what-does-cssom-consist-of",{"title":654,"list":655,"isOpened":69},"Ревью кода",[656],{"name":370,"path":657,"isActive":69},"/technical-interview/tasks/how-does-a-reviewer-know-which-code-is-good-and-which-code-is-bad",{"title":659,"list":660,"isOpened":69},"Теория вероятности",[661,663,665],{"name":394,"path":662,"isActive":69},"/technical-interview/tasks/there-are-three-people-in-the-room-what-is-the-probability-that-at-least-two-of-them-are-of-the-same-sex-that-is-two-or-more",{"name":397,"path":664,"isActive":69},"/technical-interview/tasks/there-is-a-coin-it-is-tossed-five-times-in-a-row-each-time-it-is-recorded-whether-it-lands-on-heads-or-tails-how-many-different-sequences-of-heads-and-tails-can-be-obtained",{"name":400,"path":666,"isActive":69},"/technical-interview/tasks/how-can-you-guarantee-to-find-an-easy-fake-coin-among-8-in-the-minimum-number-of-weighings-on-a-balance-scale",{"cooperation":668,"copyright":671,"reportError":672,"socialNetwork":674},{"link":669,"title":670},"https://t.me/baurinanton","Сотрудничество","© “GOOD WEB JOB!”",{"label":673,"link":669},"Сообщить об ошибке",{"label":675,"socialNetworkList":676},"Мы в соцсетях:",[677,680,683],{"icon":19,"link":678,"title":679},"https://max.ru/u/f9LHodD0cOKMaukdnnahTeL5pwvjrPfUaZ4S8_1rsNy9I9qsmc9Ar3kP_y8","Max",{"icon":681,"link":669,"title":682},"ic:baseline-telegram","Telegram",{"icon":684,"link":685,"title":686},"ri:vk-fill","https://vk.com/baurinanton","VK",{"data":688,"body":689},{},{"type":690,"children":691},"root",[692],{"type":693,"tag":694,"props":695,"children":696},"element","p",{},[697],{"type":693,"tag":698,"props":699,"children":701},"code",{"className":700},[],[702],{"type":703,"value":704},"text","Ошибка TypeError",{"data":706,"body":707},{},{"type":690,"children":708},[709,714,726],{"type":693,"tag":694,"props":710,"children":711},{},[712],{"type":703,"value":713},"Дан код:",{"type":693,"tag":715,"props":716,"children":720},"pre",{"className":717,"code":719,"language":703},[718],"language-text","const a = [1, 2, 4];\na[\"7\"] = 3;\n\nconsole.log(a); // Первый\nconsole.log(a.length); // Второй\nconsole.log(a.map((item) => item)); // Третий\na.forEach((item) => console.log(item)); // Четвёртый\n",[721],{"type":693,"tag":698,"props":722,"children":724},{"__ignoreMap":723},"",[725],{"type":703,"value":719},{"type":693,"tag":694,"props":727,"children":728},{},[729,731,737],{"type":703,"value":730},"Что выведетcя в ",{"type":693,"tag":698,"props":732,"children":734},{"className":733},[],[735],{"type":703,"value":736},"console.log",{"type":703,"value":738},"-ах?",{"data":740,"body":741},{},{"type":690,"children":742},[743],{"type":693,"tag":694,"props":744,"children":745},{},[746,748,754,756,762,764,769,771],{"type":703,"value":747},"Первый: ",{"type":693,"tag":698,"props":749,"children":751},{"className":750},[],[752],{"type":703,"value":753},"[1, 2, 4, empty × 4, 3]",{"type":703,"value":755},". Второй: ",{"type":693,"tag":698,"props":757,"children":759},{"className":758},[],[760],{"type":703,"value":761},"8",{"type":703,"value":763},". Третий: ",{"type":693,"tag":698,"props":765,"children":767},{"className":766},[],[768],{"type":703,"value":753},{"type":703,"value":770},", Четвёртый: ",{"type":693,"tag":698,"props":772,"children":774},{"className":773},[],[775],{"type":703,"value":776},"1, 2, 4, 3",{"data":778,"body":779},{},{"type":690,"children":780},[781],{"type":693,"tag":694,"props":782,"children":783},{},[784,785,791,792,797,798,803,804],{"type":703,"value":747},{"type":693,"tag":698,"props":786,"children":788},{"className":787},[],[789],{"type":703,"value":790},"[1, 2, 4, undefined, undefined, undefined, undefined, 3]",{"type":703,"value":755},{"type":693,"tag":698,"props":793,"children":795},{"className":794},[],[796],{"type":703,"value":761},{"type":703,"value":763},{"type":693,"tag":698,"props":799,"children":801},{"className":800},[],[802],{"type":703,"value":790},{"type":703,"value":770},{"type":693,"tag":698,"props":805,"children":807},{"className":806},[],[808],{"type":703,"value":809},"1, 2, 4, undefined, undefined, undefined, undefined, 3",{"data":811,"body":812},{},{"type":690,"children":813},[814],{"type":693,"tag":694,"props":815,"children":816},{},[817,819,825,827,833,835,841],{"type":703,"value":818},"Cледует проверить, считается ли ключ индексом массива (строка вида ",{"type":693,"tag":698,"props":820,"children":822},{"className":821},[],[823],{"type":703,"value":824},"\"7\"",{"type":703,"value":826},"), и помнить, что разрежённость означает отсутствие элементов как свойств, из-за чего ",{"type":693,"tag":698,"props":828,"children":830},{"className":829},[],[831],{"type":703,"value":832},"map",{"type":703,"value":834}," и ",{"type":693,"tag":698,"props":836,"children":838},{"className":837},[],[839],{"type":703,"value":840},"forEach",{"type":703,"value":842}," не вызывают колбэк для пустых слотов.",{"data":844,"body":845},{},{"type":690,"children":846},[847],{"type":693,"tag":694,"props":848,"children":849},{},[850,851,857,858,864,865,870,871],{"type":703,"value":747},{"type":693,"tag":698,"props":852,"children":854},{"className":853},[],[855],{"type":703,"value":856},"[1, 2, 4, 3]",{"type":703,"value":755},{"type":693,"tag":698,"props":859,"children":861},{"className":860},[],[862],{"type":703,"value":863},"4",{"type":703,"value":763},{"type":693,"tag":698,"props":866,"children":868},{"className":867},[],[869],{"type":703,"value":856},{"type":703,"value":770},{"type":693,"tag":698,"props":872,"children":874},{"className":873},[],[875],{"type":703,"value":776},{"data":877,"body":878},{},{"type":690,"children":879},[880,908,920,932,941],{"type":693,"tag":694,"props":881,"children":882},{},[883,885,891,893,899,901,906],{"type":703,"value":884},"«Пустой слот» означает, что элемента на этом индексе не существует как свойства массива. При этом чтение ",{"type":693,"tag":698,"props":886,"children":888},{"className":887},[],[889],{"type":703,"value":890},"a[3]",{"type":703,"value":892}," всё равно вернёт ",{"type":693,"tag":698,"props":894,"children":896},{"className":895},[],[897],{"type":703,"value":898},"undefined",{"type":703,"value":900},", потому что чтение несуществующего свойства объекта возвращает ",{"type":693,"tag":698,"props":902,"children":904},{"className":903},[],[905],{"type":703,"value":898},{"type":703,"value":907},".",{"type":693,"tag":694,"props":909,"children":910},{},[911,913,918],{"type":703,"value":912},"Это принципиально отличается от ситуации, когда элемент существует и равен ",{"type":693,"tag":698,"props":914,"children":916},{"className":915},[],[917],{"type":703,"value":898},{"type":703,"value":919},". Тогда индекс считается «присутствующим», и многие методы обхода массива будут его посещать.",{"type":693,"tag":694,"props":921,"children":922},{},[923,925,930],{"type":703,"value":924},"Пример отличия пустого слота от явного ",{"type":693,"tag":698,"props":926,"children":928},{"className":927},[],[929],{"type":703,"value":898},{"type":703,"value":931},":",{"type":693,"tag":715,"props":933,"children":936},{"className":934,"code":935,"language":703},[718],"const x = [];\nx.length = 3;\n\nconsole.log(x);        // [empty × 3]\nconsole.log(x[1]);     // undefined (но элемента нет)\n\nconsole.log(1 in x);   // false (индекса 1 как свойства нет)\n\nconst y = [undefined, undefined, undefined];\nconsole.log(0 in y);   // true (свойство есть, значение undefined)\n",[937],{"type":693,"tag":698,"props":938,"children":939},{"__ignoreMap":723},[940],{"type":703,"value":935},{"type":693,"tag":694,"props":942,"children":943},{},[944,946,952,953,959,961,966,968,974,976,982,984,989],{"type":703,"value":945},"Здесь ",{"type":693,"tag":698,"props":947,"children":949},{"className":948},[],[950],{"type":703,"value":951},"x[1]",{"type":703,"value":834},{"type":693,"tag":698,"props":954,"children":956},{"className":955},[],[957],{"type":703,"value":958},"y[1]",{"type":703,"value":960}," оба читаются как ",{"type":693,"tag":698,"props":962,"children":964},{"className":963},[],[965],{"type":703,"value":898},{"type":703,"value":967},", но в ",{"type":693,"tag":698,"props":969,"children":971},{"className":970},[],[972],{"type":703,"value":973},"x",{"type":703,"value":975}," элемента нет, а в ",{"type":693,"tag":698,"props":977,"children":979},{"className":978},[],[980],{"type":703,"value":981},"y",{"type":703,"value":983}," элемент существует и хранит значение ",{"type":693,"tag":698,"props":985,"children":987},{"className":986},[],[988],{"type":703,"value":898},{"type":703,"value":907},{"data":991,"body":992},{},{"type":690,"children":993},[994],{"type":693,"tag":694,"props":995,"children":996},{},[997,1003,1005,1011,1013,1018,1020,1025,1027,1032,1034,1039],{"type":693,"tag":998,"props":999,"children":1000},"strong",{},[1001],{"type":703,"value":1002},"Правильный вариант: 1",{"type":703,"value":1004}," — вывод в консоли покажет разрежённый массив с четырьмя пустыми слотами, ",{"type":693,"tag":698,"props":1006,"children":1008},{"className":1007},[],[1009],{"type":703,"value":1010},"a.length",{"type":703,"value":1012}," станет ",{"type":693,"tag":698,"props":1014,"children":1016},{"className":1015},[],[1017],{"type":703,"value":761},{"type":703,"value":1019},", ",{"type":693,"tag":698,"props":1021,"children":1023},{"className":1022},[],[1024],{"type":703,"value":832},{"type":703,"value":1026}," сохранит пустые слоты, а ",{"type":693,"tag":698,"props":1028,"children":1030},{"className":1029},[],[1031],{"type":703,"value":840},{"type":703,"value":1033}," выведет только существующие элементы: ",{"type":693,"tag":698,"props":1035,"children":1037},{"className":1036},[],[1038],{"type":703,"value":776},{"type":703,"value":907},{"data":1041,"body":1042},{},{"type":690,"children":1043},[1044,1114,1134],{"type":693,"tag":694,"props":1045,"children":1046},{},[1047,1049,1055,1057,1063,1064,1070,1071,1076,1078,1082,1084,1090,1092,1098,1100,1105,1107,1113],{"type":703,"value":1048},"В JavaScript массив является объектом ",{"type":693,"tag":698,"props":1050,"children":1052},{"className":1051},[],[1053],{"type":703,"value":1054},"Array",{"type":703,"value":1056},", а элементы хранятся как свойства, ключи которых выглядят как индексы (например, ",{"type":693,"tag":698,"props":1058,"children":1060},{"className":1059},[],[1061],{"type":703,"value":1062},"\"0\"",{"type":703,"value":1019},{"type":693,"tag":698,"props":1065,"children":1067},{"className":1066},[],[1068],{"type":703,"value":1069},"\"1\"",{"type":703,"value":1019},{"type":693,"tag":698,"props":1072,"children":1074},{"className":1073},[],[1075],{"type":703,"value":824},{"type":703,"value":1077},").",{"type":693,"tag":1079,"props":1080,"children":1081},"br",{},[],{"type":703,"value":1083},"\nСвойство ",{"type":693,"tag":698,"props":1085,"children":1087},{"className":1086},[],[1088],{"type":703,"value":1089},"length",{"type":703,"value":1091}," у массива автоматически связано с максимальным индексом: если установить элемент на индексе ",{"type":693,"tag":698,"props":1093,"children":1095},{"className":1094},[],[1096],{"type":703,"value":1097},"k",{"type":703,"value":1099},", то ",{"type":693,"tag":698,"props":1101,"children":1103},{"className":1102},[],[1104],{"type":703,"value":1089},{"type":703,"value":1106}," становится как минимум ",{"type":693,"tag":698,"props":1108,"children":1110},{"className":1109},[],[1111],{"type":703,"value":1112},"k + 1",{"type":703,"value":907},{"type":693,"tag":694,"props":1115,"children":1116},{},[1117,1119,1125,1127,1132],{"type":703,"value":1118},"Запись ",{"type":693,"tag":698,"props":1120,"children":1122},{"className":1121},[],[1123],{"type":703,"value":1124},"a[\"7\"] = 3",{"type":703,"value":1126}," использует ключ ",{"type":693,"tag":698,"props":1128,"children":1130},{"className":1129},[],[1131],{"type":703,"value":824},{"type":703,"value":1133},". Поскольку это строковая форма неотрицательного целого числа, такой ключ трактуется как индекс массива, а не как «обычное» строковое свойство. В результате:",{"type":693,"tag":1135,"props":1136,"children":1137},"ul",{},[1138,1144,1161],{"type":693,"tag":1139,"props":1140,"children":1141},"li",{},[1142],{"type":703,"value":1143},"появляется элемент на позиции 7,",{"type":693,"tag":1139,"props":1145,"children":1146},{},[1147,1152,1154,1159],{"type":693,"tag":698,"props":1148,"children":1150},{"className":1149},[],[1151],{"type":703,"value":1089},{"type":703,"value":1153}," увеличивается до ",{"type":693,"tag":698,"props":1155,"children":1157},{"className":1156},[],[1158],{"type":703,"value":761},{"type":703,"value":1160},",",{"type":693,"tag":1139,"props":1162,"children":1163},{},[1164],{"type":703,"value":1165},"между старыми элементами (0–2) и новым элементом (7) образуются пустые слоты (3–6).",{"data":1167,"body":1168},{},{"type":690,"children":1169},[1170],{"type":693,"tag":694,"props":1171,"children":1172},{},[1173,1175,1180,1182,1188],{"type":703,"value":1174},"Массив в JavaScript не является «ассоциативным массивом»: произвольные строковые ключи могут стать обычными свойствами объекта массива и не участвовать в стандартных обходах элементов. Важно различать ключ ",{"type":693,"tag":698,"props":1176,"children":1178},{"className":1177},[],[1179],{"type":703,"value":824},{"type":703,"value":1181}," (индекс) и, например, ключ ",{"type":693,"tag":698,"props":1183,"children":1185},{"className":1184},[],[1186],{"type":703,"value":1187},"\"foo\"",{"type":703,"value":1189}," (обычное свойство).",{"data":1191,"body":1192},{},{"type":690,"children":1193},[1194,1206],{"type":693,"tag":694,"props":1195,"children":1196},{},[1197,1199,1204],{"type":703,"value":1198},"Схема массива после ",{"type":693,"tag":698,"props":1200,"children":1202},{"className":1201},[],[1203],{"type":703,"value":1124},{"type":703,"value":1205}," (индексы 0..7):",{"type":693,"tag":715,"props":1207,"children":1210},{"className":1208,"code":1209,"language":703},[718],"- `0 → 1`\n- `1 → 2`\n- `2 → 4`\n- `3 → (пусто)`\n- `4 → (пусто)`\n- `5 → (пусто)`\n- `6 → (пусто)`\n- `7 → 3`\n",[1211],{"type":693,"tag":698,"props":1212,"children":1213},{"__ignoreMap":723},[1214],{"type":703,"value":1209},{"data":1216,"body":1217},{},{"type":690,"children":1218},[1219,1224,1232,1237,1378,1383],{"type":693,"tag":694,"props":1220,"children":1221},{},[1222],{"type":703,"value":1223},"Исходный код:",{"type":693,"tag":715,"props":1225,"children":1227},{"className":1226,"code":719,"language":703},[718],[1228],{"type":693,"tag":698,"props":1229,"children":1230},{"__ignoreMap":723},[1231],{"type":703,"value":719},{"type":693,"tag":694,"props":1233,"children":1234},{},[1235],{"type":703,"value":1236},"Разбор по шагам:",{"type":693,"tag":1238,"props":1239,"children":1240},"ol",{},[1241,1261,1286,1304,1321,1339],{"type":693,"tag":1139,"props":1242,"children":1243},{},[1244,1246,1252,1254,1260],{"type":703,"value":1245},"После ",{"type":693,"tag":698,"props":1247,"children":1249},{"className":1248},[],[1250],{"type":703,"value":1251},"const a = [1, 2, 4]",{"type":703,"value":1253}," массив имеет индексы 0..2 и ",{"type":693,"tag":698,"props":1255,"children":1257},{"className":1256},[],[1258],{"type":703,"value":1259},"length = 3",{"type":703,"value":907},{"type":693,"tag":1139,"props":1262,"children":1263},{},[1264,1265,1270,1272,1277,1279,1284],{"type":703,"value":1245},{"type":693,"tag":698,"props":1266,"children":1268},{"className":1267},[],[1269],{"type":703,"value":1124},{"type":703,"value":1271}," создаётся элемент на индексе 7, а ",{"type":693,"tag":698,"props":1273,"children":1275},{"className":1274},[],[1276],{"type":703,"value":1089},{"type":703,"value":1278}," становится ",{"type":693,"tag":698,"props":1280,"children":1282},{"className":1281},[],[1283],{"type":703,"value":761},{"type":703,"value":1285},". Индексы 3, 4, 5, 6 остаются пустыми слотами (этих свойств нет).",{"type":693,"tag":1139,"props":1287,"children":1288},{},[1289,1295,1297,1302],{"type":693,"tag":698,"props":1290,"children":1292},{"className":1291},[],[1293],{"type":703,"value":1294},"console.log(a)",{"type":703,"value":1296}," показывает разрежённый массив, обычно как ",{"type":693,"tag":698,"props":1298,"children":1300},{"className":1299},[],[1301],{"type":703,"value":753},{"type":703,"value":1303}," (где «empty × 4» визуально означает отсутствующие элементы на 3–6).",{"type":693,"tag":1139,"props":1305,"children":1306},{},[1307,1313,1315,1320],{"type":693,"tag":698,"props":1308,"children":1310},{"className":1309},[],[1311],{"type":703,"value":1312},"console.log(a.length)",{"type":703,"value":1314}," печатает ",{"type":693,"tag":698,"props":1316,"children":1318},{"className":1317},[],[1319],{"type":703,"value":761},{"type":703,"value":907},{"type":693,"tag":1139,"props":1322,"children":1323},{},[1324,1330,1332,1337],{"type":693,"tag":698,"props":1325,"children":1327},{"className":1326},[],[1328],{"type":703,"value":1329},"a.map((item) => item)",{"type":703,"value":1331}," создаёт новый массив той же длины 8, но колбэк вызывается только для существующих элементов (0, 1, 2, 7). Поэтому «дыры» не превращаются в ",{"type":693,"tag":698,"props":1333,"children":1335},{"className":1334},[],[1336],{"type":703,"value":898},{"type":703,"value":1338},", а сохраняются как пустые слоты, и результат выглядит так же разрежённо.",{"type":693,"tag":1139,"props":1340,"children":1341},{},[1342,1348,1350,1356,1357,1363,1364,1369,1370,1376],{"type":693,"tag":698,"props":1343,"children":1345},{"className":1344},[],[1346],{"type":703,"value":1347},"a.forEach(...)",{"type":703,"value":1349}," вызывает колбэк только для существующих элементов (0, 1, 2, 7). Поэтому в консоль попадут только ",{"type":693,"tag":698,"props":1351,"children":1353},{"className":1352},[],[1354],{"type":703,"value":1355},"1",{"type":703,"value":1019},{"type":693,"tag":698,"props":1358,"children":1360},{"className":1359},[],[1361],{"type":703,"value":1362},"2",{"type":703,"value":1019},{"type":693,"tag":698,"props":1365,"children":1367},{"className":1366},[],[1368],{"type":703,"value":863},{"type":703,"value":1019},{"type":693,"tag":698,"props":1371,"children":1373},{"className":1372},[],[1374],{"type":703,"value":1375},"3",{"type":703,"value":1377},", а пустые слоты пропустятся полностью.",{"type":693,"tag":694,"props":1379,"children":1380},{},[1381],{"type":703,"value":1382},"Ожидаемый смысл вывода:",{"type":693,"tag":1135,"props":1384,"children":1385},{},[1386,1395,1405,1415],{"type":693,"tag":1139,"props":1387,"children":1388},{},[1389,1390],{"type":703,"value":747},{"type":693,"tag":698,"props":1391,"children":1393},{"className":1392},[],[1394],{"type":703,"value":753},{"type":693,"tag":1139,"props":1396,"children":1397},{},[1398,1400],{"type":703,"value":1399},"Второй: ",{"type":693,"tag":698,"props":1401,"children":1403},{"className":1402},[],[1404],{"type":703,"value":761},{"type":693,"tag":1139,"props":1406,"children":1407},{},[1408,1410],{"type":703,"value":1409},"Третий: ",{"type":693,"tag":698,"props":1411,"children":1413},{"className":1412},[],[1414],{"type":703,"value":753},{"type":693,"tag":1139,"props":1416,"children":1417},{},[1418,1420,1425,1426,1431,1432,1437,1438],{"type":703,"value":1419},"Четвёртый: ",{"type":693,"tag":698,"props":1421,"children":1423},{"className":1422},[],[1424],{"type":703,"value":1355},{"type":703,"value":1019},{"type":693,"tag":698,"props":1427,"children":1429},{"className":1428},[],[1430],{"type":703,"value":1362},{"type":703,"value":1019},{"type":693,"tag":698,"props":1433,"children":1435},{"className":1434},[],[1436],{"type":703,"value":863},{"type":703,"value":1019},{"type":693,"tag":698,"props":1439,"children":1441},{"className":1440},[],[1442],{"type":703,"value":1375},{"data":1444,"body":1445},{},{"type":690,"children":1446},[1447,1473,1478],{"type":693,"tag":694,"props":1448,"children":1449},{},[1450,1452,1457,1458,1463,1465,1471],{"type":703,"value":1451},"Итеративные методы массива (включая ",{"type":693,"tag":698,"props":1453,"children":1455},{"className":1454},[],[1456],{"type":703,"value":832},{"type":703,"value":834},{"type":693,"tag":698,"props":1459,"children":1461},{"className":1460},[],[1462],{"type":703,"value":840},{"type":703,"value":1464},") работают не как «цикл от 0 до length-1 с чтением a",{"type":693,"tag":1466,"props":1467,"children":1468},"span",{},[1469],{"type":703,"value":1470},"i",{"type":703,"value":1472},"», а как обход существующих индексов. Поэтому для пустых слотов колбэк не вызывается вообще.",{"type":693,"tag":694,"props":1474,"children":1475},{},[1476],{"type":703,"value":1477},"Следствия:",{"type":693,"tag":1135,"props":1479,"children":1480},{},[1481,1491],{"type":693,"tag":1139,"props":1482,"children":1483},{},[1484,1489],{"type":693,"tag":698,"props":1485,"children":1487},{"className":1486},[],[1488],{"type":703,"value":832},{"type":703,"value":1490}," не имеет возможности «подставить значение» для дыр, потому что для дыр колбэк не запускается; в новом массиве дырки сохраняются.",{"type":693,"tag":1139,"props":1492,"children":1493},{},[1494,1499,1501,1506],{"type":693,"tag":698,"props":1495,"children":1497},{"className":1496},[],[1498],{"type":703,"value":840},{"type":703,"value":1500}," не печатает ",{"type":693,"tag":698,"props":1502,"children":1504},{"className":1503},[],[1505],{"type":703,"value":898},{"type":703,"value":1507}," для дыр, потому что обход не доходит до отсутствующих элементов.",{"data":1509,"body":1510},{},{"type":690,"children":1511},[1512],{"type":693,"tag":694,"props":1513,"children":1514},{},[1515,1517,1523,1525,1530],{"type":703,"value":1516},"Если требуется именно пройтись по всем индексам от 0 до ",{"type":693,"tag":698,"props":1518,"children":1520},{"className":1519},[],[1521],{"type":703,"value":1522},"length - 1",{"type":703,"value":1524}," (включая пустые слоты) и получить ",{"type":693,"tag":698,"props":1526,"children":1528},{"className":1527},[],[1529],{"type":703,"value":898},{"type":703,"value":1531}," при чтении отсутствующих элементов, то обычно применяется обычный цикл по индексу.",{"data":1533,"body":1534},{},{"type":690,"children":1535},[1536,1541],{"type":693,"tag":694,"props":1537,"children":1538},{},[1539],{"type":703,"value":1540},"Пример обхода всех индексов, включая пустые слоты:",{"type":693,"tag":715,"props":1542,"children":1545},{"className":1543,"code":1544,"language":703},[718],"for (let i = 0; i \u003C a.length; i++) {\n  console.log(i, a[i]); // для дыр будет выводиться undefined, но индекс будет выведен\n}\n",[1546],{"type":693,"tag":698,"props":1547,"children":1548},{"__ignoreMap":723},[1549],{"type":703,"value":1544},{"data":1551,"body":1552},{},{"type":690,"children":1553},[1554],{"type":693,"tag":1555,"props":1556,"children":1557},"table",{},[1558,1588],{"type":693,"tag":1559,"props":1560,"children":1561},"thead",{},[1562],{"type":693,"tag":1563,"props":1564,"children":1565},"tr",{},[1566,1572,1578,1583],{"type":693,"tag":1567,"props":1568,"children":1569},"th",{},[1570],{"type":703,"value":1571},"Операция",{"type":693,"tag":1567,"props":1573,"children":1575},{"align":1574},"right",[1576],{"type":703,"value":1577},"Длина/количество",{"type":693,"tag":1567,"props":1579,"children":1580},{},[1581],{"type":703,"value":1582},"Что происходит с «дырами» 3..6",{"type":693,"tag":1567,"props":1584,"children":1585},{},[1586],{"type":703,"value":1587},"Что видно в выводе",{"type":693,"tag":1589,"props":1590,"children":1591},"tbody",{},[1592,1619,1643,1669],{"type":693,"tag":1563,"props":1593,"children":1594},{},[1595,1604,1609,1614],{"type":693,"tag":1596,"props":1597,"children":1598},"td",{},[1599],{"type":693,"tag":698,"props":1600,"children":1602},{"className":1601},[],[1603],{"type":703,"value":1294},{"type":693,"tag":1596,"props":1605,"children":1606},{"align":1574},[1607],{"type":703,"value":1608},"длина 8",{"type":693,"tag":1596,"props":1610,"children":1611},{},[1612],{"type":703,"value":1613},"Дыры существуют",{"type":693,"tag":1596,"props":1615,"children":1616},{},[1617],{"type":703,"value":1618},"Обычно показываются как empty/hole",{"type":693,"tag":1563,"props":1620,"children":1621},{},[1622,1630,1634,1638],{"type":693,"tag":1596,"props":1623,"children":1624},{},[1625],{"type":693,"tag":698,"props":1626,"children":1628},{"className":1627},[],[1629],{"type":703,"value":1312},{"type":693,"tag":1596,"props":1631,"children":1632},{"align":1574},[1633],{"type":703,"value":761},{"type":693,"tag":1596,"props":1635,"children":1636},{},[1637],{"type":703,"value":1613},{"type":693,"tag":1596,"props":1639,"children":1640},{},[1641],{"type":703,"value":1642},"Печатается число 8",{"type":693,"tag":1563,"props":1644,"children":1645},{},[1646,1655,1659,1664],{"type":693,"tag":1596,"props":1647,"children":1648},{},[1649],{"type":693,"tag":698,"props":1650,"children":1652},{"className":1651},[],[1653],{"type":703,"value":1654},"a.map(item => item)",{"type":693,"tag":1596,"props":1656,"children":1657},{"align":1574},[1658],{"type":703,"value":1608},{"type":693,"tag":1596,"props":1660,"children":1661},{},[1662],{"type":703,"value":1663},"Дыры сохраняются",{"type":693,"tag":1596,"props":1665,"children":1666},{},[1667],{"type":703,"value":1668},"Результат тоже разрежённый",{"type":693,"tag":1563,"props":1670,"children":1671},{},[1672,1680,1685,1690],{"type":693,"tag":1596,"props":1673,"children":1674},{},[1675],{"type":693,"tag":698,"props":1676,"children":1678},{"className":1677},[],[1679],{"type":703,"value":1347},{"type":693,"tag":1596,"props":1681,"children":1682},{"align":1574},[1683],{"type":703,"value":1684},"4 вызова колбэка",{"type":693,"tag":1596,"props":1686,"children":1687},{},[1688],{"type":703,"value":1689},"Дыры пропускаются",{"type":693,"tag":1596,"props":1691,"children":1692},{},[1693],{"type":703,"value":1694},"Печатается 1, 2, 4, 3",{"data":1696,"body":1697},{},{"type":690,"children":1698},[1699],{"type":693,"tag":694,"props":1700,"children":1701},{},[1702,1704,1709,1711,1716,1718,1723,1725,1730],{"type":703,"value":1703},"Кратко: присваивание ",{"type":693,"tag":698,"props":1705,"children":1707},{"className":1706},[],[1708],{"type":703,"value":1124},{"type":703,"value":1710}," создаёт элемент с индексом 7 и увеличивает ",{"type":693,"tag":698,"props":1712,"children":1714},{"className":1713},[],[1715],{"type":703,"value":1089},{"type":703,"value":1717}," до 8, оставляя индексы 3–6 пустыми слотами; ",{"type":693,"tag":698,"props":1719,"children":1721},{"className":1720},[],[1722],{"type":703,"value":832},{"type":703,"value":1724}," сохраняет пустые слоты, а ",{"type":693,"tag":698,"props":1726,"children":1728},{"className":1727},[],[1729],{"type":703,"value":840},{"type":703,"value":1731}," пропускает их и выводит только существующие элементы.",1775735655417]