@vetsmen

Почему при использовании switch выпадает undefined?

Использую функцию для сопоставления числа и какой-то строки:

const getType = (type) => {
	let outtype;
	switch(parseInt(type, 10)) {
		case 1:
			return outtype = 'a';
			break;
		case 2:
			return outtype = 's';
			break;
		case 3:
			return outtype = 'f';
			break;
	}
}

Далее в цикле меняю эту самую цифру на определенную строку:

for(let i = 0; i < itypes.length; i++) {
	types[i].type = getType(types[i].type);
}

Однако часто происходят случаи, когда сопоставление не происходит и банально записывается значение undefined. И такая ситуация только тогда, когда я работаю через функцию. Если я switch засуну в цикл без использования функции, то все будет нормально функционировать. В чем проблема?
  • Вопрос задан
  • 142 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
А вы не задумывались - что вернёт getType, если передать ей значение 19, или true, или '!!!!!', или... у вас же в операторе switch отсутствует ветка default - и вы ещё спрашиваете, откуда берётся undefined.

Сам код конечно просто ужасен.

case 1:
  return outtype = 'a';
  break;

Бесполезное присваивание - раз. Бесполезный break - два. Слишком многословно (если брать функцию в целом) для решения столь примитивной задачи - три. Можно же переписать как-нибудь так:

const getType = (type) => ({
  1: 'a',
  2: 's',
  3: 'f',
})[parseInt(type, 10)] || /* а здесь должно быть дефолтное значение */
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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