심벌 타입
ES6부터 도입 된, 7번째 데이터 타입으로 변경 불가능한 원시 타입의 값이다.
- 다른 값과 중복되지 않는 유일무이한 값.
- 주로 이름의 충돌 위험이 없는 유일한 프로퍼티 키를 만들기 위해 사용.
- 객체 프로퍼티 키로 사용할 수 있는 값은 빈 문자열을 포함하는 모든 문자열 또는 심벌 값.
데이터 타입
데이터 타입은 프로그래밍 언어에서 사용할 수 있는 데이터(숫자,문자열,불리언 등)의 종류.
코드에서 사용되는 모든 데이터는 메모리에 저장하고 참조할 수 있어야한다.
데이터 타입 데이터를 메모리에 저장할때,
- 확보해야하는 메모리 공간의 크기
- 할당할 수 있는 유효한 값에 대한 정보
- 메모리에 저장되어 있는 2진수 데이터를 어떻게 해석할 지에 대한 정보
들을 컴퓨터와 개발자에게 알려준다.
데이터 타입 사용하는 이유?
- 한정된 메모리 공간을 효율적으로 관리하기 위해
- 2진수 데이터로 메모리에 저장 된 데이터를 다양한 형태로 사용하기 위해
데이터 타입 종류
원시 타입
변경 불가능한 값(immutable value)이며 pass-by-value(값에 의한 전달) 이다.
숫자 타입
- 자바스크립트는 모든 수를 실수로 처리.
- 정수만 표현하기 위한 별도의 데이터 타입이 존재하지 않음.
- 메모리에 64비트 부동소수점 형식의 2진수로 저장.
- 메모리에 있는 어떤 형식의 값을 참조하든지 모두 10진수로 해석.
- 숫자 타입은 특별한 값도 있음.(Infinity, -Infinity, NaN)
자바스크립트 엔진은 대소문자를 구별한다.
문자열 타입
- 문자열은 0개 이상의 16비트 유니코드 문자(UTF-16)의 집합
- 전 세계 대부분의 문자를 표현
- 나타내는 방법은 세 가지. (' ', " ", 백틱) - 문자열 나타낼 때 가장 일반적으로 작은따옴표가 사용.
템플릿 리터럴
- 템플릿 리터럴은 ES6부터 도입.
- 멀티라인 문자열, 표현식 삽입, 태그드 템플릿 등 편리한 문자열 처리 기능을 제공.
- 템플릿 리터럴은 런타임에 일반 문자열로 변환되어 처리.
- ${}
불리언 타입
undefined 타입
- var로 변수를 선언하면 자바스크립트 엔진이 자동적으로 undefined로 초기화시켜버림
- 변수를 참조했을 때 undefined가 반환된다면, 변수 선언 이후 값이 할당되지 않은, 초기화되지 않은 변수라는 뜻.
null 타입
- 변수에 값이 없다는 것을 의도적으로 명시할 때 사용
- 이전에 할당되어 있던 값에 대한 참조를 명시적으로 제거
- 자바스크립트 엔진은 누구도 참조하지 않는 메모리 공간에 대해 가비지 콜렉션을 수행한다.
객체 타입 (참조 타입)
원시 타입을 제외한 모든 것이 객체 타입이다.
- 객체타입은 변경 가능한 값을 뜻한다.
- 객체타입을 복사해서 다른 변수에 할당 할 경우 해당 객체 타입의 주소값이 두번 째 변수의 메모리 공간에 저장된다.
- 원시타입을 복사해서 다른 변수에 할당 할 경우 해당 원시 타입의 원시값이 두번 째 변수의 메모리 공간에 값 자체가 저장된다.
동적 타이핑
자바스크립트의 변수는 선언이 아닌 할당에 의해 타입이 결정된다.
재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다.
동적 타입 언어는 유연성은 높지만, 신뢰성은 떨어진다.
동적 타이핑 언어는 사용자가 직접 타입을 지정 하지 않는다.
사용자는 값을 대입하고, 자바스크립트 엔진은 사용자가 대입한 값을 바탕으로 타입을 지정한다.
dohee = "babo";
정적 타이핑
정적 타입언어는 명시적 타입선언을 하는 언어
정적 타입 언어는 컴파일 시점에 타입 체크한다
= 선언한 데이터에 맞는 값을 할당했는지 검사하는 처리.
만약 타입 체크 통과 못했다면 에러를 발생시킨다.
const dohee = "yeah";
타입 변환
기존 원시 값을 사용해 다른 타입의 새로운 원시 값을 생성하는 것.
- 개발자 의도에 따라 값의 타입을 변환하는 것
명시적 타입 변환
타입 캐스팅
- 개발자 의도와는 상관없이 표현식을 평가하는 중에 자바스크립트 엔진에 의해 암묵적으로 타입이 변환되는 것
암묵적 타입 변환
타입 강제 변환
- 명시적 타입 변환이나, 암묵적 타입 변환이 기존 원시값을 직접 변경하는 것은 아님.
* 원시 값은 변경 불가능 한 값이므로 변경 불가능.
자바스크립트는 가급적 에러를 발생시키지 않도록, 암묵적으로 타입 변환을 통해 표현식을 평가한다.
단축 평가
타입 변환하지 않고 그대로 반환하는 것.
- 단축 평가는 표현식을 평가하는 도중에 평가결과가 확정된 경우,
나머지 평가 과정을 생략.
- 단축평가를 사용하면 if 문을 대체할 수 있으며,
- 삼항 조건 연산자는 if-else 문을 대체할 수 있다.
진짜 말그대로 짧게 평가한다는 뜻..같은데..?
논리 연산자
논리합|| 또는 논리곱&&.
논리곱&&
두 개의 피연산자가 모두 true로 평가될 때 true를 반환.
좌항에서 우항으로 평가가 진행.
논리합||
두 개의 피연산자 중 하나만 true로 평가되어도 true를 반환.
옵셔널 체이닝 연산자
ES11 부터 사용, 옵셔널 체이닝 연산자 ?
- 좌항의 피연산자가 null 또는 undefined인 경우
undefined를 반환하고, 아니면 우항의 프로퍼티 참조를 이어간다
null 병합 연산자
ES11 부터 사용, null 병합 연산자 ??
- 좌항의 피연산자 null 또는 undefined인 경우
우항의 피연산자를 반환,아니면 좌항의 피연산자를 반환.
- null 병합 연산자 ??는 변수에 기본값을 설정할 때 유용.