ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ ] === [ ] // false? 참조 타입(reference type)이란?
    concept/javascript 2020. 3. 31. 19:05

     

     

    [] === [] 를 콘솔 창에서 찍어보았을 때, 결과 값은 false 가 나온다. 왜 그럴까?

    이것을 원시 타입(primitive type) 과 참조 타입(reference type) 이라는 개념을 통해 알아볼 수 있다.

     

     

    원시 타입(primitive type) 참조 타입(reference type)
    number, string, Boolean, null, undefined, symbol 객체(object), 배열(array), 함수(function)

     

    먼저 원시 타입(primitive type)에 대한 설명이다.

    1 === 1 // true
    'hello' === 'hello' // true
    true === true // true

     

     그리고 참조 타입(reference type)에 대한 설명이다.

    [] === []; // false
    {} === {}; // false
    { hello: 'world' } === { hello: 'world' }; // false
    
    let obj = { name: '김코딩' }
    obj === { name: '김코딩' } // false

     

    즉, 참조 타입(reference type) 에서는 

    let arr = [];
    arr === []; // false

    이 경우, arr가 빈 배열이다! 를 정보로 갖는 것이 아니라 arr는 빈 배열이라는 정보를 가졌다! 라는 뜻이다.


    쉽게 비유해서, 땅을 가진 것이 아니라 땅문서를 가진 격


    참조 타입에 대한 더 자세한 예시를 들어보자.

     

    let arr = [];
    let obj = { name: '김코딩' };
    
    arr.push(obj); // [{ name: '김코딩' }]
    arr.push(obj); // [{ name: '김코딩' }, { name: '김코딩' }]
    
    arr[0] === arr[1] // true ** 같은 obj를 참조했기 때문

    위의 경우에는 같은 obj를 참조했기 때문에 true 를 리턴한다.

     

    let arr = [];
    let obj = { name: '김코딩' };
    let obj2 = { name: '김코딩' };
    
    arr.push(obj); // [{ name: '김코딩' }]
    arr.push(obj2); // [{ name: '김코딩' }, { name: '김코딩' }]
    
    arr[0] === arr[1] // false ** 육안으로는 같아 보이지만 다르다!

    위의 경우에는 육안으로는 arr에 같은 객체가 두번 들어간 것으로 보이지만, 각각 obj, obj2로 다르게 선언된 것을 push 해 준 것이기 때문에 arr[0] 과 arr[1] 은 다르다!

    'concept > javascript' 카테고리의 다른 글

    Closure (클로져)  (0) 2020.04.02
    Scope (스코프)  (0) 2020.04.02
    for 문 / while 문의 차이  (0) 2020.03.31
    .bind 를 이용한 템플릿 만들기  (0) 2020.03.31
    Array.prototype.indexOf() vs String.prototype.indexOf()  (0) 2020.03.31

    댓글

Designed by Tistory.