기본 유형, 참조 유형

5480 단어
기본 유형, 참조 유형
기본 형식 값(수치, 볼 값,null,undefined): 창고 메모리에 저장된 간단한 데이터 세그먼트를 가리킨다.인용 형식 값(대상, 수조, 함수, 정규): 메모리에 저장된 대상을 가리킨다. 변수에 저장된 것은 사실상 하나의 바늘일 뿐이다. 이 바늘은 메모리에 저장된 다른 위치를 실행하고 이 위치에서 대상을 저장한다.
var a 
var b 
var c


var a = 1
var b = 2
var c = {name:'yangtao'}


// --1-- --2-- --0x0033-- , |

// ,  0x0033 {name:'yangtao'}

var aa = a 
var bb = b
var cc = c

// --1-- --2-- --0x0033--
//  aa     bb     cc    

a = 100
b = 200
c.name = 'jirengu'

console.log(aa)
console.log(bb)
console.log(cc)

// --1-- --2-- --0x0033--
//             {name:'jirengu'}


c:{name:' '}

//0x0044 {name:' '}


console.log(cc)

함수의 매개 변수 전달

function inc(n){
    // var n =a
    n++;
}
var a = 10;
inc(a);
console.log(a);

function incObj(obj){
    //var obj = o //0x0001
    obj.n++;
}

var o = {n: 10};  //o = 0x0001
incObj(o);
console.log(o);


function squireArr( arr ){
    //var arr = 0x0011
    for(var i = 0; i < arr.length; i++){
        arr[i] = arr[i] * arr[i];
    }
}
function squireArr2( arr ){
    var newArr = [];
    for(var i = 0; i < arr.length; i++){
        newArr[i] = arr[i] * arr[i];
    }
    return newArr;
}

var arr = [2,1,3,6]; //arr  0x0011
squireArr(arr);
console.log(arr); // [4,1,9,36]

var arr2 = squireArr2(arr)
console.log(arr2);

대상 얕은 복사와 깊은 복사

var a = 1
var b =1

a =2
b ==1

var obj = {age:100}
var obj2 = obj
obj.age =200
obj2.age ==200

 : 
var a =1
var b =a

a =2
b ==1

var obj = {
    age:100,
    friend:{
        name:'yangtao'
        
    }
}
var obj2 = obj
obj.age =200
obj2.age ==200

function shadowCopy(obj){
    var newObj = {}
    for (var key in obj){
        newObj[key] = obj[key]
    }
    return newObj
}
var obj3 = shadowCopy(obj)
obj.age = 400
console.log(obj3)

심층 복사로 완전 복사: 귀속

unction copy(obj){

    var newObj = {};
    for (var key in obj){
        if(obj.hasOwnProperty(key)){
            if(typeof obj[key] ==='number' || typeof obj[key] ==='boolean'|| typeof obj[key] ==='string'|| obj[key] === undefined|| obj[key] === null){
            newObj[key] = obj[key];
        }else{
            newObj[key] = copy(obj[key]);
        }
    }   
}
    return newObj
}
var obj3 = copy(obj)
//obj.age = 400
//console.log(obj3)


관련 작업


1. 인용 유형은 어떤 것들이 있습니까?인용하지 않는 유형은 무엇입니까?다음 코드는 무엇을 출력합니까?무엇 때문에

  • 비인용 유형: 수치, 볼 값,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}
    console.log(obj1 == obj2);//true  ,obj1 obj2  
    

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

    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)//Object {name: "hello", age: 3}
    console.log(dd)//[1,2,{name: "hello", age: 3}]
    
    
    1, 
     --1--  --2--   --0x0033--   --0x0044--
       a      b       c            d
      0x0033:{name:' ' age:2}
      0x0044:[1,2, {name:' ' age:2}]
    
    --1--   --2--  --0x0033--  --0x0044--
     aa      bb       cc           dd
    
    2,
     --11--   --22--   --0x0033-   --0x0044--
        a       b       c             d
     0x0033:{name:'hello' age:3}
     0x0044:[1,2, {name:'hello' age:3}]
    
    --1--   --2--  --0x0033--  --0x0044--
     aa      bb       cc           dd
    1、 a,b , aa bb , 1,2。
    2、c,d ,c d 。
    

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

    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   var n = a, a 1, 1
    console.log(c)//Object {name: "jirengu", age: 3}  var obj = c //0x0001, c age ++obj.age, c //0x0001 age 3
    

    4. 다음과 같은 그룹을 필터하고 정수만 남기고 원수 그룹에서 직접 조작합니다

    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);
            filter(arr);
          }
      }
    }
    filter(arr)
    console.log(arr) // [3,1,2]
    

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

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

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

     :
    function copy(obj){
        var newObj = {};
        for (var key in obj){
            if(obj.hasOwnProperty(key)){
                if(typeof obj[key] ==='number' || typeof obj[key] ==='boolean'
                            || typeof obj[key] ==='string'|| obj[key] === undefined||
                             obj[key] === null){
                newObj[key] = obj[key];
            }else{
                newObj[key] = copy(obj[key]);
            }
        }   
    }
        return newObj;
    }
     :
    JSON.stringify(obj)
    JSON.parse()
    JSON.parse(JSON.stringify(obj))
    function copy(obj){
            var newObj = JSON.parse(JSON.stringify(obj));
            return newObj;
     }
    
    

    좋은 웹페이지 즐겨찾기