我们有一个包含真值和假值的元素数组。我们的工作是编写一个函数,该函数返回一个数组,该数组的索引为原始数组中的NaN。
NaN的数据类型实际上是数字。尽管NaN是一个伪造的值,但它具有其他数据类型或变量没有的特殊属性。就是NaN === NaN表达式会产生false。而且只有在NaN的情况下,它才是错误的。
因此,我们可以充分利用此行为,并选择NaN值指数。为此的代码将是-
const arr = [7, 1, "123abc", undefined, NaN, 78, NaN, null, "aes", NaN, '', null, NaN]; const pickNaN = (arr) => { return arr.reduce((acc, val, ind) => { if(val !== val){ acc.push(ind); }; return acc; }, []); }; console.log(pickNaN(arr));
isNaN()
/ Number.isNaN()该isNaN()
方法基于这样的事实提供的值是否是NaN或可以强制转换为NaN返回true或false。而Number.isNaN()函数仅在提供的值实际上是NaN时才返回true。
因此,Number.isNaN()是检查NaN over的可靠方法isNaN()
。代码输出的差异如下所示。
const arr = [7, 1, "abc", undefined, NaN, 78, NaN, null, "aes", NaN, '', null, NaN]; const pickNaN = (arr) => { return arr.reduce((acc, val, ind) => { if(Number.isNaN(val)){ acc.reliableWay.push(ind); }; if(isNaN(val)){ acc.unreliableWay.push(ind); } return acc; }, { reliableWay: [], unreliableWay: [] }); }; console.log(pickNaN(arr));
这段代码准备了两个数组,一个使用Number.isNaN(),另一个使用isNaN()
。
输出结果
输出将是-
{ reliableWay: [ 4, 6, 9, 12 ], unreliableWay: [ 2, 3, 4, 6, 8, 9, 12] }
我们可以清楚地看到如何isNaN()
计算许多非NaN值作为NaN。这就是为什么Number.isNaN()是一种更可靠的方法。