function bouncer(arr) {
var array = [false, null, 0, NaN, undefined, ""];
var result = [];
for (var i = 0; i < arr.length; i++) {
if (array.indexOf(arr[i]) === -1) {
result.push(arr[i]);
}
}
return result;
}
ex : bouncer([7, "ate", "", false, 9]) should return [7, "ate", 9].
大家好,
我试图删除数组输入中的所有错误值,但不知何故,当我运行 bouncer([false,null, 0, NaN, undefined, ""]);
我得到 [NaN]
作为返回值,而我期待一个空数组。有谁知道为什么函数返回错误值?
最佳答案
因为 NaN
实际上是一个概念,而不是一个具体的数字。
考虑两个“数字”0/0
和 sqrt(-1)
。这些都不是在实数空间中定义的,因此都给出 NaN
,但它们显然是不同的值。
因为 NaN
基本上表示一个无法在 IEEE-754 中表示的未知值,所以它永远不会被认为等于另一个 NaN
,甚至它本身。
这是正确的做法,因为考虑到在 IEEE-754 中没有实际表示的数字的无穷大(字面意思),它们中的两个是相同数字的机会是无限小的:-)
事实上,isNaN()
的许多实现都依赖于此功能,即(伪代码):
define isNaN(n):
return n != n
要真正解决这个问题,一种方法是从检查数组中删除 NaN
并稍微修改条件:
var array = [false, null, 0, undefined, ""];
:
if ((array.indexOf(arr[i]) === -1) && (! isNaN(arr[i])) {
关于javascript - indexOf 方法如何返回错误值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40943673/