2.2 값
프로그램에서 정보의 가장 기본적인 단위는 값(value)이다. 값에는 데이터가 저장된다. 값이 있기 때문에 프로그램은 상태를 유지할 수 있다. JS에서 값은 크게 원시 타입(primitive type)과 객체 타입(object type)으로 분류된다.
JS에서는 리터럴을 사용해 프로그램에 값을 주입한다.
⭐️ 원시 타입
문자열
"제 이름은 타로입니다." 이 값은 원시 문자열 리터럴이다. 문자열의 범위를 정할 때는 큰따옴표(")
, 작은따옴표(')
, 백틱(`)
을 사용한다. 코드 가독성과 유지 보수를 위해 일관성 있는 표기법을 사용해야 한다. 백틱은 스타일뿐만 아니라 작동 방식에도 차이가 있다.
보간법
firstName
에 '타로'라는 값이 저장되어있다고 가정하고 코드를 실행하면, 백틱으로 감싼 문자열만 문자열 내 변수 표현식인 ${ ... }
부분이 현재값으로 대체된다.
백틱은 보간 표현식 없이 사용할 수 있지만 백틱이 만들어진 목적과 부합하지 않는다. (권장X)
보간이 필요 없는 경우엔 큰따옴표나 작은따옴표 중 하나를 일관되게 사용하자.
불리언(boolean), 숫자
JS에서는 불리언이나 숫자 같은 원시 리터럴 값을 사용할 수 있다.
조건식이 거짓이므로 반복하지 않아 아무것도 출력되지 않는다. while
반복문이 true
인 경우에는 무한 반복되므로 주의하자.
3.141592
는 원주율의 근삿값으로 이미 확정된 값인 경우에는 직접 작성하기 보다 Math.PI
같이 이미 정의된 값을 가져다 쓰는 것이 좋다. 숫자 중 아주 큰 정수를 나타낼 때는 원시 타입 bigint
를 사용하자.
배열에서 숫자의 쓰임
1을 사용하여 두번째 요소에 접근할 수 있다. JS는 대부분의 프로그래밍 언어처럼 배열 요소 인덱스가 0부터 시작한다.
null과 undefined
null
과 undefined
도 JS의 원시타입이다. null
과 undefined
는 역사적인 이유로 차이가 있긴 하지만, 대부분의 경우 두 타입 모두 값의 비어 있음(존재하지 않음)을 나타낸다.
두 가지를 구분 없이 사용하더라도 일관성 있게 사용하면 큰 문제는 없다. 하지만, 비어 있는 단일 값을 나타낼 때는 undefined
를 사용하는 것이 안전한 최선의 방법이다.
symbol
심벌은 사람이 추축할 수 없게 만든 특수한 숨김 값이다. 주로 객체에서 특정한 키를 만들 때 사용한다.
일반적인 JS 프로그램에서는 심벌을 직접 사용하지는 않는다. 라이브러리나 프레임워크 같이 더 저차원적의 코드에서 사용한다.
⭐️ 2.2.1 배열과 객체
배열
배열은 특수한 유형의 객체로, 객체 내 정렬된 데이터에는 숫자 인덱스가 매겨진다.
배열에는 원시 타입, 객체 타입 상관 없이 모든 타입의 값이 들어갈 수 있다. 함수는 값이므로 배열이나 객체의 값에 함수도 할당할 수 있다.
객체
객체는 배열보다 더 일반적인 데이터 타입이다. 정렬되지 않은 키-값 쌍을 모아놓은 컬렉션이다. 배열은 인덱스라는 숫자를 통해 요소에 접근하고, 객체는 요소 위치를 알려주는 문자열(키 혹은 프로퍼트)을 사용하여 요소에 접근한다.
me
는 객체를, first
는 값이 모여 있는 컬렉션인 객체에서 원하는 정보의 위치를 나타낸다. 온점을 사용하거나 me["first"]
같이 대괄호를 사용하여 정보에 접근할 수 있다.
⭐️ 2.2.2 값의 타입
typeof
연산자를 사용해 원시 타입과 객체 타입 값을 구분한다.
typeof null은 예상과 달리 "null"이 아닌 "object"를 반환한다.
함수는 "function"을 반환하지만 배열은 "array"가 아닌 "object"를 반환한다.
문자열을 숫자로 바꾸는 것처럼 값의 타입을 변경하는 것을 JS에서는 타입 강제 변환(coercion)이라고 한다. (2.5.2절)
변수에 할당하거나 어딘가에 넘길 때, 원싯값과 객체의 작동 방식은 차이가 있다. (부록 A.1절 '값 vs. 참조')
Last updated