20170506

作者: HaveSea | 来源:发表于2017-05-08 21:31 被阅读0次

    引用类型有哪些?非引用类型有哪些
    引用类型是指那些保存在堆内存中的对象。变量中保存的实际上只是一个指针,这个指针指向内存中的另一个位置,由该位置保存对象。
    引用类型有:对象、函数、数组、正则
    非引用类型:字符串、数字、布尔、null和undefined

    如下代码输出什么?为什么

    var obj1 = {a:1, b:2};
    var obj2 = {a:1, b:2};
    console.log(obj1 == obj2);//false obj1和obj2的地址不同
    console.log(obj1 = obj2);//Object {a: 1, b: 2} 把obj2的地址赋值给obj1
    console.log(obj1 == obj2);//true 此时obj1和obj2的地址相同
    

    如下代码输出什么? 为什么

    var a = 1
    var b = 2
    var c = { name: '饥人谷', age: 2 }
    var d = [a, b, c]
    
    var aa = a
    var bb = b
    var cc = c
    var dd = d
    
    a = 11
    b = 22
    c.name = 'hello'
    d[2]['age'] = 3
    
    console.log(aa) //1 
    console.log(bb) //2 
    console.log(cc)// { name: 'hello', age: 3 } cc和c的地址相同,改动c会同时改动cc
    console.log(dd)// [1,2,{ name: 'hello', age: 3 }] 综合以上
    

    如下代码输出什么? 为什么

    var a = 1
    var c = { name: 'jirengu', age: 2 }
    
    function f1(n){
      ++n
    }
    function f2(obj){
      ++obj.age
    }
    
    f1(a) //函数内部实际是这样的
    function f1(a){
      n = a,
      a++
    }
    所以a的值不变
    f2(c) //此时c={name:'jirengu',age:3}
    f1(c.age) // 同上,c.age不变
    
    console.log(a) //1
    console.log(c)//Object {name: "jirengu", age: 3}
    

    过滤如下数组,只保留正数,直接在原数组上操作

    var arr = [3,1,0,-1,-3,2,-5]
    function filter(arr){
        for (var i=0; i<arr.length; i++){
            if(arr[i]<=0){
                console.log(arr[i]);
                arr.splice(i,1);
                console.log(arr[i]);
                i--
            }
        }
    }
    filter(arr)
    console.log(arr) // [3,1,2]
    

    过滤如下数组,只保留正数,原数组不变,生成新数组

    var arr = [3,1,0,-1,-3,2,-5]
    var arr2 = [];
    function filter(arr){
        var n = 0;
        for (var key in arr){
            if(arr[key]>0){
                arr2[n] = arr[key];
                console.log(arr2[n]);
                n++;
            }
        }
    }
    var arr2 = filter(arr)
    console.log(arr2) // [3,1,2]
    console.log(arr)  // [3,1,0,-1,-2,2,-5]
    

    写一个深拷贝函数,用两种方式实现

    //第一种
    obj = {
        name:'zhu',
        age:25,
        friend:{
            name:'zhen',
            sex:'female',
        }
    }
    function deepCopy(oldObj) {
        var newObj = {};
        for(var key in oldObj){
            if(oldObj[key] === 'object'){
                newObj[key] = deepCopy(oldObj[key])
            }else{
                newObj[key] = oldObj[key]
            }
        }
        return newObj
    }
    var obj2 = deepCopy(obj);
    console.log(obj2);
    
    //第二种
     function deepCopy(oldObj){
        var newObj = JSON.parse(JSON.stringify(oldObj));
        return newObj;
     }
    

    相关文章

      网友评论

          本文标题:20170506

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