javascript - indexOf 方法如何返回错误值?

标签 javascript

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/0sqrt(-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/

相关文章:

javascript - 在 jQuery 中全局定义一个函数

javascript - 替换字符串中的变量替换错误的字符

javascript - HTML Canvas 渐变仅显示一种颜色

javascript - Jquery 在最后一个子按键上附加输入

Javascript - 如何编写异步函数

javascript - 如何在 Chrome/Firefox 中结合自动对焦选择页面加载时输入的所有文本

javascript - Mongo $sample(聚合)在 Node REST 服务器中的 GEToperation 中不工作

javascript - 如何检查选择标签值

JavaScript:有人能告诉我我的代码出了什么问题吗?

Javascript 函数没有获得完整的值