Задать вопрос
@accountnujen

Почему не получается сравнить отрицание в switch?

при условии
localStorage.language = 'english';
localStorage.theme = 'dark';

и
switch(true) {
	case 'language' in localStorage:
		console.log('язык есть');
	case 'theme' in localStorage:
		console.log('тема есть');
	case !'theme' in localStorage:
		console.log('темы нет. загрузка дефолтной темы');
}

в консоли я вижу все 3 записи. Хотя если явно в консоль передать !'theme' in localStorage, то он вернёт false.

Да я знаю, что я могу сделать во втором условии break, но и у меня не 3 проверки, а значительно больше. И там не получится делать break.

Я, конечно, предполагаю, что дело в !'theme' in localStorage: , который является ну ту секунду 'language', но тогда это больше похоже на баг, чем на фичу...
  • Вопрос задан
  • 127 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@Asokr
Так как вы хотите сделать не получится если отсутствует break, проверка не выполняется - отрабатывают все инструкции после первого true.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
MvcBox
@MvcBox
Software Engineer [C/C++/JS(for Node.js)/etc]
но тогда это больше похоже на баг, чем на фичу...

Как обычно. Новички вместо попытки отладить свое поделие начинают обвинять компилятор/интерпретатор/etc.

/sarcasm on
Конечно, это же куча опытных разработчиков, которые много лет пилят V8, допустили такой "баг".
И никто в мире кроме accountnujen его не нашел!
/sarcasm off

А если серьезно - научитесь мыслить критически и подумайте, вероятность чего больше:
1. Вероятность того, что разработчики V8 допустили такой "баг".
2. Вероятность того, что accountnujen (который даже забыл break написать после console.log ) банально не знает о таком понятии как приоритет операторов.

switch(true) {
  case 'language' in localStorage:
    console.log('язык есть');
    break;
  case 'theme' in localStorage:
    console.log('тема есть');
    break;
  case !('theme' in localStorage):
    console.log('темы нет. загрузка дефолтной темы');
    // no break
}


P. S.
Хотя я даже не уверен, что вы понимаете что делаете и зачем вам switch (вы понимаете как он работает?).
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы