【问题标题】:How does this JS line work?这条 JS 线是如何工作的?
【发布时间】:2015-12-04 19:00:49
【问题描述】:

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

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

x1、x2、minWidth都是数字

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

【问题讨论】:

    标签: javascript comparison operators


    【解决方案1】:

    首先,让我们看看短路。假设你有这样一行

    var A = B || C;
    

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

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

    接下来,我们考虑一下 Javascript 中的类型转换是如何工作的。每当您使用给定值进行乘法运算时,该值都会被强制转换为数字。对于true,该号码是1

    最终,它的意思是“如果 x2 >= x1,则翻转最小宽度的符号。”

    【讨论】:

      【解决方案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

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

      【讨论】:

      • 有道理...谢谢你用简单的英语解释
      • MikeC 的回答有一个关于你应该阅读的真实值的很好的链接。很高兴我能帮上忙!
      【解决方案3】:

      该行的详细等价物类似于,

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

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

      此外,||二元运算符将在到达true 时继续。条件语句中符合 true 的所有内容都将被忽略。这称为短路。

      这就是您的示例中发生的情况。由于该部分条件为真时的值也等于1,所以作者省了一步,直接使用了那个值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-16
        • 2017-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多