与 NaN 的比较没有按照我预期的方式工作?



我正在执行CODEWARS上的基本JavaScript Kata之一,而挑战是如果它们不是Number primitives,则在数组中过滤所有项目。

我写了以下内容:

const list = [ '123', 123, 2, 'aasf', '1', 1 ];
function filter_list(l) {
  const filteredArray = l.filter((item) => {
   if ( Number(item) !== NaN ) return item;
  });
  return filteredArray;
}
console.log(filter_list(list));

我是编程的新手,无法理解为什么这不起作用。您的解决方案是什么?

非常感谢

NaN 永远不等于包括 NaN本身![ ref ]

使用 isNaN 测试值。isNaN函数确定值是否为NaN

const list = ['123', 123, 2, 'aasf', '1', 1];
function filter_list(l) {
  const filteredArray = l.filter((item) => {
    return isNaN(item);
  });
  //could be written as l.filter(isNaN);
  return filteredArray;
}
console.log(filter_list(list));

您可以使用isNaN

const list = [ '123', 123, 2, 'aasf', '1', 1 ];
function filter_list(l) {
  const filteredArray = l.filter((item) => {
   if ( isNaN(Number(item)) ) return item;
  });
  return filteredArray;
}
console.log(filter_list(list));

isNaN功能的必要性

与JavaScript中所有其他可能的值不同,不可能依靠等位运算符(==和===(来确定值是否为 NaN,因为NaN == NaNNaN === NaN都评估为false。因此,isNaN功能的必要性。

来源:isNaN