这个JS行是如何工作的
How does this JS line work?
我正在阅读第三方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 = 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;
}
在JavaScript中,true
也等于1。知道了这一点,您可以使用该值来简化某些逻辑。
此外,一旦到达true
,||二进制运算符就会继续。条件语句中跟随true的所有内容都将被忽略。这被称为短路。
这就是您的示例中正在发生的情况。由于条件的该部分的值在为true时也等于1,因此作者保存了一个步骤,并仅使用该值。
相关文章:
- Javascript:selenium Web驱动程序isDisplayed()不工作
- jQuery UI自动完成突然停止工作
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- JavaScript打印功能使日历停止工作
- Javascript.getHours()工作不正常
- 为什么这在IE中的工作方式与在Firefox中不同
- 视频HTML没有'无法在Internet Explorer 11上工作
- 扩展移相器按钮类不工作
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- 谷歌地图不是以HTML显示,而是在JS Fiddle上工作
- 正在尝试使用if和else添加类,但无法正常工作
- Jquery FadeIn FadeOut 只工作一次
- Foreach无法在Typescript中工作
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- 最大高度转换不;不工作,工作缓慢
- Gulp-rev:不是第一次工作,而是在第一次工作之后工作
- 在JavaScript中的类中,push和concat的工作方式有何不同
- JQuery - Ajax: encodeUriComponent不工作(EncodeUri工作)