这个JS行是如何工作的

How does this JS line work?

本文关键字:工作 何工作 JS 这个      更新时间:2023-09-26

我正在阅读第三方javascript库的代码,它有以下行:

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

x1、x2和minWidth都是数字

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

首先,让我们来看看短路。假设你有一条类似的线路

var A = B || C;

如果B是真值,则A将被设置为B。如果不是,则A将等于C

将其应用于您的情况,如果x2 < x1为真,则该表达式的结果将为true。否则,结果将为-1

接下来,我们将考虑类型转换在Javascript中是如何工作的。任何时候使用给定值相乘,该值都会被强制为一个数字。对于true,该数字为1

最终,它意味着"如果x2>=x1,翻转最小宽度的符号。"

在英语中,如果x2小于x1,则返回true,否则返回-1。true转换为1,因此可以归结为minWidth * 1 or -1

数字示例:

minWidth = 5x1 = 3x2 = 2x2 = 5 * (true OR -1)

减少:x2 = 5*true=x2 = 5*1

所以这是一种产生负值或正值转换的方法。

该行的详细等效项类似于

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

在JavaScript中,true也等于1。知道了这一点,您可以使用该值来简化某些逻辑。

此外,一旦到达true,||二进制运算符就会继续。条件语句中跟随true的所有内容都将被忽略。这被称为短路。

这就是您的示例中正在发生的情况。由于条件的该部分的值在为true时也等于1,因此作者保存了一个步骤,并仅使用该值。