美文网首页
磨人的NaN小妖精

磨人的NaN小妖精

作者: 灯不梨喵 | 来源:发表于2017-07-17 12:28 被阅读0次

    用这道题来理解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;

    }

    稳了。

    相关文章

      网友评论

          本文标题:磨人的NaN小妖精

          本文链接:https://www.haomeiwen.com/subject/xayfkxtx.html