磨人的NaN小妖精

用这道题来理解NaN.


过滤数组假值

(真假美猴王)

删除数组中的所有假值。

在JavaScript中,假值有false、null、0、""、undefined和NaN。





思路:


使用filter()或者slice()非常容易解决false null 0 '' undefined,

然而NaN不同。

想当然的判定:

filter(function(n){

return n!==NaN;

});

结果是NaN还在数组里面。

老子信了你的邪!

逆反心理上来了,

return n==NaN;



数字删掉了……

杠了半天NaN,我是谁,我在哪……

冷静一点!!!!

首先让老子看看NaN是个球:


NaN = not a number,可以理解为仅限于数字范围的“非”。

http://www.shaoqun.com/a/249082.aspx 

js中的NaN不和任何值相等,包括自身。

所以可以使用x!=x来判断x是否是NaN,当且仅当x为NaN时,表达式的结果为true。

NaN != NaN    //true

alert(false==false)  //true

alert(NaN==NaN)  //false

NaN的判定:

filter(function(value){

    if(value==value)

    return value;// 对于非 NaN 值来说,永远会有返回值。

})

行了,NaN你个小妖精,软硬不吃,是非不分。

我们平时社会上遇到这种人怎么办:




翻译成代码就是
value==value

整道题解答:

1

function bouncer(arr) {

  for(var i=arr.length-1;i>-1;i--) {

    if(!arr[i]) {

      arr.splice(i,1);

    }

  }return arr;

}

2

function bouncer(arr) {

var newArr = [];

newArr=arr.filter(function(n){

return n!==false;

}).filter(function(n){

return n!==null;

}).filter(function(n){

return n!==0;

}).filter(function(n){

return n!=='';

}).filter(function(n){

return n!==undefined;

}).filter(function(n){

return n==n;

});

return newArr;

}

稳了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容