prompt()
всегда возвращает строку.
Вычитание будет пытаться привести строки к числам, поэтому один из способов исправить это - просто убедиться, что это происходит перед сложением (объединением) в остальной части предупреждения:
let tasks = {length: "5"}
alert("Please enter a number between 0 and " + (tasks.length-1) + ".");
Здесь круглые скобки работают точно так же, как в математическом уравнении: они контролируют порядок операций.В приведенных выше скобках tasks.length - 1
происходит первым, и поскольку это вычитание, переменная (которая, как мы знаем, содержит только числовые символы из-за более раннего теста isNaN()
) успешно преобразуется в число.Затем с результатом выполняются операции «сложения» (в порядке слева направо), которые случайно преобразуют его обратно в строку.
Без скобок операция будет выполняться слева направо, поэтому сначалаконкатенация «Пожалуйста, введите число от 0 до» и (строка) tasks.length
.Затем он попытается вычесть 1 из этого числа, но поскольку «Пожалуйста, введите число» не может быть преобразовано в число, вы получите NaN
.Наконец, "."соединяется с этим, в результате получается строка «NaN.»:
let tasks = {length: "5"}
alert("Please enter a number between 0 and " + tasks.length-1 + ".");