我正在阅读一个第三方JavaScript库的代码,其中有以下行:
x2 = x1 - minWidth * (x2 < x1 || -1);
x1、x2 和 minWidth 都是数字。
我想知道 (x2 < x1 || -1)
这部分怎么工作?这里的比较运算符是如何运作的?
x2 = x1 - minWidth * (x2 < x1 || -1);
x1、x2 和 minWidth 都是数字。
我想知道 (x2 < x1 || -1)
这部分怎么工作?这里的比较运算符是如何运作的?
首先,让我们看一下短路。假设您有这样一行代码:
var A = B || C;
B
是一个 truthy 值,那么 A
将被设置为 B
。如果不是,则 A
将等于 C
。x2 < x1
为真,则该表达式的结果为 true
。否则,结果将为 -1
。true
,该数字为 1
。x2
小于x1
则返回true,否则返回-1。true
转换为1,因此可以简化为minWidth * 1 或 -1
数字示例:
minWidth = 5
,x1 = 3
,x2 = 2
。 x2 = 5 * (true OR -1)
简化后:x2 = 5* true
= x2 = 5*1
因此,这是一种产生负值或正值转换的方法。那行代码的冗长等价物可能是这样的:
if(x2 < x1){
x2 = x1 - minWidth * 1;
} else {
x2 = x1 - minwidth * -1;
}
true
也等于1。知道了这一点,您可以使用该值来快捷处理某些逻辑。true
时继续执行。条件语句内部的true之后的所有内容都将被忽略。这称为短路。