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.