【发布时间】: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