-
[ ] === [ ] // 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