Java Script는 Dynamically typed language.
자바스크립트는 동적 타입 언어
이다. 이는 정적 타입 언어(C, Java 등)처럼 컴파일 할 때 변수의 타입을 체크하는 것이 아니라 코드가 실행될 때 변수나 함수의 타입을 동적으로 결정하며, 런타임시 타입 에러를 발생시킨다.
자기 나름대로 타입을 바꿔 주는 게 진짜 신기하다...
하지만 이러한 유연함 때문에 문제가 생길 수가 있다고 한다!
single item
더 이상 작은 단위로 나눠질 수 없는 한 가지 아이템
가장 기본적인 데이터 타입으로, 값이 메모리에 직접 저장된다.
자바스크립트는 number
하나로 정수와 실수를 포함한 모든 숫자 데이터들을 담을 수 있다.
양수를 0으로 나눌 경우
음수를 0으로 나눌 경우
Not A Number
잘못된 입력으로 인해 계산을 할 수 없을 경우
-2^53 ~ 2^53 의 범위를 초과하는 수
숫자 뒤에 n을 붙이면 bigInt로 간주된다.
➕ 백틱과 $ {}을 이용한 위와 같은 작성 방식을
template literals [template string] 라고 한다.
참과 거짓을 나타낸다
0, null, undefined, NaN, ''(비어 있는 스트링 값) ➡️ false
1, 이외의 다른 값들 ➡️ true
한 글자든 여러 글자든 모두 string
'없다'를 의미하는 데이터.
의도적으로 데이터가 없음을 나타내기 위한 일종의 표현 수단이다.
데이터가 아직 정의되지 않았음을 나타낸다.
null과 다름 주의!
고유한 식별자가 필요할 때 사용
동일한 string을 작성하여도 다른 심볼로 만들어 준다.
❔ string이 동일하다면 동일한 심볼로 만들고 싶을 때 🔽
Symbol.for를 사용하면 된다.
const gsymbol1 = Symbol.for('id');
const gsymbol2 = Symbol.for('id');
Symbol 값 출력시 🔽
console.log(`값: ${Symbol}`);
➡️ 에러 발생
console.log(`값: ${Symbol.description}`);
➡️ .description을 이용하여 string으로 변환해서 출력하기
값이 직접 메모리에 저장되지 않고, 값이 저장된 메모리 주소를 참조.
primitive type을 제외한 나머지 값들(배열, 함수, 정규표현식 등)은 모두 객체이다. 또한 객체는 pass-by-reference(참조에 의한 전달) 방식으로 전달된다.
box container
single item들을 여러 개 묶어서 한 단위로, 한 박스로 관리할 수 있게 해 준다.
const profile = { name: 'sally', age: 20 };
profile = { name: 'minsu', age: 25 };
➡️ const로 선언되었기 때문에 다른 object로 할당할 수 없다 (에러 발생)
그럼 어떻게 object 의 값을 바꿀 수 있을까? 🔽
profile.name = 'minsu';
➡️ object 내의 변수에 각각 접근하여 값을 바꾸는 것은 가능하다.
first-class function
함수도 다른 데이터타입처럼 변수에 할당이 가능하고, 때문에 파라미터로 전달될 수도 있으며 리턴될 수도 있다