【问题标题】:Shortest function that gives same result as === when comparing 2 variables比较 2 个变量时给出与 === 相同结果的最短函数
【发布时间】:2021-12-01 08:59:26
【问题描述】:

这是我的看法。有没有可能让它更短? (不仅仅是把它变成一个箭头函数) 不得使用任何 ===

这是我第三次尝试,我现在真的不知道是否可以进一步缩短它

function strictEquals(a, b) {
  if ([a, b].every(isNaN)) return false;
  return Object.is(a + 0, b + 0) || Object.is(a, b);
}

第二次尝试。

function strictEquals(a, b) {
  if (Number.isNaN(a) && Number.isNaN(b)) {
    return false;
  }
  if (
    (Object.is(a, 0) && Object.is(b, -0)) ||
    (Object.is(a, -0) && Object.is(b, 0))
  ) {
    return true;
  }
  return Object.is(a, b);
}

你可以用这一系列测试来测试你的

console.log('(1, 1), expected true', strictEquals(1, 1));
console.log('(NaN, NaN), expected false', strictEquals(NaN, NaN));
console.log('(0, -0), expected true', strictEquals(0, -0));
console.log('(-0, 0), expected true', strictEquals(-0, 0));
console.log("(1, '1'),expected false", strictEquals(1, '1'));
console.log('(true, false), expected false',strictEquals(true,false));
console.log('(false, false), expected true', strictEquals(false,false));
console.log("('Water', 'Oil'), expected false", strictEquals('Water', 'Oil'));
console.log('(Undefined, NaN), expected false', strictEquals(undefined, NaN));

这是一个错误(我的第一次尝试)

function strictEquals(a, b) { if ((Number.isNaN(a) && Number.isNaN(b)) || !Object.is(a, b)) return false; return Object.is(a + 1, b + 1); }

【问题讨论】:

    标签: javascript comparison equality iequalitycomparer


    【解决方案1】:

    修改版:

    function strictEqual(a,b) {
      return (Object.is(a, b) || Object.is(a+1, b+1)) && !Number.isNaN(a)
    }
    

    【讨论】:

    • 这是一个很好的尝试,但我需要在没有===的情况下这样做
    • 好的,然后把a === a 换成!Number.isNaN(a),还是比你的短
    • 我编辑了我的,因为它给出了误报。你的也是。这个效果很好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    • 2020-02-23
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多