В чем разница между (var1 !== var2) и (var1 && var1 !== var2) в JavaScript?

avatar
Ali S
1 июля 2021 в 19:41
75
3
0

В чем разница между (var1 !== var2) и (var1 && var1 !== var2) в JavaScript?

Приведенный выше вопрос относится к работе с объектами HTMLElementObject в качестве переменных.

Пример разработки расширения для Google Chrome показывает это в следующей функции:

  let current = event.target.parentElement.querySelector(
    `.${selectedClassName}`
  );
  if (current && current !== event.target) {
    current.classList.remove(selectedClassName);
  }

  let color = event.target.dataset.color;
  event.target.classList.add(selectedClassName);
  chrome.storage.sync.set({ color });
}

Почему это должно быть "текущий && текущий"? Это не работает только с "current !== event.target"

Ссылка на полную статью для справки: https://developer.chrome.com/docs/extensions/mv3/getstarted/#logic

Источник
DBS
1 июля 2021 в 19:43
2

Думайте об этом как (current) && (current !== event.target)

t3dodson
1 июля 2021 в 19:44
1

в javascript у вас есть понятие «правдивого» или «ложного» значения. Это может указывать на то, что вы хотите ввести оператор if только в том случае, если значение current не равно null или undefined.

epascarello
1 июля 2021 в 19:51
0

Прочитайте это как «Существую ли я» И «Разве я не равняюсь этому». Когда вы удаляете первую проверку, это «Я не равняюсь этому», что верно. Вы чем делаете и пытаетесь получить доступ к чему-то, чего не существует.

Ответы (3)

avatar
Isaac Corbrey
1 июля 2021 в 19:47
2

Это связано с приоритетом операций JavaScript:

11: Строгое неравенство (!==)
...
7: Логическое И (&&)

Поскольку строгое неравенство имеет более высокий приоритет, чем логическое И, оно функционально эквивалентно следующему:

(current) && (current !== event.target)

Люди, которые написали учебник, скорее всего, не хотели, чтобы это выражение оценивалось как истинное, если current было каким-либо ложным значением. Делая это, они гарантируют, что event.target не может просто быть каким-либо старым значением и по-прежнему передаваться.

avatar
0xLogN
1 июля 2021 в 19:45
1

Он проверяет, является ли current истинным И не равен ли event.target. Если event.target и current равны нулю, он все равно вернет false

ShadowRanger
1 июля 2021 в 19:55
0

event.target не может быть null (в этом случае предыдущая строка вызовет исключение), поэтому случай, описанный во втором предложении, невозможен. Цель состоит в том, чтобы убедиться, что current является чем-то (не null или чем-то еще), и, что это не то же самое, что event.target. Управляемый блок предназначен для выполнения только тогда, когда current является новым «чем-то», отличным от event.target.

0xLogN
1 июля 2021 в 20:56
0

@ShadowRanger: Я знаю, это был просто пример.

avatar
Wax
1 июля 2021 в 19:45
-1

Первая проверка Var в var && var... проверяет, не является ли var нулевой или неопределенной, а затем сравнивает ее с var2 На самом деле, вы могли бы написать это так:

If (var !== null || var !== undefined || var !== false) {
 return  var !== var2
}