Не работают логические операторы javascript

  • Выполняется только когда idata == i5s, остальные условия не работают
  • $(".quiz__itemnew").click(function(){ idata = $(this).attr("id");});
  • if(idata == ('i5s' || 'i6s' || 'i6p' || 'i7' || 'i7p' || 'i8' || 'i8p')){}

Ответы (1 шт):

Автор решения: UModeL

Выражение в скобках с логическими операторами будет всегда возвращать первое "правдивое" значение слева:

console.log( ('' || 'i6s' || 'i6p' || 'i7' || 'i7p' || 'i8' || 'i8p')       );
console.log( (null || 'i6s' || 'i6p' || 'i7' || 'i7p' || 'i8' || 'i8p')     );
console.log( (null || undefined || 'i6p' || 'i7' || 'i7p' || 'i8' || 'i8p') );

console.log( ('i5s' || null || 'i6p' || 'i7' || 'i7p' || 'i8' || 'i8p')     );

Поэтому, ваше условие всегда сравнивает значение в idata с i5s, а остальные даже не проверяет, так как: 1) значение найдено; 2) оно правдиво (т.е. не null, не undefined и не пустая строка); 3) стоит самым первым слева.

Чтобы реализовать логику, нужно использовать другие методы:

  • Поиск совпадений в строке:

let idata = 'i7';

console.log( /i5s|i6s|i6p|i7|i7p|i8|i8p/.test(idata) );

  • Поиск совпадений в массиве:

let idata = 'i7';

console.log( ['i5s', 'i6s', 'i6p', 'i7', 'i7p', 'i8', 'i8p'].includes(idata) );

→ Ссылка