Javascript if 语句短路

Javascript short circuiting in if statement

我对下面的 if 语句代码感到困惑。不确定它到底在做什么

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

有人能帮我理解一下吗?

是否是if语句短路: 即

1- 如果从左侧开始的第一个 this.props.filterURL 为假,那么它将 return 为假。 2- 如果第一个 this.props.filterURL 有一个值,那么它将 return 为真,第二个变量 nextProps.filterURL 将与语句最右边的 this.props.filterURL 进行比较?

对于 AND 运算符,它仅在第一个表达式为真时才计算第二个表达式。

在你的情况下,

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

可以解释为if(expr1 && expr2) 其中 expr1= this.props.filterURLexpr2 = nextProps.filterURL !== this.props.filterURL

对于第一个表达式 expr1 它评估它是否不是 null 或 undefined...

对于第二个表达式 expr2 nextProps.filterURL !== this.props.filterURL 它检查值和数据类型。因此,例如,如果您的两个值都与 1234 相同,但其中一个是字符串类型,另一个是数字类型,则此条件为真。

备注:

  • 这种短路有利于性能,因为它允许跳过重要的计算位。
  • AND 运算符 (&&) returns 如果两个表达式都为真则为真,否则 returns 为假。

演示版

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.