提问人:juan manuel taboada álvarez 提问时间:10/13/2021 最后编辑:juan manuel taboada álvarez 更新时间:10/13/2021 访问量:60
比较 2 个变量时给出与 === 相同的结果的最短函数
Shortest function that gives same result as === when comparing 2 variables
问:
这是我的看法。有没有可能让它更短?(不仅仅是把它变成一个箭头函数) 不得使用任何 ===
这是我的第三次尝试,我现在真的不知道是否有可能进一步缩短它
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); }
答:
0赞
Roman Kurbatov
10/13/2021
#1
修改版本:
function strictEqual(a,b) {
return (Object.is(a, b) || Object.is(a+1, b+1)) && !Number.isNaN(a)
}
评论
0赞
juan manuel taboada álvarez
10/13/2021
这是一个很好的尝试,但我需要在没有 === 的情况下这样做
0赞
Roman Kurbatov
10/13/2021
好的,然后将 === a 替换为 ,它仍然比你的短!Number.isNaN(a)
0赞
juan manuel taboada álvarez
10/13/2021
我编辑了我的,因为它给出了误报。你也是。这个效果很好
上一个:浮点数学坏了吗?
评论