美文网首页
{ }的困惑

{ }的困惑

作者: 假装会编程 | 来源:发表于2016-10-20 15:19 被阅读0次

    被人问了一段代码的问题,一脸懵逼,为了分析清楚自己注释了一遍

    Array.prototype.uniq = function(){
        var resArr = [];//返回的去处重复元素的数组
        var flag = true;//是否已插入过NaN元素
    
        for(var i=0;i<this.length;i++){//从头到尾遍历要处理的数组
            if(resArr.indexOf(this[i]) == -1){
            //如果要返回的数字中没有当前遍历的元素
                //indexOf方法无法识别数组的 NaN成员
                //所以对于NaN元素需要单独判断
                if(this[i] != this[i]){//如果当前元素是NaN元素
                    if(flag){//且返回数组中还没有压入过NaN元素
                        resArr.push(this[i]);//插入NaN元素
                        flag = false;//标记置为已插入,即下次再遇到无需重复插入
                    }
                }else{//其他情况表示所遭遇元素还没有插入过要返回的结果数组
                    resArr.push(this[i]);//直接插入该元素即可
                }
            }
        }
        return resArr;//遍历结束,返回结果
    }
    

    然后某君曰:“{}!={}不是为true吗?那{}元素为什么可以插入很多次?

    这里就不解释我坑爹的探索之旅了,总之:

    • indexOf方法无法识别NaN成员,所以要单独处理;
    • {}!={}是因为前后两个{}代表两个不同的空对象;
    • js中对象判断是通过比较引用所指向的内存地址是否一样来实现的;

    相关文章

      网友评论

          本文标题:{ }的困惑

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