Javascript короткое замыкание в if

Я запутался в приведенном ниже коде оператора if. Не уверен, что именно он делает

if (this.props.filterURL && nextProps.filterURL !== this.props.filterURL) {}

Может кто-нибудь, пожалуйста, помогите мне понять это?

Это короткое замыкание в операторе if: т.е.

1- если сначала this.props.filterURL с левой стороны имеет значение false, то он вернет false. 2- если первый this.props.filterURL имеет значение, то он вернет true, а вторая переменная nextProps.filterURL будет сравниваться с this.props.filterURL в правой части оператора?

2 ответа

Решение

В случае оператора AND оно вычисляет второе выражение, только если первое является истинным.

В твоем случае,

if (this.props.filterURL && nextProps.filterURL !== this.props.filterURL) {}

можно интерпретировать как if(expr1 && expr2)где expr1= this.props.filterURL а также expr2 = nextProps.filterURL !== this.props.filterURL

для первого выражения expr1 он оценивает, не является ли он нулевым или неопределенным...

для второго выражения expr2 nextProps.filterURL!== this.props.filterURL проверяет как значение, так и тип данных. Так, например, если у вас есть оба значения как один и тот же 1234, но для одного оно имеет тип String, а для другого - для числа, это условие будет выполнено.

Заметки:

  • Такое короткое замыкание хорошо для производительности, поскольку позволяет пропустить значительные биты вычислений.
  • Оператор И (&&)возвращает true, если оба выражения верны, в противном случае возвращает false.

DEMO

var x = 1;
var y = 5;

if (x > 0 && y < 6) { console.log(x) }; // true

if(x > 1 && y < 6) { console.log(x) }; // false

  • Как предложил nnnnnn в своем комментарии, the first this.props.filterURL is checking for a truthy value, not for true specifically. If the property is not defined that is falsy, but if the value is null or 0 or an empty string those are all falsy too.
Другие вопросы по тегам