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