Какая польза от побитового и (& 1) в javascript?

Из учебника здесь,

function notePressed(event) {
  if (event.buttons & 1) {
    let dataset = event.target.dataset;

    if (!dataset["pressed"]) {
      let octave = +dataset["octave"];
      oscList[octave][dataset["note"]] = playTone(dataset["frequency"]);
      dataset["pressed"] = "yes";
    }
  }
}

Какая польза от event.buttons & 1? Почему используется побитовое И?

«Почему используется побитовое И?» - потому что event.buttons является целым числом. Это синтаксически краткий способ проверить, содержит ли events.buttons бит 1, поскольку это целое число флагов (битового поля), которое также может быть 3 (кнопки 1 и 2), 2 (только кнопка 2) и т. д.

Dai 22.12.2020 14:05

@dai, может быть, это должен быть ответ?

Jonas Wilms 22.12.2020 14:10
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
110
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Здесь event.buttons возвращает целочисленное значение, которое представляет собой нажатую кнопку мыши. Согласно MDN возвращается -

  • 0 : Нет кнопки или не инициализировано
  • 1 : основная кнопка (обычно левая кнопка)
  • 2 : дополнительная кнопка (обычно правая кнопка)
  • 4 : Вспомогательная кнопка (обычно кнопка колесика мыши или средняя кнопка)
  • 8 : 4-я кнопка (обычно это кнопка «Назад в браузере»)
  • 16 : 5-я кнопка (обычно кнопка «Вперед в браузере»)

Итак, в конечном итоге, что мы получаем от этого event.buttons? Целочисленное значение.

Теперь перейдите к вашему общему фрагменту кода. Что означает строчка if (event.buttons & 1)? Давайте рассмотрим пример того, что делает & 1 с 32-битным целым числом.

0 & 1 => 0
1 & 1 => 1
2 & 1 => 0
3 & 1 => 1
23 & 1 => 1
46 & 1 => 0

Итак, если мы выполняем & 1 с любым 32-битным целым числом, то для четных чисел возвращается 0, а для нечетных — 1. Мы можем легко обнаружить любые нечетные/четные числа, используя побитовую операцию AND 1.

Теперь вы знаете, что 0 — ложное значение, поэтому условие if никогда не выполняется, если мы получаем 0 из оператора. Итак, if (event.buttons & 1) проверяет, дает ли event.buttons нечетное число, затем выполняет блок if, иначе нет.

Я надеюсь, что смогу очистить его.

Другие вопросы по теме