Javascript中的组合比较/“太空飞船”运算符(<=>)?

前端之家收集整理的这篇文章主要介绍了Javascript中的组合比较/“太空飞船”运算符(<=>)?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Ruby有一个称为组合比较或“太空船”运算符的东西,它看起来像这样:< =>

它执行以下操作:

a <=> b :=
    if a < b then return -1
    if a = b then return  0
    if a > b then return  1

Credit

Javascript中是否有类似的运算符?如果没有,我怎么能得到相同的结果?

@ madox2建议使用Math.sign(a – b),它适用于数字,但不适用于数组(比较需要使用array.length的数组).

它在Internet Explorer,Safari或所有移动浏览器中也不起作用(参见MDN)

@duques_l找到了一个函数here.它运行得很好,你可以在JSFiddle上测试它

唯一的问题是如果字符串不可比,则函数返回-1而不是nil

更新:@duques_l稍微改变了函数,现在它工作正常(我想是的,无论如何,这里是JSFiddle):

function spaceship(val1,val2) {
    if ((val1 === null || val2 === null) || (typeof val1 != typeof val2)) {
        return null;
    }
    if (typeof val1 === 'string') {
        return (val1).localeCompare(val2);
    }
    else {
        if (val1 > val2) { return 1 }
        else if (val1 < val2) { return -1 }
        return 0;
    }
}

解决方法

来自: http://sabrelabs.com/post/48201437312/javascript-spaceship-operator

改良版:

function spaceship(val1,val2) {
  if ((val1 === null || val2 === null) || (typeof val1 != typeof val2)) {
    return null;
  }
  if (typeof val1 === 'string') {
    return (val1).localeCompare(val2);
  } else {
    if (val1 > val2) {
      return 1;
    } else if (val1 < val2) {
      return -1;
    }
    return 0;
  }
}

猜你在找的JavaScript相关文章