indexOf()方法与includes()方法的一个重要区别在于indexOf()并不能判断数组的NaN元素

已知arr = [1,2,NaN,1,4,2,NaN],现为输出arr的不重复元素(重复元素只输出一次),则下列程序中的①处,可以作为判断条件的是()

var newArr = []; for(var i = 0 ;i<arr.length;i++){ if(①){ newArr.push(arr[i]); } } console.log(newArr);

A
newArr.indexOf(arr[i]) == -1

B
!newArr.indexOf(arr[i]) == -1

C
newArr.includes(arr[i])

D
!newArr.includes(arr[i])

正确答案:D
indexOf()方法与includes()方法的一个重要区别在于indexOf()并不能判断数组的NaN元素,
换句话说,不管数组arr是否有NaN元素,arr.indexOf(NaN)返回值都是-1,
所以AB选项不能对NaN进行去重,不符合题意;
如果newArr数组不含有arr数组的某个元素,就应该把该元素添加到newArr数组中,如果含有,则不能添加,这样才能达到去重的目的,
即newArr.includes(arr[i])返回值为false时,就应该执行if内的语句,所以应该使用“!”对条件取反,D选项符合题意,C选项不符合题意

NaN 相关:
NaN == NaN // false
NaN === NaN // false

// indexOf方法无法识别数组的NaN成员
[NaN].indexOf(NaN) // -1

// 向 Set 数据结构中加入值时认为NaN等于自身
let set = new Set();
set.add(NaN);
set.add(NaN);
console.log(set); // Set {NaN}

// Object.is()方法认为NaN等于NaN
Object.is(NaN, NaN) // true
+0 === -0 //true
Object.is(+0, -0) // false

// ES7中新增的数组实例方法,includes()方法认为NaN等于自身
[1, 2, NaN].includes(NaN) // true

indexOf()判断是否相等使用的是严格相等运算符 === ,所以
[NaN].indexOf(NaN)值为-1。

includes()判断是否相等使用的是sameValueZero判断算法,所以
[NaN].includes(NaN)值为true。

[1, 2, NaN].includes(NaN); // true
console.log([1, 2, NaN].indexOf(NaN)) //-1


__EOF__

本文作者龙陌
本文链接https://www.cnblogs.com/longmo666/p/17824491.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   龙陌  阅读(49)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示