代码之家  ›  专栏  ›  技术社区  ›  Musixauce3000

为什么语句“0<0.5<1”会变成false?

  •  0
  • Musixauce3000  · 技术社区  · 6 年前

    我最近发现 ECMAScript Spec Math.random() 一段时间;也就是说它是否会产生 0 不需要你的帮助 Math.floor() .

    ECMAScript规范指定 0 <= Math.random() < 1 因为某种原因,不像其他人。我跳转到控制台并运行了一个测试,然后将其保存在笔记中,但注意到该语句减少到 false

    下面是一个函数,它测试关于比较语句的所有内容,我认为这些语句可能会导致这个谎言。我调用函数两次以生成两个布尔值数组,结果似乎暗示了以下语句: 0<=Math.random()<1. -单凭这句话,就有了回报 FALSE TRUE true

    function getTruths( a, b, c ) {
      
      return [
        
        a + 1 < b + 1,
        a + 1 < c + 1,
        b + 1 < c + 1,
        a + 1 < b + 1 < c + 1,
        
        a + 0 < b + 0,
        a + 0 < c + 0,
        b + 0 < c + 0,
        a + 0 < b + 0 < c + 0
        
      ];
      
    }
    
    function demonstrate() {
      
      // array of truth
      console.log( getTruths( 0, 1, 2 ) );
      
      // array of lies
      console.log( getTruths( 0, 0.5, 1 ) );
      
      // bonus round
      return [ 0 < 0.5 < 1 < 1.5 ];
      
    }
    
    demonstrate();

    所以我做了更多的尝试,并了解到不仅仅是这样。看来 a b 实际上可以是任何小于1等于或大于0的值,只要 A. ,和 c 仍然等于 1 当然考虑到这些参数,不管怎样,回报仍然是 . 如果你加上 1. 尽管你突然又恢复了良好的状态,就像上面提供的功能一样。

    1 回复  |  直到 6 年前
        1
  •  4
  •   Pointy    6 年前
    a < b < c
    

    被解释为

    (a < b) < c
    

    关系运算符的结果值,如 < 是布尔值,为真或假。如果 c true )或0( false ). 因此 与0或1进行比较,而不是两者的值 a b

    正确的书写方式是 B 严格介于 A. C

    a < b && b < c