JS 고유개념

NASTAR·2023년 10월 23일
0

자바스크립트개념

목록 보기
2/2

원시타입

원시값을 변수에 할당하면 값이 복사되어 들어갑니다.
원시값이 할당된 변수들은 모두 자기 자신만의 고유한 값을 가지게 됩니다.

var one = 1;
var two = 2;

one = two;

one = 3;
console.log(two);  // "2"

값이 복사되어 들어간다는 것이 중요하다.

참조타입

자바스크립트 객체
객체 : {}
배열 : []
함수 : function
Date
정규표현식 : RegExp
원시타입 빼고 전부 참조 타입으로 봐도 좋습니다.

참조타입은 변수에 값을 직접 저장하지 않습니다.
변수에 저장되는 것은 메모리 안에서 객체의 위치를 가리키는 '포인터'입니다.
무엇이 저장되느냐, 이것이 원시 타입과 참조 타입의 가장 큰 차이입니다.

var objOne = {one : 1};
var objTwo = {two : 2};

objTwo = objOne;
console.log(objTwo); // [object Object] { one : 1 };

objTwo.one = 3;
// 같이 바뀐다. 포인터값이 바뀌기 때문이다.
console.log(objOne); // [object Object] { one : 3 };
console.log(objTwo); // [object Object] { one : 3 };

원시 타입도 참조타입처럼 사용 가능 ??

var str = "hello world"

console.log(str.length); // 11

원시 래퍼 타입
원시 타입을 객체처럼 사용할 수 있게 도와줍니다.

String
Number
Boolean

원시타입을 객체처럼 사용하는 순간, 자바스크립트 내부에서 사용하는 데이터의 인스턴스를 만들게 됩니다. 이렇게 만들어진 객체는 코드 실행 후 바로 다음 줄에서 파괴됩니다.
이러한 과정을 오토박싱(autoboxing)이라고 합니다.

예제 코드 1

var name = "bit";
console.log(name.concat("coin")); // "bitcoin"

코드 분석

var name = "bit";
var temp = "new String(name)"
console.log(temp.concat("coin"));
temp = null; // 메모리에서 해제


예제 코드 2

var name = "bit";
name.coin = "coin";
console.log(name.coin); // undefined;

코드 분석

var name = "bit";
var temp = "new String(name)"
temp.coin = "coin";
temp = null;

var temp = new String(name);
console.log(temp.coin);

0개의 댓글