1. JavaScript / Говнокод #16148

    +159

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    var pz = 1/Infinity;
    var mz = -1/Infinity;
    
    // неотличимы
    pz == mz; // true
    pz === mz; // true
    mz < pz; // false
    pz < mz; // false
    
    // но
    Math.min(pz, mz); // -0
    Math.max(pz, mz); // 0

    Так как же отличить -0 от +0?

    (-1.0 / mz) == Infinity?

    Запостил: bormand, 11 Июня 2014

    Комментарии (6) RSS

    • P.S. Кажется дошло - их и не надо отличать. Разница будет только при делении на них.
      Ответить
      • Говно ваш жабаскрипт. То ли дело J.
        'pz mz' =: 1 _1 % _
           pz = mz
        1
           pz -: mz
        1
           pz <. mz
        0
           pz >. mz
        0
        Ответить
        • Ну так J богоподобный царь среди языков
          Ответить
    • > var mz = -1/Infinity;
      Тормозит.
      Можно было и var mz = -0.
      http://jsperf.com/zeros В хроме -0 чуть-чуть быстрее.
      Ответить
    • А Math.abs не помогает?
      Ответить
    • http://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.is
      NaN === NaN  // => false
      0 === -0     // => true
      1/0 === 1/-0 // => false
      
      if(!Object.is)Object.is = function(x, y){
        return x === y ? x !== 0 || 1 / x === 1 / y : x !== x && y !== y;
      }
      
      Object.is(NaN, NaN); // => true
      Object.is(0, -0);    // => false
      Object.is(42, 42);   // => true, аналогично '==='
      Object.is(42, '42'); // => false, аналогично '==='
      Ответить

    Добавить комментарий