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