Esta es mi opinión sobre ella. ¿Es posible hacerlo más corto? (No solo convirtiéndolo en una función de flecha) No debe usar ninguna ===
este es mi tercer intento, realmente no sé ahora si es posible acortarlo aún más
function strictEquals(a, b) { if ([a, b].every(isNaN)) return false; return Object.is(a + 0, b + 0) || Object.is(a, b); }segundo intento.
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); }puedes poner a prueba la tuya con esta batería de tests
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));este fue un error (mi primer intento)
function strictEquals(a, b) { if ((Number.isNaN(a) && Number.isNaN(b)) || !Object.is(a, b)) return false; return Object.is(a + 1, b + 1); }Versión modificada:
function strictEqual(a,b) { return (Object.is(a, b) || Object.is(a+1, b+1)) && !Number.isNaN(a) }