2020. 3. 9. 19:19ㆍJavas/자바스크립트핵심개념
C나 Java 와 같은 프로그래밍 언어에는 정수 타입 변수(int), 부동소수점 타입 변수(double) 등이 있어 그 변수의 타입과 일치하는 데이터만 저장이 가능합니다. 이와 같이 변수에 타입이 있는 언어를 정적 타입 언어(static typed language) 라고 합니다.
하지만 자바스크립트는 변수에 타입이 없으므로, 모든 타입의 데이터를 저장할 수 있습니다. 실행할 때 변수에 저장된 데이터 타입을 동적으로 바꿀 수 있다는 것이죠. 이와 같은 언어를 동적 타입 언어(dynamic typed language) 라고 합니다.
기본형
- Number, String, Boolean, null, undefined, +ES6 : Symbol
- 값을 그대로 할당
- 비어있는 데이터 공간 확보 -> 변수명과 매칭 -> 매칭 주소에 데이터 저장
참조형
Object, Array, Function, RegExp(정규표현식), +ES6 : map, set, weakmap, weakset
- 값이 저장된 주소값을 할당
- 비어있는 데이터 공간 확보 -> 객체 속 프로퍼티에 대한 공간을 또 다시 확보 -> 객체의 프로퍼티명과 주소를 매칭 -> 확보했던 두 번째 주소에 데이터 할당
변수를 선언하면 데이터가 담길 공간을 확보하고, 확보된 데이터의 주소값을 가지고
변수명과 매칭시키는 선언과정은 동일하나, 할당과정에서 차이가 있습니다.
예제)
var a;
a = 10;
var b = 'abc'
b= false;
var c = b;
c = 20;
|
변수명 |
a |
b |
c |
|
주소 |
@313 |
@314 |
@315 |
|
데이터 |
10 |
false |
20 |
var obj = {
a : 1,
b : 'b'
};
var obj2 = obj; // 저장된 주소만을 복사합니다.
obj2.a = 10; // obj.a 도 10으로 변경됩니다.
|
변수명 |
obj |
obj2 |
||||
|
주소 |
413 |
414 |
... |
1011 |
1012 |
1013 |
|
데이터 |
@1011 |
@1011 |
{ a : @1012, b : @1013 } |
10 |
'b' |
var obj3 = {
a : [4,5,6]
};
|
변수명 |
obj3 |
|||||||
|
주소 |
547 |
... |
1184 |
1185 |
... |
1326 |
1327 |
1328 |
|
데이터 |
@1184 |
{ a : @1185 } |
[ @1326, @1327, @1328] |
4 |
5 |
6 |
var obj3 = {
a : [4,5,6]
};
obj3.a = 'new'; // 1326, 1327, 1328 의 연결은 끊기게 됩니다.
|
변수명 |
obj3 |
|||||||
|
주소 |
547 |
... |
1184 |
1185 |
... |
|
|
|
|
데이터 |
@1184 |
{ a : @1185 } |
'new' |
|
|
|
'Javas > 자바스크립트핵심개념' 카테고리의 다른 글
| this (0) | 2020.03.10 |
|---|---|
| 함수 (0) | 2020.03.10 |