js- 참조 유형 대상 복사

4605 단어
1. ; 2. ; 3. ;

1. 인용 유형은 어떤 것들이 있습니까?참조되지 않는 유형

  • 참조 유형: 참조 유형(Object, Array, Function, Date, Math, RegExp, Error)은 메모리에 저장된 대상을 가리킨다. 변수에 저장된 것은 사실상 하나의 바늘일 뿐이다. 이 바늘은 메모리의 다른 위치를 가리키고 이 위치에서 대상을 저장한다.
  • 비인용 형식(기본 데이터 형식):number,string,boolean,undefined,null.창고 메모리에 저장된 간단한 데이터 세그먼트를 가리킨다.
  • 기본 유형 = 비인용 유형 복잡 유형 = 대상 = = 인용 유형
  • 2. 다음 코드는 무엇을 출력합니까?무엇 때문에

    var obj1 = {a:1, b:2};
    var obj2 = {a:1, b:2};
    console.log(obj1 == obj2);// :fasle: , .
    
    console.log(obj1 = obj2);//   : Object {a: 1,b: 2}
    : obj2 obj1, .
    
    console.log(obj1 == obj2);// :ture : 
    
    

    3. 다음 코드는 무엇을 출력합니까?무엇 때문에

    var a = 1;
    var b = 2;
    var c = { name: ' ', age: 2 };
    var d = [a, b, c];
    
    var aa = a;//a=1
    var bb = b;//a=2
    var cc = c;
    var dd = d;
    
    a = 11;//aa=1: , a=11,aa a  ( ). 
    b = 22;//bb=2
    c.name = 'hello';//{name: "hello", age: 2}
    d[2]['age'] = 3;// c {name: "hello", age: 3}
    
    console.log(aa); //1 
    console.log(bb);//2
    console.log(cc);//Object{name: "hello", age: 3}  : : , , 
    console.log(dd);//[1,2,Object{age: 3, name: "hello"}]
    
    
    
    

    4. 다음 코드는 무엇을 출력합니까?무엇 때문에

    var a = 1;
    var c = { name: 'jirengu', age: 2 };
    
    function f1(n){
      //var n =a; , a .
      ++n;
    }
    function f2(obj){
      ++obj.age;
    }
    
    f1(a);//a=1  n=2
    f2(c);//c={name: 'jirengu', age: 2 };
    f1(c.age);//c={name: 'jirengu', age: 3 }; a , c age .
    console.log(a);//a=1
    console.log(c);//Object {name: 'jirengu', age: 3 };
    
    

    5. 다음 수조를 필터하여 정수만 남기고 원수조에서 직접 조작

     var arr = [3,1,0,-1,-3,2,-5];
      
      function filter(arr){
    
        for(var i=0;i

    6. 다음 수조를 필터하여 정수만 보존하고 원수조는 변하지 않으며 새 수조를 생성합니다


    방법1:
     var arr = [3,1,0,-1,-3,2,-5];
        function filter(arr){
          var newarr = [];
          for(var i = 0;i0 ){
               newarr.splice(i,0,arr[i]);//splice  0, , .
             }
          }
          return newarr;
        }
        var arr2 = filter(arr);
        console.log(arr2); // [3,1,2]
        console.log(arr);  // [3,1,0,-1,-2,2,-5]
    

    방법2:
    var arr = [3,1,0,-1,-3,2,-5];
    function filter(arr){
        var newArr = [];
        for(var i = 0; i0){
                newArr.push(arr[i]);
            }
        }
        return newArr;
    }
    var arr1 = filter(arr);
    console.log(arr1);
    console.log(arr);
    

    방법3:
    var arr = [3,1,0,-1,-3,2,-5];
    function filter(arr){
      var j = 0;
      var newarr = [];
      for( var i = 0; i < arr.length; i++){
        if( arr[i] > 0){
          newarr[j] = arr[i];
          j++;
        }
      }
      return newarr;
    }
    var arr2 = filter(arr);
    console.log(arr2); // [3,1,2]
    console.log(arr);  // [3,1,0,-1,-2,2,-5]
    

    7. 깊이 복사 함수를 써서 두 가지 방식으로 실현


  • JavaScript에서 Object와 Array와 같은 인용 유형 값에 대해 한 변수에서 다른 변수로 인용 유형 값을 복사할 때 이 값의 복사본은 사실 하나의 지침이다. 두 변수는 같은 무더기의 대상을 가리키고 그 중의 변수를 바꾸면 다른 변수도 영향을 받는다.
  • 인용 유형 복사는 두 가지 얕은 복사로 나뉘는데 그것이 바로 원 대상의 인용이다.심층 복사: 새로운 실례를 복사하는 것으로 새로운 실례와 이전의 실례는 서로 영향을 주지 않는다.두 개의 다른 메모리 주소.
  • 방법1
  • function deepCope(obj){
        var newObj = {}; 
        for(var key in obj){
         // , 
          if(obj.hasOwnProperty(key)){//obj.hasOwnProperty(prop) 
            if(typeof obj[key] ==== 'number' ||
               typeof obj[key] ==== 'string' ||
               typeof obj[key] ==== 'undefined' ||
               typeof obj[key] ==== 'boolean' ||
                      obj[key] ==== null){// typeof null object, typeof obj[key] === 'object' 
             newObj[key] = obj[key];
            }else{
              newObj[key] = deepCope(obj[key]);// 
          }
            
        }
          return newObj;
          
      }
    
    
    
    
  • 상기한hasOwnProperty 방법으로 속성이 존재하는지 판단하고 아래의 예는 대상 o가 자신의 속성prop
  • 을 함유하고 있는지 검사했다.
    o = new Object();
    o.prop = 'exists';
    
    function changeO() {
      o.newprop = o.prop;
      delete o.prop;
    }
    
    o.hasOwnProperty('prop');   //   true
    changeO();
    o.hasOwnProperty('prop');   //   false
    
  • 방법2
  •  .
    JOSN stringify js JSON ,parse JSON js 
    //  JSON 
    function deepClone(source){
      return JSON.parse(JSON.stringify(source));
    }
    var o1 = {
      arr: [1, 2, 3],
      obj: {
        key: 'value'
      },
      func: function(){
        return 1;
      }
    };
    var o2 = deepClone(o1);
    console.log(o2); // => {arr: [1,2,3], obj: {key: 'value'}}
    

    참고 자료

    좋은 웹페이지 즐겨찾기