@mikitachyzhyk

Как происходит преобразование типов и возврат значения в данном примере?

Задача функции вернуть минимальное число из двух.
Не могу понять почему она работает, почти всегда, за одним исключением.

function min(a, b) {
    return a < b && a||b;
}
console.log( min(5, 6) ); // Вернет 5

Здесь например, по моему мнению, такой порядок событий:
1) 5 < 6, возвращает true
2) true && 5||6
3) 5||6, возвращает 5, т.к. в логическом контексте 5 = true, а || останавливается на первом попавшемся true и возвр. исходное значение

Пока вроде бы все сходится.

console.log( min(6, 5) ); // Вернет 5

Здесь так:
1) 6 < 5, возвращает false
2) false && 6||5, возвращает false, т.к. && останавливается на первом false и возвр. исходное значение (false, а не 5) ?

console.log( min(0, 6) ); // Вместо 6 любое может быть положительное число

В данном случае возвращает 6. Почему так?
  • Вопрос задан
  • 46 просмотров
Решения вопроса 2
Stalker_RED
@Stalker_RED
Здесь например, по моему мнению, такой порядок событий:

В данном случае возвращает 6. Почему так?

Если вместо мнения смотреть таблицу приортиетов, то все четко.
&& приотритетнее, чем ||

То есть выражение false && 6||5 это
(false && 6) || 5 а так как false && 6 это false, то false || 5 возвращает 6
И таким же образом (false && 0) || 6 вернет 6

А вообще, Math.min() уже изобрели.

const min = (a, b) => Math.min(a, b);
Ответ написан
AlexanderBaranchugov
@AlexanderBaranchugov
Я такой
Все дело в приоритетах и в значениях.
При min(0, 6) получается следующее:
0 < 6 && 0
результат0 < 6 равен true, а вот 0 эквивалентен false, тогда вся часть выражения a < b && a (0 < 6 && 0), будет равна false, а выражение false || 6 вернет 6

попробуй так:
return a < b ? a : b
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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