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