Javascript - Primitive Type, Reference Type

Hong·2022년 11월 4일
0

😩
지금 나의 가장 큰 문제점은 알고리즘 문제가 안풀린다는 것이다.
자바스크립트 문법은 당연히 모르고 코어 자바스크립트 문법도 모르다보니 과제로 내어주는 래퍼런스 코드를 보더라도 이해가 되지 않는 부분들이 많다.
내 방식대로 풀어볼려고 해도 내가 생각한 로직으로 코드 문장을 작성하고 디버깅 하다보면 이상한 곳에서 내가 원하는 값이 도출이 안되기 일쑤였다.

이때부터 악순환의 반복이 시작된다.


🤬
알고리즘 문제를 푼다 > 모르는 부분이 발생한다 > 모르는 부분을 찾는다(3~4시간이 지난다) >
다시 알고리즘 문제를 푼다 > 모르는 부분이 발생한다 > 모르는 부분을 찾는다(3~4시간이 지난다)

이런 악순환의 고리에 빠지면 아무것도 하는게 없이 하루가 지나간다..
이게 한 두문제가 그러면 상관없는데 대부분의 문제가 그러니..
내가 풀어야 하는 문제들이 쌓여가고 정말 스트레스다



예를 들면

if([2,1,3] === [2,1,3]) return console.log('true');

문제를 풀다가 이런 문장을 작성한 적이 있는데 나는 당연히 true가 나올것이라 생각했지만 false였다.
왜 그런지 구글링을 해보니 javascript에 기본형 type의 데이터와 참조형 type의 데이터가 존재한다는 사실을 알게되었다(진짜 나만 몰랐나봐).


기본형(Primitive Type)

  • Number
  • String
  • Boolean
  • null
  • undefined

참조형(Reference Type)

  • Object (Array, Function, RegExp)


결론적으로 위에서 false가 나왔던 이유는 배열이 참조형 타입의 데이터였기 때문이다.
참조형 타입의 데이터들은 변수에(Address) 데이터(Value)를 할당할 때 Value가 다른 메모리 공간의 주소로 채워진다. 때문에 우리는 같은 값으로 보이는 데이터 일지라도 컴퓨터는 다른 값으로 인식한다.



어떻게 참조형 데이터가 같은 값을 가지는지 아닌지 비교할 수 있는가?

let a = JSON.stringify([2,1,3])
let b = JSON.stringify([2,1,3])

if(a === b) return console.log('true');

JSON.stringify()메소드를 사용하면 가능하다.
하지만 어떤 특수한 케이스에서 적용이 안될 경우도 있는데 그것에 대한 해결방법은 여기 블로그에서 찾을 수 있었다.






기본형, 참조형에 대한 더 자세한 포스팅을 보고싶으시다면
여기로
여기도









눈덩이 굴러간다..⛄️

profile
Notorious

0개의 댓글