데이터 타입 과 연산자

hb-developer·2021년 5월 27일
0

JavaScript

목록 보기
6/10

본 내용은 책 모던 자바스크립트 Deep Dive 의 내용을 참조했습니다.

데이터 타입

자바스크립트의 모든 값은 데이터 타입을 가진다.

원시타입 - 숫자 문자 불리언 undefined null 심벌
객체타입 - 객체(객체,함수,배열)

숫자 타입

자바스크립트는 배정밀도 64비트 부동소수점 형식 을 따르며
모든 수를 실수로 처리한다. 정수 로 표현된숫자도 사실 실수다.

1 = 1.0 //true

특별한 값으로는 +Infinity , -Infinity , NaN 이 있다.

문자열 타입

자바스크립트의 문자열 특징은 원시 타입이고 불변하다. (자세한 내용은 다음 포스트에)

템플릿

일반적인 문자열에서는 줄바꿈이 되지 않는다.
따라서 공백 이나 줄바꿈을 위해선 (백슬래쉬) 로 시작하는 이스케이프 시퀀스 를 사용해야한다.

라인피드와 캐리지리턴

캐리지리턴(\r)은 커서를 맨앞으로
라인피드 (\n)는 그상태 그대로 종이만 올리기

이걸 합치면 CRLF 엔터 + 커서를 맨앞으로 라는 뜻이다

이것이 현대의 운영체제 로 넘어온뒤 각기 다른 개행 방식을 쓰며
자바스크립트에서는 캐리지리턴, 라인피드 동일하게 개행을 의미한다.
일반적으로는 (\n) 라인피드 를 사용한다.

undefined 타입

자바스크립트 에서는 변수를 선언하면 undefined 가 할당된다.
메모리에는 보통 쓰레기값이 존재하는데 undefined 로 초기화 하고 공간을 확보한다.

선언 과 정의

보통의 프로그래밍 언어는 선언 과 정의를 따로 둔다.

C언어 에서는 식별자에게 존재를 알리는게 선언 이고 메모리에 연결시키는걸 정의라 한다.

하지만 자바스크립트는 선언과 동시에 undefined 가 자동으로 할당되기 때문에 구분이 모호하다.
ECMAScript 에서는 변수를 선언한다. 함수를 정의한다 라고 표시한다.

심볼 타입

ES6 에 등장한 타입 이며 변경 불가능한 원시 타입의 값이다.
Symbol 함수로 생성하며 외부에 노출되지 않고 중복되지도 않는다.

데이터 타입의 필요성

데이터 타입이 필요한 이유는 여러가지가 있다.

  • 데이터를 얼마나 확보할지를 정해야한다.
    데이터를 생성할때 얼만큼 생성해서 할당할지 효율적인 판단이 필요하다.
  • 값을 읽어야 한다.
    변수에는 메모리값의 주소가 있는데 가장 최상단 메모리 셀의 주소만 들어있다.
    이때 데이터 타입을 참고해서 얼마만큼 읽을지를 판단한다. 만약 8바이트 데이터를
    7셀 만큼 읽었다면 값은 훼손된다.
  • 값을 사용할때 필요하다.
    예를들어 0100 0001 을 숫자로 해석하면 65고 문자로 해석하면 'A' 다.
    즉 값을 사용할때도 데이터 타입을 참고한다.

연산자

피연산자 : 연산의 대상(값으로 평가될수 있어야함)

부수효과

부수효과 란 피연산자의 값이 바뀌는것을 의미한다.
이항 산술 연산자 처럼 +, - , * , / , % 를 해도 할당없이 계산만 하면
부수효과가 없다고 말한다.

무언가를 할당 하면 변수의 값이 변하므로 부수효과가 있다 라고 한다.

그럼 비교연산자는 ?
무언가를 비교하고 불린값을 리턴하기 때문에 부수효과가 없다 라고 한다.


부수 효과가 있는것은 값이 바뀌는것을 의미하고
부수 효과가 없는것은 새로운 값을 리턴한다.
(할당연산자 증++ 감-- 연산자 delete 연산자)

쉼표 연산자

왼쪽부터 차례로 평가하고 마지막 피연산자 를 평가하면 해당 값을 반환한다.

var x ,y ,z;
x=1 , y=2 , z =5   //5

typeof 연산자

데이터 타입을 알아내는 연산자다.

함수는 function 을 반환하고
나머지 객체는 object를 반환한다.

문제는 null 을 typeof 연산자 로 평가하게 되면 null 이 아니라 object 가 나온다.
이것은 자바스크립트의 첫번째 버그이고 호환성을 위해 고치고 있지 않다.
null 인지를 체크하려면 ===연산자를 사용한다.

profile
배우면 바뀐다

0개의 댓글