개발/javascript

변수

윤_ve 2020. 12. 12. 15:51

vlaue에 string, number, boolean, null, undefined 와 같은 데이터가 있는것을 permitive 타입이라하고

그 외의 타입은 모두 object라고 불린다.

 

 


permitive 예시

 

let num = 2;

let num2 = num;

 

let으로 선언한 num과 num2를 콘솔로그에 호출하면

 

console.log(num);     ====> 2

console.log(num2);   ====> 2

2라는 숫자가 호출이 된다.

 

여기서

num2 = 3;

으로 변경하면

 

console.log(num);     ====> 2

console.log(num2);   ====> 3

num2의 값만 변경되서 나온다.

 

이유 : num2가 3으로 value값만 바뀐것일 뿐이지, num이 3으로 선언된것이 아니다.


object 예시

 

let obj = {

  name: 'kristal',

  age : 5,

};

 

console.log(obj.name) 를 찍어보면

'kristal'이라는 값이 나옴

 

let obj2 = obj; 라고 선언해보자.

 

여기서

 

obj2.name = 'james'; 라고 바꾼 뒤

 

console.log(obj.name);

console.log(obj2.name);

찍어보면

 

'james'

'james'

라고 둘다 바뀐걸 볼수 있다.

 

이유: object 변수를 선언하면 데이터를 담을 수 있는 공간이 할당되고 그 공간은 너무 크기 때문에 permitive 타입처럼 값 자체가 담겨질수 없어서 object를 따로 어딘가에 담아놓고 그 담겨있는 주소를 reference라고 한다. 그러면 위처럼 obj2를 obj로 선언할 경우 obj2에는 obj의 reference가 저장이 되고 데이터가 변경이 되었을 경우 reference가 가르키는 object자체가 업데이트가 되면서 값이 같이 변하게 된다.


변수는 let과 const를 사용해서 선언한다.

 

let a = 3;

console.log(a); ===> 3

a = 5;

console.log(a); ===> 5

이렇게 let은 그 value값을 바꿀수 있다.

 

const b = 2;

console.log(b); ===> 2

b = 5;

console.log(b); ===> Error뜸

이렇게 const는 그 값을 변경 할 수 없다.

 

하지만 const로 object를 선언할 경우,

 

const obj = {

  name: 'kristal',

  age: 5;

}

이렇게 선언 한 상태에서 

 

obj = {

  name: 'KIM',

  age: 6;

}

 

console.log(obj.name); ===> ERROR

이렇게 reference 자체를 변경 할 순 없지만

 

obj 안에 있는 value 값 예를 들어

obj.name = 'KIM'으로 바꿔주면

 

console.log(obj.name); ===> 'KIM'

으로 변경되는것을 알 수있다.

'개발 > javascript' 카테고리의 다른 글

구구단(2)  (0) 2020.12.19
Javascript로 구구단 만들어서 화면에 출력 해보기  (0) 2020.12.18