Dynamically typeing
자바스크립트는 변수의 타입을 미리 선언 할 필요가 없다.
타입은 프로그램이 처리되는 과정에서 자동으로 파악된다.
var foo = 42; // foo 는 이제 Number 임
var foo = "bar"; // foo 는 이제 String 임
var foo = true; // foo 는 이제 Boolean 임
Data type
자바스크립트의 데이터 타입은 크게 7개가 있다.
primitive
Boolean
Null
Undefined
Number
String
Symbol
Object
Boolean
True : False를 제외한 모든것
False : "", null, undefined, 0, NaN
Null
더이상의 자세한 설명은 생략한다.
Undefined
값을 할당하지 않은 변수
Number
ECMAScript 표준에 의하면, 숫자의 자료형은 double밖에 없다고 한다.
그래서 C처럼 정수를 표현하기 위한 특별한 자료형은 없다.
특이한 점은, float은 4바이트 이지만 double은 8바이트이다.
Infinity and NaN
Infinity : 무한대. +Infinity와 -Infinity가 있다.
> 42 / +0
Infinity
> 42 / -0
-Infinity
String
C와는 다르게 자바스크립트의 문자열은 변경 불가능(문자열 상수)이다.
그러나 substr
이나 concat
등으로 수정하는건 가능하다고 한다.
Object
var hello = {
first : "Hello",
second : "World"
}
print(hello.first + hello.second)
reference
타입이라고 한다. 배열과 함수, 사용자 정의 클래스 등 모두 Object이다.
Property
쉼표로 구분되는 부분. 속성이라고 한다.
Key and Value
first, second : Key
"Hello", "World" : Value
ArrayBuffer
선언할 때의 길이가 바뀌지 않고 고정되어있음.(fixed-length
)
ArrayBuffer
에는 직접적으로 접근할 수 없고 TypedArray
나 DataView
를 통해 버퍼를 특정 자료형으로 나타내고 이를 통하여 버퍼의 내용을 읽거나 쓸 수 있다.
TypedArray
이름 | 범위 | 설명 | Type |
---|---|---|---|
Int8Array | -128 ~ 127 | 부호있는 8비트 정수 | char |
Uint8Array | 0 ~ 255 | 부호없는 8비트 정수 | unsigned char |
Int16Array | -32,768 ~ 32,767 | 부호있는 16비트 정수 | short |
Uint16Array | 0 ~ 65,535 | 부호없는 16비트 정수 | unsigned short |
Int32Array | -2,147,483,648 ~ 2,147,483,647 | 부호있는 32비트 정수 | int |
Uint32Array | 0 ~ 4,294,967,295 | 부호없는 32비트 정수 | unsigned int |
Float32Array | -3.4 x 10의 38승 ~ 3.4 x 10의 38승 | 32-bit IEEE floating point number | float |
Float64Array | -1.79 x 10의 308승 ~ 1.79 x 10의 308승 | 64-bit IEEE floating point number | double |
Buffer : ArrayBuffer
View : 데이터를 읽고 쓰기 위한 인터페이스 제공
var buf = new ArrayBuffer(8)
var view = new DataView(buf)
view.setInt8(0,1)
print(view.getInt8(0))
print(view.getInt8(1))
print(view.getInt8(2))
print(view.getInt8(3))
이런식으로 ArrayBuffer
를 선언하고, view
를 지정해주어 set
으로 값을 쓰고, get
으로 읽을 수 있다.
JS
array는 기본적으로 한 배열 안에 여러 자료형이 들어갈 수 있다. 만약 하나의 자료형만 사용해야하는 경우가 생길 경우에는 아래와 같이 DataView
의 타입을 지정할 수 있다.
var view = new Uint8Array(buf)
이 view
라는 변수는 Uint8
형태의 데이터만 읽고 쓸 수 있다. 예시는 아래와 같다.
var buf = new ArrayBuffer(8)
var view = new Uint8Array(buf)
view[0] = 0x100
print(view[0])
juntae@ubuntu:~/browser/v8/out/x64.debug$ ./d8 code.js
0
놀랍게도 0이 나왔다. 왜일까?
Uint8
은 0~255까지 값을 지정 할 수 있다. 하지만 0x100은 0xff를 넘어선 수치이기때문에 앞에 1을 제외한 0만출력 된 것이다.
만약 view[0]
을 0x110으로 설정했으면 16이 출력되었을 것이다.