본문으로 바로가기

Browser (2) - Javascript basic

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에는 직접적으로 접근할 수 없고 TypedArrayDataView를 통해 버퍼를 특정 자료형으로 나타내고 이를 통하여 버퍼의 내용을 읽거나 쓸 수 있다.


TypedArray

이름범위설명Type
Int8Array-128 ~ 127부호있는 8비트 정수char
Uint8Array0 ~ 255부호없는 8비트 정수unsigned char
Int16Array-32,768 ~ 32,767부호있는 16비트 정수short
Uint16Array0 ~ 65,535부호없는 16비트 정수unsigned short
Int32Array-2,147,483,648 ~ 2,147,483,647부호있는 32비트 정수int
Uint32Array0 ~ 4,294,967,295부호없는 32비트 정수unsigned int
Float32Array-3.4 x 10의 38승 ~ 3.4 x 10의 38승32-bit IEEE floating point numberfloat
Float64Array-1.79 x 10의 308승 ~ 1.79 x 10의 308승64-bit IEEE floating point numberdouble

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이 출력되었을 것이다.