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

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

时间:2023-11-10 16:55:06浏览次数:31  
标签:输出 arr indexOf newArr NaN includes true

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

标签:输出,arr,indexOf,newArr,NaN,includes,true
From: https://www.cnblogs.com/longmo666/p/17824491.html

相关文章

  • 执行以下代码,输出结果为()
    执行以下代码,输出结果为()console.log(1);leta=setTimeout(()=>{console.log(2)},0);console.log(3);Promise.resolve(4).then(b=>{console.log(b);clearTimeout(a);});console.log(5);promise对象的then()方法属于微任务,而setTimeout()定时器函数为宏任......
  • 怎么通过LiveNVR流媒体平台配置实现将海康Ehome、ISUP协议统一接入实现Web无插件播放
    @目录1、海康ISUP接入配置2、海康设备接入2.1、海康EHOME接入配置示例2.2、海康ISUP接入配置示例3、通道配置3.1、直播流接入类型海康ISUP3.2、海康ISUP设备ID3.3、启用保存3.4、接入成功4、相关问题4.1、其它方式接入4.2、如何输出GB281815、RTSP/HLS/FLV/RTMP拉流Onvif流媒......
  • 请问以下JS代码在Node环境下的输出顺序是?
    请问以下JS代码在Node环境下的输出顺序是?Promise.resolve().then(()=>{console.log('p1');}).then(()=>{console.log('p2');})process.nextTick(()=>{console.log('n1');process.nextTick(()=>{console.log('......
  • 已知数组arr = [2,20,3,12,9],现在要对数组进行遍历,只要数组存在大于10的元素,则输出tru
    Avarres=arr.filter((val1,val2)=>{returnval1>10;})console.log(res);Bvarres=arr.some((val1,val2)=>{returnval1>10;})console.log(res);Cvarres=arr.every((val1,val2)=>{returnval1>10;})console.log(res);Dvarres......
  • Android 开机阶段会输出哪些log?
    Android开机阶段输出哪些log?开机loghttp://aospxref.com/android-14.0.0_r2/xref/system/core/init/perfboot.py #Thedefaulteventtagstorecord._DEFAULT_EVENT_TAGS=['boot_progress_start','boot_progress_preload_start','boo......
  • 请问以下JS代码的输出是? 935、 ['read', 'write']
    functionfather(){this.num=935;this.work=['read','write','listen'];}functionson(){}son.prototype=newfather();letson1=newson();letson2=newson();son1.num=117;son1.work.pop();console.log(son2.......
  • 下列表达式中,结果为NaN的是(D)
    A123+nullB123/0C123+'1';D123+undefined;对于“+”运算,如果一端为字符串,则另一端会被转为字符串进行字符串之间的连接,因此C选项结果为1231,如果一端为Number类型,另一端为原始数据类型,则另一端会被转为Number类型,再相加,null会被转为0,A选项结果为123,undefined会被......
  • "+new Array(017)" 这段代码输出为 NaN
    首先,前面+是一元运算符,相当于我们说的正负,无运算效果,但是可以将字符串等转为number类型。此题中017其实是八进制,故而是是Array(15)。这里相当于对于一个未赋值但是长度为15的数组进行number类型转化,其结果为NaN八进制的17转为二进制:001111,再转为十进制的15(8+4+2+1)+运算符......
  • 以下代码执行后,输出结果为 抛出ReferenceError
    letx=10;letfoo=()=>{console.log(x);letx=20;x++;}foo();使用let声明的变量,既不会发生变量提升,同时又存在“暂时性死区”,所以在块级作用域内,如果使用let声明一个变量,那么该变量在声明之前是不可用的,否则会抛出ReferenceError异常一楼的回答说:”l......
  • 执行以下代码,5 秒后内输出的结果为 5 5 5 5 5
    for(vari=0;i<5;i++){setTimeout(function(){console.log(i);},1000*i);}setTimeout()是一个异步函数,由于js会先执行所有同步任务,再执行异步任务,所以当开始执行setTimeout()异步任务时,for循环早已结束,并且由var声明的变量i不具有块级作用域的特......