美文网首页
JavaScript基础三

JavaScript基础三

作者: 字母31 | 来源:发表于2017-10-23 20:18 被阅读0次

    1、引用类型有哪些?非引用类型有哪些

    引用类型:Object
    非引用类型:number string null undefined boolean

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

    var obj1 = {a:1, b:2};
    var obj2 = {a:1, b:2};
    console.log(obj1 == obj2);      //false,对象的存储地址不同
    console.log(obj1 = obj2);        //赋值操作,输出{a:1, b:2}
    console.log(obj1 == obj2);     //true,上一步赋值之后存储地址相同
    

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

    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},引用类型,复制的是存储地址,重新赋值后       存储地址相同,属性也一起改变
    console.log(dd)    //[1,2,{ name: 'hello', age: 3 }],引用类型,复制的是存储地址,重新赋值后       存储地址相同,属性也一起改变
    

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

    var a = 1
    var c = { name: 'jirengu', age: 2 }
    
    function f1(n){
      ++n
    }
    function f2(obj){
      ++obj.age
    }
    
    f1(a) 
    f2(c) 
    f1(c.age) 
    console.log(a)      //1,f1(a)相当于把a的值赋值给n,执行函数后n值改变而a的值不会改变
    console.log(c)     //{ name: 'jirengu', age: 3 },f2(c)相当于把obj=c,指向同一个存储地址,f2执行后age发生改变,直接改变了存储在同一位置的属性值,则age变为3
    

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

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

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

    var arr = [3,1,0,-1,-3,2,-5]
    function filter(arr){
         return arr.filter(function(elem){
                 return elem>0
         })
    }
    var arr2 = filter(arr)
    console.log(arr2) // [3,1,2]
    console.log(arr)  // [3,1,0,-1,-2,2,-5]
    

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

    第一种
    function deepClone(oldObj){
         return JSON.parse(JSON.stringify(oldObj))
    }
    
    第二种
    function deepClone(oldObj){
         var newObj={}
         for(var key in oldObj){
              if(typeof oldObj[key] ==='object' && oldObj[key] !== null){
                     newObj[key] = deepClone(oldObj[key])
              }else{
                     newObj[key] = oldObj[key]
              }
         }
         return newObj
    }
    
    

    相关文章

      网友评论

          本文标题:JavaScript基础三

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