这条JS系列如何运作?

时间:2015-12-04 19:00:49

标签: javascript comparison operators

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

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

x1,x2和minWidth都是数字

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

3 个答案:

答案 0 :(得分:5)

首先,让我们看一下短路。假设您有像

这样的行
var A = B || C;

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

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

接下来,我们考虑类型转换如何在Javascript中工作。只要您使用给定值相乘,该值就会被强制转换为数字。对于true,该数字为1

最终,它意味着&#34;如果x2&gt; = x1,则翻转最小宽度的符号。&#34;

答案 1 :(得分:2)

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

数字示例:

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

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

因此,这是一种产生负值或正值转换的方法。

答案 2 :(得分:0)

该行的详细等价物就像是,

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

在JavaScript中,true也等于1.知道这一点,您可以使用该值来快捷一些逻辑。

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

这是你的例子中发生的事情。由于条件中该部分的值为true也等于1,因此作者保存了一个步骤并使用了该值。