这行JS代码是如何工作的?

4
我正在阅读一个第三方JavaScript库的代码,其中有以下行:

x2 = x1 - minWidth * (x2 < x1 || -1);

x1、x2 和 minWidth 都是数字。

我想知道 (x2 < x1 || -1) 这部分怎么工作?这里的比较运算符是如何运作的?

3个回答

5

首先,让我们看一下短路。假设您有这样一行代码:

var A = B || C;

如果 B 是一个 truthy 值,那么 A 将被设置为 B。如果不是,则 A 将等于 C
将其重新应用到您的情况中,如果 x2 < x1 为真,则该表达式的结果为 true。否则,结果将为 -1
接下来,我们考虑 Javascript 中类型转换的工作原理。每当使用给定值进行乘法运算时,该值会被强制转换为数字。对于 true,该数字为 1
最终,它的含义是“如果 x2 >= x1,则翻转最小宽度的符号”。

2
在这里,它的意思是如果x2小于x1则返回true,否则返回-1。true转换为1,因此可以简化为minWidth * 1 或 -1 数字示例: minWidth = 5x1 = 3x2 = 2x2 = 5 * (true OR -1) 简化后:x2 = 5* true = x2 = 5*1 因此,这是一种产生负值或正值转换的方法。

那很有道理...谢谢你用通俗易懂的语言解释。 - Undefined Variable
1
MikeC的回答中有一个关于真值的好链接,你应该阅读一下。很高兴我能帮到你! - Sterling Archer

0

那行代码的冗长等价物可能是这样的:

if(x2 < x1){
    x2 = x1 - minWidth * 1;
} else {
    x2 = x1 - minwidth * -1;
}

在JavaScript中,true也等于1。知道了这一点,您可以使用该值来快捷处理某些逻辑。
此外,||二进制运算符将在遇到true时继续执行。条件语句内部的true之后的所有内容都将被忽略。这称为短路。
这就是您示例中发生的情况。由于当true时该条件部分的值也等同于1,因此作者节省了一步并只使用了该值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接