Странность неявной типизации JS

145
04 декабря 2019, 04:00

Я только начал изучать JS, до этого (как и сейчас) кодю на C#. Для меня неявная типизация JS - просто ужас! Появился конкретный кейс, код успешно не работает.

if (step + direction < 0) {
    document.writeln("outdown");
} else {
    step += direction;
    document.writeln(step);
}

При этом step в начале выполнения 0, а direction -1. Вместо надписи outdown выводится "0-1". Я понимаю, что это происходить из-за того, что одна переменная не int, а string. Как это починить я не знаю.

Answer 1

Пример, который я составил по вашему описанию работает корректно

let step = 0; 
let direction = -1; 
 
if (step + direction < 0) { 
    document.writeln("outdown"); 
} else { 
    step += direction; 
    document.writeln(step); 
}

А вот этот выводит указанный Вами текст:

let step = "0"; 
let direction = -1; 
 
if (step + direction < 0) { 
    document.writeln("outdown"); 
} else { 
    step += direction; 
    document.writeln(step); 
}

Все дело в том, что во втором примере, а значит и у вас step не 0 а "0", т.е. строка;

решать это можно либо неявным приведением к Number:

step = +step;

или явно вызывая функцию Number:

step = Number(step);
READ ALSO
JS: изменить стиль display по таймеру

JS: изменить стиль display по таймеру

Я не очень сильна в JS, помогите пожалуйста решить вопросЕсть div, который нужно отображать каждые условно 5 минут

121
Всплывающее окно не отображается magnific-popup

Всплывающее окно не отображается magnific-popup

Есть несколько товаров с кнопкой заказать, при нажатии ничего не происходит, и ещё вопрос как можно передать название именно того товара...

129
Параметры функции по умолчанию

Параметры функции по умолчанию

В стандарте ES-2015 появилась возможность задавать параметры функции по умолчанию, выглядит это так:

116