gpt4 book ai didi

javascript - 检查 NaN 为真/假时出现问题

转载 作者:行者123 更新时间:2023-11-30 09:19:25 25 4
gpt4 key购买 nike

我正在 freecodecamp 上进行算法挑战,他们提供的解决方案非常整洁:

function bouncer(arr) {
return arr.filter(Boolean);
}

不幸的是,作为一个菜鸟并且没有考虑那个高阶函数,我反而创建了这个冗长的怪物:

 function bouncer(arr) {
let truthyArray = [];
let falsyArray = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] == false || arr[i] === null || arr[i] === NaN || arr[i] === undefined) {
falsyArray.push(arr[i]);
} else {
truthyArray.push(arr[i]);
}
}
return truthyArray;
}

在之前的测试中,它似乎完成了工作。然而,NaN 并没有配合。

bouncer([1, null, NaN, 2, undefined])

返回:

[1, NaN, 2]

关于如何测试 NaN 有什么想法吗?

最佳答案

问题是 NaN !== NaN:

console.log(NaN === NaN);

(这是有道理的,因为 NaN 只是一个占位符,表示人们期望一个数字,但无法计算数值 - 例如,0/0 (NaN) !== ('foo' * 3) (NaN))

相反,您可以使用 Number.isNaN,它将检查传递的值是否是 Number 以及 NaN

console.log(Number.isNaN(NaN));

function bouncer(arr) {
let truthyArray = [];
let falsyArray = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] == false || arr[i] === null || Number.isNaN(arr[i]) || arr[i] === undefined) {
falsyArray.push(arr[i]);
} else {
truthyArray.push(arr[i]);
}
}
return truthyArray;
}

console.log(bouncer([false, null, 0, NaN, undefined, ""]));

确保使用 Number.isNaN 而不是普通的 isNaN,这会排除真实的非数字。

关于javascript - 检查 NaN 为真/假时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52684821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com