Оператор Void
Вы, вероятно, уже сталкивались с этим оператором. Раньше при наличии ссылки, запускающей функцию JavaScript, нужно было добавлять , чтобы действие по умолчанию не запустилось. Но что же это значило на самом деле?
Оператор в JavaScript позволяет сгенерировать значение . Он принимает любое выражение и каждый раз возвращает .
Возможно, вы подумали: почему бы просто не воспользоваться ключевым словом ? Дело в том, что до ECMAScript 5 не было постоянным значением, которое нельзя изменять. Раньше это было возможно, и оператор позволял получать к нему доступ, даже если константа не работала.
По сути, чтобы переопределить константу только для локального пространства имен и избежать проблем со сторонними библиотеками, лучше всего создавать собственные IIFE (Immediately Invoked Function Expressions), где один из полученных параметров будет .
Конечно, в современном JavaScript оператор еще используется, но уже не имеет столь важного значения. К примеру, он помогает избежать нежелательных возвратов в однострочных стрелочных функциях
Такая функция возвращает результат одной строки, даже если оператор не используется.
Обе функции вернут какие-либо элементы. Очевидно, что для возврат будет ожидаемым, в то время как для другой, вероятно, нет, например если вы просто хотите ее вызвать, но вам не интересно значение результата. В таком случае можно сделать следующее.
Возвращаемое значение будет скрыто — его заменит .
Однако такое поведение приносит минимальную выгоду в современном JavaScript.
О массовости и неорганизованности протеста
Собеседники «7×7» считают, что этот протест отличается своей децентрализованностью. Впервые у российских протестующих нет единого центра – лидера, движущей силы или символа. Несмотря на это, люди смогли объединиться.
– В первую очередь, это нежелание людей делегировать больше контроля государству, во-вторых, нежелание и непонимание самого механизма: что такое QR-код, как он устроен и почему это важно. В-третьих, усталость людей от многочисленных запретов и ограничений, которые их измотали во время пандемии, неважно, целесообразными они были или нет, – перечисляет возможные причины Александр Амзин
Юлия Галямина называет одной из причин растущей популярности этого движения общее недовольство людей, которое они долгое время не могли выплеснуть:
– Это ведь не просто движение «люди против QR-кодов» – здесь соединяется все накопившееся недовольство граждан несвободой и неравенством. В протесте звучат концепты свободы, равенства, справедливости. Раздражение копилось долгие годы, многие люди раньше не высказывали его на политические темы.
На массовость протеста влияет и то, что новые ограничения касаются повседневной жизни большинства граждан, считает Александр Кынев:
– В отличие от других реформ последних лет, QR-коды затрагивают всех, в том или ином виде, независимо от возраста, образования, доходов и так далее. При этом многие вакцинированные люди также выступают против QR-кодов. Я сам вакцинирован, и у меня есть код, но саму процедуру я считаю оскорблением и унижением человеческого достоинства. Ведь вместе с кодом еще придется предъявлять паспорт, доказывающий, что этот твой код. В результате любому малограмотному охраннику и вообще кому угодно мы теперь на каждом углу должны будем предъявлять код и документы. Это не жизнь, а тюрьма.
Протест в Костроме. Фото Алексея Молоторенко
Интерфейсы
Это отличные конструкции, помогающие создавать API, которому должен соответствовать класс. Одно из основных преимуществ интерфейсов, которое было бы потеряно внутри безтипового JS, заключается в том, что вы можете определить переменную любого класса, реализующего тот же интерфейс, и безопасно вызывать любой из его методов.
interface Animal { speak() } class Dog implements Animal{ speak() { console.log("Woof!") } } class Cat implements Animal{ speak() { console.log("Meau!") } } class Human implements Animal{ speak() { console.log("Hey dude, what's up?") } } //if we had Interfaces in JS we could safely do: let objects = objects.forEach(o => o.speak())
Это невозможно сделать на простом JS.
Вы определенно можете добиться того же с помощью класса, определяющего метод speak, а затем его переопределения. Но опять же, вы также можете сделать это на любом другом языке с сильной ООП. Использование интерфейсов намного чище и элегантнее.
Выражения
Выражением является любой корректный блок кода, который возвращает значение.
Концептуально, существуют два типа выражений: те которые присваивают переменной значение, и те, которые вычисляют значение без его присваивания.
Выражение является примером выражения первого типа. Данное выражение использует оператор = для присваивания переменнойзначения 7. Само выражение также равняется 7.
Код является примером выражения второго типа. Данное выражение использует оператор «+» для сложения чисел 3 и 4 без присваивания переменной полученного результата 7.
Все выражения в JavaScript делятся на следующие категории:
- Арифметические: вычисляются в число, например: 3.14159 (Используют ).
- Строковые: вычисляются в текстовую строку, например: «Fred» или «234» (Используют ).
- Логические: вычисляются в true или false (Используют ).
- Основные выражения: Базовые ключевые слова и основные выражения в JavaScript.
- Левосторонние выражения: Значениям слева назначаются значения справа.
Базовые ключевые слова и основные выражения в JavaScript.
Оператор
Используйте ключевое слово для указания на текущий объект. В общем случае указывает на вызываемый объект, которому принадлежит данный метод. Используйте следующим образом:
this this.propertyName
Предположим, функция выполняет проверку свойства некоторого объекта; задан объект, а также верхняя и нижняя граница величины данного свойства:
Вы можете вызвать функцию для обработчика события для каждого элемента формы, используя для указания на элемент формы, как это показано в следующем примере:
Оператор группировки
Оператор группировки контролирует приоритет вычисления выражений. Например, вы можете переопределить порядок — «умножение и деление, а потом сложение и вычитание», так чтобы, например, чтобы сложение выполнялось до умножения:
Упрощённый синтаксис создания массивов и генераторов
Упрощённый синтаксис — экспериментальная возможность JavaScript, которая возможно будет добавлена в будущие версии ECMAScript. Есть 2 версии синтаксиса:
- Упрощённый синтаксис для массивов.
- Упрощённый синтаксис для генераторов.
Упрощённые синтаксисы существуют во многих языках программирования и позволяют вам быстро собирать новый массив, основанный на существующем. Например:
Значениям слева назначаются значения справа.
Вы можете использовать оператор для создания экземпляра объекта пользовательского типа или одного из встроенных объектов. Используйте оператор следующим образом:
super
Ключевое слово используется, чтобы вызывать функции родительского объекта. Это полезно и с классами для вызова конструктора родителя, например.
Оператор расширения
Оператор расширения позволяет выражению расширяться в местах с множеством аргументов (для вызовов функций) или множестве элементов (для массивов).
Пример: Сегодня, если у вас есть массив и вы хотите создать новый с существующей частью первого, то литерального синтаксиса массива уже не достаточно, и вы должны писать императивный (без вариантов) код, используя комбинацию , , и т.д. Но с этим оператором код становится более коротким:
Похожим образом оператор работает с вызовами функций:
- « Предыдущая статья
- Следующая статья »
Описание
Мы уже решали эту задачу в публикации «Как получить все ссылки на HTML-странице?«. Рассмотрим подробнее вопрос получения атрибута href у HTML-элемента <a>.
Как мы знаем из курса HTML, у любого HTML-элемента существуют атрибуты, которые можно назначать (или не назначать). Эти атрибуты могут быть глобальными и уникальными. Глобальные — применяются ко всем элементам HTML (например, id, title, class, style). Уникальные — работают только со своими HTML-элементами (например, alt, src, href).
Мы знаем, что в JavaScript всё является объектами. Из этого следует, что каждый HTML-элемент можно представить в виде объекта и разложить информацию о нём на пары «ключ/значение». Объектная модель документа (DOM) предоставляет нам нужный функционал для этого разбиения пар «ключ/значение». В итоге мы должны получить такой объект А, у которого есть ключ href и его значение.
Предлагаю потренировать на каком-нибудь интернет магазине, где много ссылок. Пусть это будет такой URL:
https://www.ozon.ru
Скриншот на момент написания этой публикации:
Главная страница www.ozon.ru — 17-11-2020
Для захвата всей страницы я использую браузерное расширение FireShot.
Не будем глубоко погружаться внутрь сайта. На главной странице много блоков, которые являются ссылками со своими атрибутами href.
Сниппеты-ссылки на главной — www.ozon.ru — 17-11-2020
Посмотрим на разметку:
Фрагмент разментки главной страницы — www.ozon.ru — 17-11-2020
Всё как мы и предполагали. Каждая «картинка» (условно) — это ссылка. То есть с главной страницы можно перейти глубже по сайту. Отлично.
Соберём все HTML-элементы <a>, которые встречаются на главной странице и посмотрим на них:
var a = document.getElementsByTagName("a")
Нам возвращается коллекция HTML-элементов <a>:
HTML-коллекция элементов a с главной сайта ozon
По сути HTML-коллекция — это массиво-подобный объект. Инструменты разработчика в браузере нам подсвечивают название самого элемента, а также его классы.
Мы можем обратиться к любому элементу коллекции по его индексу:
a
или обобщённо:
document.getElementsByTagName("a")
В обоих случаях мы получаем нужный нам элемент (объект JavaScript):
Обращение к 101 элементу HTML-коллекции
Теперь можно сразу получить искомый href из a. Для этого обратимся к объекту по нужному ключу:
document.getElementsByTagName("a").href
Результат вывода:
Получение href — JavaScript
Прогнозы
Принятие решения о повсеместном введении QR-кодов не найдет одобрения у населения и ударит по рейтингам властей, считает Александр Кынев:
– Был многолетний фактический негласный контракт власти и государства: люди не трогают власть, а власть не мешает людям жить. Фактически живут параллельно друг другу. Но введение QR-кодов стало нарушением этого негласного контракта.
По мнению Кынева, именно страх власти перед массовыми протестами способен замедлить или полностью остановить введение QR-кодов.
– Власть очень боится и прекрасно понимает негативный потенциал протестов. Вспомним, летом в Москве QR-коды для доступа в рестораны продержались всего около месяца. Принятие реформы постоянно сдвигают, вот сейчас опять – до февраля, и якобы решение будут принимать регионы. То есть власти не только хронологически сдвигают строки, но и перекладывают ответственность на других, так что вовсе не факт, что реформа будет принята в таком виде. Но у нее есть главный психологический эффект: запугать людей и заставить их вакцинироваться. Думаю, даже если эту реформу примут, ее не смогут продержать в жестком виде хотя бы в течение полугода.
Юлия Галямина думает так же:
– Это не какие-то, по представлениям власти, маргинальные граждане, которые пикетируют за абстрактные понятия вроде свободы слова или политических заключенных, – это народная масса. Поэтому они боятся, и, когда они сталкиваются с народным недовольством, чаще отступают.
Видя недоверие людей к QR-кодам, правительство решило отказаться от использования этого термина в публичном пространстве, а соответствующие документы переименовать, например, в «сертификат здоровья» или «санитарный паспорт». Снятие с рассмотрения законопроекта о QR-кодах на междугородном транспорте протестующие считают результатом своего объединения. Депутат КПРФ Евгения Овод из Ярославля назвала это «первой победой общества» и призвала продолжать борьбу против «цифрового концлагеря» и «незаконного отъема конституционных прав».
Защищенные свойства и методы
У нас уже есть общедоступная видимость, и скоро мы получим приватную видимость для методов и свойств (хотя и с помощью префикса #, который все еще разбивает мне сердце). Я предполагаю, что следующим логическим шагом будет добавление защищенной видимости, однако сейчас она отсутствует, и я думаю, что все три типа доступа необходимы, если вы хотите иметь надлежащую поддержку ООП. Доступ к защищенным свойствам и методам можно получить только из класса или одного из его дочерних элементов (в отличие от приватной видимости, которая ограничивает доступ только родительским классом).
Мне всегда было трудно назвать JS языком ООП, и пока я не увижу способ работы с внутренними компонентами классов без необходимости ссылаться на цепочку прототипов, я буду продолжать бороться. Почему они не могли просто продолжить работу над расширением прототипной модели наследования вместо того, чтобы предоставить нам эту дешевую версию классов? Это риторический вопрос.
Прямо сейчас я просто скажу «спасибо» за добавленный синтаксический сахар и буду следить за новыми функциями на основе ООП в будущем.
А что насчет вас? Какую концепцию ООП вам не хватает в JS, о которой я еще не упомянул? Или, что еще лучше, какая из уже упомянутых идей вам нужна больше всего? Оставьте комментарий в блоге автора статьи (What’s Wrong with Classes in JavaScript?)!
Spread the love
Какое значение «href» следует использовать для ссылок JavaScript: «#» или «javascript: void (0)»?
Ниже приведены два метода создания ссылки, единственной целью которой является запуск кода JavaScript. Что лучше с точки зрения функциональности, скорости загрузки страницы, целей проверки и т. Д.?
или же
я использую .
Три причины. Поощрение использования среди команды разработчиков неизбежно приводит к тому, что некоторые используют возвращаемое значение функции, называемой следующим образом:
Но потом они забывают использовать в onclick и просто используйте .
Вторая причина избегать это последний не будет выполняться, если вызываемая функция выдает ошибку. Следовательно, разработчики также должны не забывать обрабатывать любую ошибку соответствующим образом в вызываемой функции.
Третья причина заключается в том, что бывают случаи, когда свойство события назначается динамически. Я предпочитаю иметь возможность вызывать функцию или назначать ее динамически без необходимости кодировать функцию специально для того или иного метода прикрепления. Следовательно, мой (или что угодно) в разметке HTML выглядят так:
ИЛИ ЖЕ
С помощью позволяет избежать всех вышеперечисленных головных болей, и я не нашел примеров недостатков.
Итак, если вы разработчик-одиночка, вы можете сделать свой собственный выбор, но если вы работаете в команде, вы должны указать:
Использовать , убедись всегда содержит в конце, что любая вызываемая функция не выдает ошибку, и если вы динамически присоединяете функцию к свойство убедитесь, что оно возвращает не только ошибку, но и .
ИЛИ ЖЕ
Использовать
Со вторым явно гораздо проще общаться.
Ни то, ни другое.
Если у вас есть реальный URL, который имеет смысл, используйте его как HREF. Onclick не сработает, если кто-то щелкнет по вашей ссылке, чтобы открыть новую вкладку, или если у него отключен JavaScript.
Если это невозможно, то вам следует, по крайней мере, вставить тег привязки в документ с помощью JavaScript и соответствующих обработчиков событий щелчка.
Я понимаю, что это не всегда возможно, но, на мой взгляд, к этому следует стремиться при разработке любого общедоступного веб-сайта.
Проверять, выписываться Ненавязчивый JavaScript и Прогрессивное улучшение (как Википедия).
Делать или же или что-то еще, что содержит атрибут — было нормально пять лет назад, хотя сейчас это может быть плохой практикой. Вот почему:
-
Он продвигает навязчивый JavaScript, который, как оказалось, сложно поддерживать и масштабировать. Подробнее об этом в Ненавязчивый JavaScript.
-
Вы тратите свое время на создание чрезмерно подробного кода, который имеет очень мало (если вообще имеет) пользу для вашей кодовой базы.
-
Теперь есть лучшие, более простые, удобные в обслуживании и масштабируемые способы достижения желаемого результата.
Label
Если вы знакомы с другими языками, такими как C, то, скорее всего, знаете, как тяжело работать с операторами . Раньше эта функция имела смысл, но сейчас существуют современные и удобные решения для той же проблемы, а сама она устарела и превратилась в антипаттерн.
Оператор позволяет поместить маркер в любом фрагменте кода и переместиться в него из любого другого места. Он был своего рода магическим порталом: с его помощью можно было перейти в середину функции или внутрь оператора .
В JavaScript есть подобная конструкция и называется она “метки” (labels). Метки помещаются перед оператором, который затем можно как продолжить (), так и покинуть ()
Обратите внимание, что никаких не требуется — и это определенно плюс
Записываем следующее:
Вывод будет таким:
Конечно, этот пример очень похож на оператор , и, в целом, выглядит не так уж плохо. Однако вы выпадаете из нормального потока кода и пропускаете операторы. Если вы хотите реализовать подобное, то лучше использовать — другим разработчикам будет гораздо легче его прочитать.
Недостатки меток становятся более очевидными при взаимодействии с циклами и оператором :
Можете ли вы проанализировать приведенный выше код и сказать, каким будет вывод? Это вполне реально, но потребует времени. Этот сценарий выведет следующее:
По сути, второй оценивает как , поэтому оператор влияет на внешний цикл, заставляя его перейти к следующему значению индекса. Он, в свою очередь, перезапускает внутренний цикл, возвращая его к нулю. И то же самое происходит снова и снова. В то же время первый никогда не получит значения , потому что не достигнет никакого другого значения, кроме .
Метки часто вызывают трудности. Даже если вы сможете их применить, они будет гораздо понятнее интерпретатору, а не человеку, для которого вы и пишите код. Тому, кто будет читать ваш код (или даже вам самим через несколько недель), потребуется гораздо больше времени, чтобы понять его основной поток.
- JavaScript: 5 нововведений 2021 года
- 10 хитрых приемов в JavaScript, о которых должен знать каждый разработчик
- Как получить все неуникальные значения в массиве JavaScript?
Читайте нас в Telegram, VK и
Перевод статьи Fernando Doglio: The Dark Side of Javascript: A Look at 3 Features You Never Want to Use
Статический полиморфизм
Мне лично понравился этот вариант когда я работал с ООП, и иногда мне кажется, что он пригодился бы, если бы он поддерживался и в JS. Статический полиморфизм позволяет нам определять один и тот же метод несколько раз в одном классе, но с разными сигнатурами. Другими словами, используется много раз одно и тоже имя функции, но с разными параметрами. Теперь у нас есть параметр rest с JS, и это позволяет нам использовать произвольное число аргументов, однако это также означает, что мы должны добавить дополнительный код в наш метод для обработки этого уровня динамизма. Если бы вместо этого мы могли более четко различать сигнатуры методов, мы могли бы напрямую инкапсулировать разные варианты одного и того же поведения в разные методы.
Первая версия не является допустимым кодом JS, но она показывает более чистый код и, следовательно, требует меньше когнитивной нагрузки для мысленного анализа. Следующая версия, полностью верна, но требует большого мысленного анализа, и вокруг него больше кода.
Статический полиморфизм обычно реализуется путем просмотра типов параметров, полученных в методах. Однако из-за того, как работает JS, мы знаем, что это невозможно.
О волне протеста
Протестующие называют систему QR-кодов цифровым концлагерем и иронизируют, придумывая новые слова: QRепостное право, QRабство. Основные мотивы протестов – люди не скот и не товар, чтобы маркировать их и разделять на классы.
Тем временем вице-президент «Роснефти» Михаил Леонтьев в эфире телеканала «Вести FM» сравнил протестующих с животными: «Вы убеждаете баранов пастись самостоятельно. Бараны без пастуха и, желательно, собаки, не пасутся. Власть обязана обеспечить здоровье баранов вне зависимости от воли и сознания». Позже он принес извинения за слишком экспрессивную формулировку, но не за ее суть.
В части регионов России протест против QR-кодов поддержали в местных отделениях КПРФ. В партии назвали эти меры сегрегационными, а саму инициативу – «цифровым концлагерем» и «цифровым фашизмом». Члены партии и гражданские активисты начали собирать подписи против введения QR-кодов, записывать обращения к властям, выходить на пикеты, устраивать стихийные сходы. В Чувашии инициативная группа подала заявку на проведение референдума против новых ограничений, но получила отказ.
Лидер движения «Свободный Ярославль» Андрей Брой, который вместе с другими активистами участвует в движении против QR-кодов, говорит об избирательности этой системы и опасности сегрегации. Из-за отказа носить маску или предъявить код чаще страдают простые граждане, а приближенные к власти избегают наказаний. Брой рассказал, что трижды отправлял заявления о нарушении масочного режима ярославскими чиновниками, но никого из них не привлекли к ответственности. По его мнению, именно им следует убеждать жителей в пользе вакцинации на своем примере:
– Вот что странно: наши чиновники очень любят прямые эфиры: как снег убирают, так все чиновники ходят такими полублогерами с мобильниками, а как вакцинироваться, так никто об этом не рассказывает.
Стоит отметить, что в некоторых регионах чиновники рассказывают в соцсетях о том, что они вакцинировались. Например, губернатор Вологодской области Олег Кувшинников писал об этом на своей странице во «ВКонтакте». В группе ярославского губернатора Дмитрия Миронова тоже было много постов о необходимости вакцинации, пока он руководил регионом. В то же время сообщения о том, что летом он привился сам, в этом паблике не было.
Андрей Брой считает недопустимым трансляцию в СМИ, особенно на телевидении, негатива о людях, отказывающихся от прививок или выступающих против введения QR-кодов:
– Гордон призывал по телевизору антипрививочников унижать. Но мы не против вакцин, большинство из нас привиты . Просто заставлять и принуждать людей нельзя. Многие имеют хронические заболевания, и не каждый добровольно пойдет на прививку, зная, что его болезни могут обостриться.
Ненавязчивый способ JavaScript
Просто не имей атрибут вообще! Любой хороший сброс CSS позаботится об отсутствующем стиле курсора по умолчанию, так что это не проблема
Затем прикрепите свои функции JavaScript, используя изящные и ненавязчивые передовые методы, которые более удобны в обслуживании, поскольку ваша логика JavaScript остается в JavaScript, а не в вашей разметке — что важно, когда вы начинаете разрабатывать крупномасштабные приложения JavaScript, которые требуют, чтобы ваша логика была разделена на компоненты и шаблоны в черном ящике. Подробнее об этом в Архитектура крупномасштабных приложений JavaScript
8 ответов
Лучший ответ
Это не вызывает проблем, но это трюк сделать то же самое, что и
Когда вы далеко внизу страницы и якорь как:
Вы перейдете наверх, и URL также будет иметь якорь , чтобы избежать этого, мы просто или используем
Относительно ваших примеров
Просто сделайте и у вас будет «ссылка как»
Это нормально, но в вашем в конце просто , чтобы предотвратить поведение по умолчанию, вам больше ничего не нужно делать.
39
Roko C. Buljan
20 Дек 2015 в 14:51
Почему все события клика имеют ссылки ?
Если вместо этого вы используете теги с CSS и соответствующими событиями onclick, это полностью решит проблему.
Peter Bridger
8 Сен 2010 в 10:34
Этот метод выглядит нормально во всех браузерах, если вы устанавливаете onclick с событием jQuery:
Как сказано выше, href = «#» с изменением хеша URL и может инициировать повторную загрузку данных, если вы используете плагин History (или ba-bbq) JS.
5
Tanguy
5 Мар 2014 в 12:18
Использование ‘javascript: void 0’ приведет к проблемам в IE
Когда вы нажимаете на ссылку, она вызывает событие onbeforeunload окна!
12
brookslee
20 Апр 2012 в 02:19
При использовании в навигации возвращаемое значение выполненного скрипта, если оно есть, становится содержимым нового документа, который отображается в браузере. Оператор в JavaScript заставляет возвращаемое значение выражения, следующего за ним, возвращать undefined , что предотвращает выполнение этого действия. Вы можете попробовать сами, скопируйте следующее в адресную строку и нажмите возврат:
Результатом является новая страница, содержащая только слово «привет». Теперь измените его на:
…Ничего не произошло.
Когда вы пишете самостоятельно, сценарий не выполняется, поэтому результатом выполнения этого сценария также является undefined , поэтому браузер ничего не делает. Это делает следующее более или менее эквивалентным:
За исключением того, что undefined можно переопределить, объявив переменную с тем же именем. Использование , как правило, бессмысленно, и в основном оно было сокращено по сравнению с .
Как уже упоминалось, лучше использовать в обработчике кликов, чем использовать протокол .
23
Andy E
16 Май 2012 в 13:14
JavaScript: недействительным ( 0 ) ; -> это выполняет функцию void и возвращает неопределенное значение. Это может иметь проблемы с IE. Javascript :; -> это ничего не делает. безопаснее всего создавать мертвые ссылки. ‘#’ -> это означает, что он указывает на тот же DOM, он перезагрузит страницу при нажатии.
Kishore
5 Дек 2018 в 08:00
Я обычно не использую href и меняю аспект с помощью css, делая их похожими на ссылки. Таким образом, вам не нужно беспокоиться об эффекте ссылки, за исключением обработчика событий вашего приложения.
1
RiccardoC
17 Ноя 2015 в 10:19
Вы могли бы сделать их все .
Затем вам нужно будет добавить в конец любой функции, которая вызывается по щелчку якоря, чтобы страница не перепрыгивала наверх.
3
Moin Zaman
8 Сен 2010 в 17:45
Альтернативный способ через путь JS
Отловим один элемент <a> с изображением робота и подписью «Для мальчиков». Для этого скопируем в разметке путь JS:
Копирование пути JS в интструментах разработчика
Скопированная команда будет выглядеть так:
document.querySelector("#\\37 135 > a")
Результат выполнения:
Элемент а с переходом в раздел для мальчиков
Данная команда вернёт нам объект, а значит мы сразу можем обратиться к ключу href и получить заветное значение:
document.querySelector("#\\37 135 > a").href
Результат выполнения:
Значение атрибута href из а — JavaScript
Мы получили значение href из a. В нашем случае это URL:
"https://www.ozon.ru/category/igrushki-dlya-malchikov-7135/"
Оператор with
Вы, вероятно, даже не слышали об этой конструкции в JavaScript, так как она не особо широко используется. Даже официальная документация MDN призывать избегать ее, потому что она может сильно запутать код.
Оператор позволяет расширить цепь областей видимости (scope chain) для определенного оператора. Другими словами, с его помощью можно встроить выражение в область видимости определенного оператора, в идеале при этом упрощая его.
Ниже показан пример.
Обратите внимание на то, как действует оператор внутри функции. Теперь рассмотрим другой случай, в котором все становится немного сложнее
Как думаете, каким будет результат этого выполнения?
Скорее всего, вы перезаписали второй аргумент функции, добавив к объекту свойство с таким же именем. И это абсолютно нормально, так как сложно представить, что оба они будут находиться на одном уровне области видимости. Однако благодаря обе области смешались, а полученный результат далек от идеала.
Может показаться, что оператор помогает сэкономить несколько нажатий клавиш. Однако в скором времени он сильно усложняет код и его дальнейший анализ как для других разработчиков, так и для вас самих. Поэтому стоит его избегать.