我正在阅读第三方javascript库的代码,它有以下几行:
x2 = x1 - minWidth * (x2 < x1 || -1);
x1,x2和minWidth都是数字
我想知道(x2 < x1 || -1)
部分。比较运算符如何在这里工作?
答案 0 :(得分:5)
首先,让我们看一下短路。假设您有像
这样的行var A = B || C;
如果B
为truthy值,则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 = 5
,x1 = 3
,x2 = 2
。 x2 = 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,因此作者保存了一个步骤并使用了该值。