磨人的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小妖精_第1张图片

数字删掉了……

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

冷静一点!!!!

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


磨人的NaN小妖精_第2张图片

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你个小妖精,软硬不吃,是非不分。

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


磨人的NaN小妖精_第3张图片


翻译成代码就是
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;

}

稳了。

你可能感兴趣的:(磨人的NaN小妖精)