[1] 데이터 타입과 변수의 동적 타이핑
데이터 타입 : 숫자나 문자열처럼 변수에 저장하는 데이터 종류
- 동적 타입 언어(dynamic typed language) : 실행할 때 같은 변수에 숫자나 문자열 같은 다양한 타입의 데이터를 동적으로 바꿀 수 있는 언어. 자바스크립트는 동적 타입 언어이다.
- 정적 타입 언어(static typed language) : C나 Java 등의 프로그래밍 언어에는 정수 타입 변수, 부동소수점 타입 변수 등이 있어 그 변수의 타입과 일치하는 데이터만 저장할 수 있다.
var pi = 3.14; console.log(pi); // → 3.14 pi = "원주율"; console.log(pi); // → 원주율
자바스크립트는 동적 타입 언어이므로 프로그램을 실행할 때 발생하는 타입 변환에 주의하여 변수에 어떤 타입의 데이터가 저장되는지 잘 확인해야 함.
[2] 데이터 타입의 분류
원시 타입(primitive type) Vs 객체 타입
원시 타입
- 숫자, 문자열, 논리값, 그 외 특수한 값(undefined, null), 심벌(symbol)
- 원시 타입 데이터는 데이터를 구성하는 가장 기본적인 요소로 불변 값(값을 바꿀 수 없는 데이터)으로 정의.
- 원시 타입의 값을 원시 값이라 함.
객체
- 원시 타입에 속하지 않는 자바스크립트의 값.
- 객체는 변수 여러 개가 모여서 만들어진 복합 데이터 타입.
- 객체 안에 저장된 값은 바꿀 수 있으며 참조 타입.
- 배열, 함수, 정규 표현식 등
[3] 숫자
- 자바스크립트에는 정수 타입과 부동소수점 타입의 구분이 없다.
- 숫자는 모두 64비트 부동소수점으로 표현. 이는 C나 Java의 double 타입에 해당
- 배열 인덱스와 비트 연산은 32비트 정수로 처리
프로그램에 직접 작성할 수 있는 상수값은 리터럴(literal)이라 한다.
숫자를 표현하는 리터럴에는 정수 리터럴과 부동소수점 리터럴이 있다.
< 숫자리터럴 >
| 분류 | 표기법 | 예시 | 설명 | 비고 |
| 정수리터럴 | 10진수 | 123 | 정수를 그대로 표현 | . |
| 16진수 | 0x2a | 숫자 앞에 0x를 붙임 | . | |
| 8진수 | 0o73 | 숫자 앞에 Oo를 붙임 | ES6 | |
| 2진수 | 0b101 | 숫자앞에 0b를 붙임 | ES6 | |
| 부동소수점 리터럴 | 정수.소수 | 3.14 | 소수를 그대로 표현 | . |
| 소수 | 0.123 | 정수부가 0일 때는 0을 생략할 수 있음. | . | |
| 가수부e지수부 | 6.02e23 | 6.02×10^23 | . | |
| 가수부E지수부 | 1.616199E-35 | 1.616199×10^-35 | . |
자바스크립트에는 특별한 숫자를 표현하기 위한 문자열이 정의되어 있다.
ES5에서는 모두 읽기 전용이므로 수정할 수 없다.
< 특수한 값 >
| 분류 | 표기법 | 설명 | 비고 |
| 전역변수 | Infinity | 플러스 무한대 | |
| 전역변수 | NaN | 부정 값(Not a Number) | |
| Number의 프로퍼티 | Number.POSITIVE_INFINITY | 플러스 무한대 | |
| Number의 프로퍼티 | Number.NEGATIVE_INFINITY | 마이너스 무한대 | |
| Number의 프로퍼티 | Number.MAX_VALUE | 표현할 수 있는 최대값 | |
| Number의 프로퍼티 | Number.MIN_VALUE | 표현할 수 있는 최소값 | |
| Number의 프로퍼티 | Number.NaN | 부정 값(Not a Number) | |
| Number의 프로퍼티 | Number.EPSILON | 2.22044604925031e-16 | ES6 |
| Number의 프로퍼티 | Number.MIN_SAFE_INTEGER | -9007199254740900 | ES6 |
| Number의 프로퍼티 | Number.MAX_SAFE_INTEGER | 9007199254740900 | ES6 |
NaN : 0을 0으로 나눈 결과값, Infinity를 infinit로 나눈 결과값, 음수의 제곱근 등 숫자로 표현할 수 없는 부정 값을 뜻함.
[4] 문자열
자바스크립트의 문자열은 길이가 16비트인 유니코드 문자(UTF-16)를 나열한 것으로 전 세계에서 사용하는 문자를 대부분 표현할 수 있다.
문자열 리터럴은 문자열 앞 뒤로 ‘ ‘ 나 ” “로 감싸 표현한다.
"Without haste, but without rest." "서두르지 말라, 그러나 쉬지도 말라." "" // 빈 문자열 '3.14'
(‘)이 표현에 필요하다면 “”로 감싸고, (“)이 표현에 필요하다면 ”로 감싼다.
"I'm going to learn Javascript."
자바스크립트를 HTML 요소에 끼워 넣을 때 자바스크립트 프로그램을 문자열로 작성한다.
<input type="button" value="Click" onclick="alert('Thanks!')">
이럴 때는 HTML 코드에는 큰 따옴표를 사용하고 자바스크립트 코드에는 작은 따옴표를 사용하여 HTML과 자바스크립트에서 사용하는 따옴표를 구분하는 것이 좋다.
이스케이프 시퀀스 : 역슬래시(\) 뒤에 특정 문자를 뜻하는 기호를 표기한 형태. 이를 이용해 특정 제어 코드나 문자를 표현할 수 있다.
'I\'m going to learn Javascript.'
< 이스케이프 시퀀스 목록 >
| 이스케이프 시퀀스 | 의미 | 비고 |
| \0 | 널(null) 문자 | |
| \b | 백스페이스 문자 | |
| \t | 수평 탭 문자 | |
| \n | 개행 문자 | |
| \v | 수직 탭 문자 | |
| \f | 다음 페이지 문자 | |
| \r | 캐리지 리턴 문자(CR) | |
| \’ | 작은따옴표 문자 | |
| \” | 큰따옴표 문자 | |
| \\ | 역슬래시 문자 | |
| \xXX | 두 자릿수 16진수 XX로 지정된 Latin-1 문자 | |
| \uXXX | 네 자릿수 16진수 XXXX로 지정된 유니코드 문자 | |
| \u{XXXXXX} | 16진수 코드 포인트 XXXXXX로 지정된 유니코드 문자 | ES6 |
[5] 논리값
조건식이 참인지 거짓인지를 표현하기 위해 사용하는 값
true, false
x == 2
x 가 2라면 참(true), x가 2가 아니라면 거짓(false)
논리값은 제어구문(if/else 문, while 문, do/while 문, for 문)에 사용
[6] 특수한 값
값이 없음 : null, undefined
undefined – 정의되지 않는 상태
- 값을 아직 할당하지 않은 변수의 값
- 없는 객체의 프로퍼티를 읽으려고 시도했을 때의 값
- 없는 배열의 요소를 읽으려고 시도했을 때의 값
- 아무것도 반환하지 않는 함수가 반환하는 값
- 함수를 호출했을 때 전달받지 못한 인수의
변수 값이 undefined가 되는 것은 값을 할당하지 않은 결과
코드로 undefined를 대입한 것이 아니라 자바스크립트 엔진이 변수를 undefined로 초기화한 것
자바스크립트 전역 변수에도 똑같은 이름의 undefined가 있고, 그 초기값은 undefined라는 원시값임.
null – 아무것도 없음
주로 프로그램에서 무것인가를 검색했지만 찾지 못했을 때 아무것도 없음을 전달하기 위한 값
< 참고문헌 >
🔹주 참고문헌 : 모던 자바스크립트 입문 – 이소 히로시 지음, 서재원 옮김
🔹MDN Web Docs


