본 내용은 책 모던 자바스크립트 Deep Dive 의 내용을 참조했습니다.
자바스크립트의 모든 값은 데이터 타입을 가진다.
원시타입
- 숫자
문자
불리언
undefined
null
심벌
객체타입
- 객체(객체,함수,배열)
자바스크립트는 배정밀도 64비트 부동소수점 형식
을 따르며
모든 수를 실수로 처리한다. 정수 로 표현된숫자도 사실 실수다.
1 = 1.0 //true
특별한 값으로는 +Infinity , -Infinity , NaN 이 있다.
자바스크립트의 문자열 특징은 원시 타입이고 불변하다. (자세한 내용은 다음 포스트에)
일반적인 문자열에서는 줄바꿈이 되지 않는다.
따라서 공백 이나 줄바꿈을 위해선 (백슬래쉬) 로 시작하는 이스케이프 시퀀스
를 사용해야한다.
캐리지리턴
(\r)은 커서를 맨앞으로
라인피드
(\n)는 그상태 그대로 종이만 올리기
이걸 합치면 CRLF 엔터 + 커서를 맨앞으로 라는 뜻이다
이것이 현대의 운영체제 로 넘어온뒤 각기 다른 개행 방식을 쓰며
자바스크립트에서는 캐리지리턴, 라인피드 동일하게 개행을 의미한다.
일반적으로는 (\n) 라인피드 를 사용한다.
자바스크립트 에서는 변수를 선언하면 undefined 가 할당된다.
메모리에는 보통 쓰레기값이 존재하는데 undefined 로 초기화 하고 공간을 확보한다.
보통의 프로그래밍 언어는 선언 과 정의를 따로 둔다.
C언어 에서는 식별자에게 존재를 알리는게 선언
이고 메모리에 연결시키는걸 정의
라 한다.
하지만 자바스크립트는 선언과 동시에 undefined
가 자동으로 할당되기 때문에 구분이 모호하다.
ECMAScript 에서는 변수
를 선언한다. 함수
를 정의한다 라고 표시한다.
ES6 에 등장한 타입 이며 변경 불가능한 원시 타입의 값이다.
Symbol 함수로 생성하며 외부에 노출되지 않고 중복되지도 않는다.
데이터 타입이 필요한 이유는 여러가지가 있다.
피연산자 : 연산의 대상(값으로 평가될수 있어야함)
부수효과 란 피연산자의 값이 바뀌는것을 의미한다.
이항 산술 연산자 처럼 +, - , * , / , % 를 해도 할당없이 계산만
하면
부수효과가 없다
고 말한다.
무언가를 할당
하면 변수의 값이 변하므로 부수효과가 있다
라고 한다.
그럼 비교연산자는
?
무언가를 비교하고 불린값을 리턴하기 때문에 부수효과가 없다
라고 한다.
즉
부수 효과가 있는것은 값이 바뀌는것을 의미하고
부수 효과가 없는것은 새로운 값을 리턴한다.
(할당연산자
증++ 감-- 연산자
delete 연산자
)
왼쪽부터 차례로 평가하고 마지막 피연산자 를 평가하면 해당 값을 반환한다.
var x ,y ,z;
x=1 , y=2 , z =5 //5
데이터 타입을 알아내는 연산자다.
함수는 function 을 반환하고
나머지 객체는 object를 반환한다.
문제는 null 을 typeof 연산자 로 평가하게 되면 null 이 아니라 object 가 나온다.
이것은 자바스크립트의 첫번째 버그이고 호환성을 위해 고치고 있지 않다.
null 인지를 체크하려면 ===연산자를 사용한다.