Не работают логические операторы 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) );