【发布时间】:2017-08-23 20:06:28
【问题描述】:
我对下面的 if 语句代码感到困惑。不确定它到底在做什么
if (this.props.filterURL && nextProps.filterURL !== this.props.filterURL) {}
有人可以帮我理解吗?
if 语句是否短路: 即
1- 如果左侧的第一个 this.props.filterURL 为假,那么它将返回假。 2- 如果第一个 this.props.filterURL 有一个值,那么它将返回 true,并且第二个变量 nextProps.filterURL 将与语句最右侧的 this.props.filterURL 进行比较?
【问题讨论】:
-
你说的是对的。首先它检查 this.props.filterURL 的值是否为真。如果失败,则返回 false,如果为 true,则仅检查条件 nextProps.filterURL !== this.props.filterURL
-
你总结的很准确。表达式的左操作数为假会使整个表达式为假,这一事实确实是短路的。
-
如果 this.props.filterUrl 是真的,它将继续检查是否不等于 nextProps.filterUrl,如果整个事情都是真的,那么执行封闭的代码。
-
请注意,第一个
this.props.filterURL正在检查 truthy 值,而不是专门检查true。如果未定义 falsy 的属性,但如果值为null或0或空字符串,则它们也都是假的。 -
这在 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 等地方都有很好的记录,在 SO 上也有很多帖子。在控制台或沙箱/REPL 中验证也非常容易。
标签: javascript if-statement short-circuiting