Почему console.log() влияет на значение переменной?

174
28 августа 2018, 22:30

Для пролистывания задач у меня есть функция изменяющия номер текущей задачи:

  prevIssue () {
    var index = this.state.currentIssueIndex;
    console.log(index === 0 ? index : index--);
    var newIndex = index === 0 ? index : index--;
    this.setState({
      currentIssueIndex: newIndex
    });
  }

В приведено виде она работает. Но если я уберу console.log() то значение индекса меняется не будет. (не будет уменьшатся на единицу)

Почему это происходит, как правильно реализовать функцию?

Answer 1

Почему

Потому что эта запись

console.log(index === 0 ? index : index--);

эквивалентна такой

let res;
if (index === 0)
  res = index;
else
  res  = index;
  index--;
}
console.log(res);

Что делать

Заменить код таким

console.log(index);
if (index !== 0)
  index--;

тогда строку console.log(index); можно будет убирать при ненадобности.

Answer 2

Потому что при index, отличном от нуля, вычисляется второй операнд выражения

...index === 0 ? index : index--

Используйте if

  prevIssue () {
    var index = this.state.currentIssueIndex;
    if (index !== 0)
      index--;
    var newIndex = index === 0 ? index : index--;
    this.setState({
      currentIssueIndex: newIndex
    });
  }
READ ALSO
Не работает выделение с щелчка мыши

Не работает выделение с щелчка мыши

Не работает выделение с щелчка мыши, для добавляемых div

186
Интервал между двумя функциями

Интервал между двумя функциями

Имеется 2 функции в JS, нужно чтобы вторая выполнялась спустя 1 секунды после выполнения первойКак реализовать?

162
Почему Number(“e”) не возвращает NaN в if statement?

Почему Number(“e”) не возвращает NaN в if statement?

Есть исходные данные в задаче:

157
Не срабатывает setTimeout в js

Не срабатывает setTimeout в js

Вот этот код в целом не работает

176