@Shimpanze

Почему не срабатывает данное условие — объясните?

Здравствуйте!

Почему не срабатывает это условие (проверка на определённые теги в цикле)? Ведь я их сгруппировал в скобки.

if (els[i].tagName.toLowerCase() === ('area' || 'base' || 'col' || 'command')) { return; }


Спасибо!
  • Вопрос задан
  • 262 просмотра
Решения вопроса 3
yanis_kondakov
@yanis_kondakov
У вас сначала выполнится'area' || 'base' || 'col' || 'command', получается у вас всегда проверяется
if (els[i].tagName.toLowerCase() === 'area') { return; }


Чтобы сделать, как вы этого хотите, можно сделать так
const values = ['area', 'base', 'col', 'command'];

if (values.includes(els[i].tagName.toLowerCase())) { 
    return; 
}
Ответ написан
profesor08
@profesor08 Куратор тега JavaScript
'area' это не ноль, не undefined, не null, а значит считается за истину, и операция || срабатывает на первой истине. Тем самым ты сравниваешь свое слово всегда с area.

Тебе надо объединить слова в массив и искать в этом массиве нужное слово.

let tags = ['area', 'base', 'col', 'command'];

if (tags .indexOf(els[i].tagName.toLowerCase()) >= 0) {
  return;
}


Тут производится поиск индекса нужного элемента в массиве, если его нет, то вернется -1, если есть, это значение от 0 до [длинны массива - 1]
Ответ написан
@balamyt92
; select * from users; --
'area' || 'base' || 'col' || 'command' на самом деле равняется 'area'

что бы сделать то что вы задумывали надо было написать так:
if (els[i].tagName.toLowerCase() === 'area' || 
els[i].tagName.toLowerCase() ===  'base' || 
els[i].tagName.toLowerCase() ===  'col' ||
 els[i].tagName.toLowerCase() ===  'command'
) { return; }

но более оптимально сделать так
let items = new Set(['area', 'base', 'col', 'command']);
if(items.has(els[i].tagName.toLowerCase())) {
 return;
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы