Data type

bumikim26·2022년 2월 25일
0

Javascript

목록 보기
4/12
post-thumbnail

데이터 타입

자바스크립트의 모든 ''은 데이터 타입을 갖는다. 데이터 타입은 값의 종류를 말하며 ES6는 7개의 데이터 타입을 제공한다. 크게 원시 타입과 객체 타입으로 분류할 수 있다. <Deep dive 11장 참고>

원시 타입

  • number
  • string
  • boolean
  • undefined
  • null
  • symbol

객체 타입

  • 객체, 함수, 배열 등

숫자 타입

숫자 타입에서 추가적으로 세 가지 특별한 값

  • Infinity
  • -Infinity
  • NaN

배정밀도 64비트 부동소수점 형식

ECMAScript 숫자 타입의 값은 배정밀도 64비트 부동소수점 형식을 따른다. 정수만 표현하기 위한 데이터 타입이 따로 존재하지 않음. 정수, 실수, 2진수, 8진수, 16진수 리터럴은 모두 메모리에 배정밀도 64비트 부동소수점 형식의 2진수로 저장된다. 값을 참조하면 모두 10진수로 해석된다.

문자열 타입

문자열을 따옴표로 감싸지 않으면 자바스크립트 엔진은 키워드나 식별자같은 토큰으로 인식한다. 자바스크립트의 문자열은 원시 타입이며, immutable value이다.

템플릿 리터럴

Template literal이라는 새로운 문자열 표기법이 ES6부터 도입되었다. 편리한 문자열 처리 기능을 제공한다. 템플릿 리터럴은 런타임에 일반 문자열로 변환되어 처리된다. 백틱을 사용해 표현한다.

불리언 타입

true or false 두가지 값

undefined 타입

자바스크립트 엔진이 변수를 초기화 할 때 사용하는 값.

null 타입

변수가 이전에 참조하던 값을 더 이상 참조하지 않겠다는 의미.가비지 콜렉션을 수행함. 함수가 유효한 값을 반환할 수 없는 경우에 null 또는 undefined을 반환. null vs undefined

심벌 타입

33장에서 다룰것

객체 타입

11장 원시 값과 객체의 비교에서 다룰것

💻 그래서, 데이터 타입은 왜 필요할까?

메모리에 값을 저장하려면 먼저 확보해야 할 메모리 공간의 크기를 결정해야 한다. 메모리 셀의 개수 (바이트 수)를 사용해야 낭비와 손실이 없이 값을 저장할 수 있는지 알아야 한다.
리터럴 100은 숫자 타입의 값으로 해석되고 8바이트의 메모리 공간에 2진수로 저장된다. 숫자 타입은 8바이트 단위로 저장된다.
마찬가지로 값을 참조 할 때도 읽어 들여야 할 메모리 공간의 크기를 알아야 한다. 자바스크립트는 변수에 할당 된 값으로 변수의 데이터 타입을 인식한다.
또 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정해야 한다. 데이터 타입에 따라 숫자로 해석될 수도 문자열로 해석될 수도 있다.

동적 타이핑

js에서 변수는 데이터 타입을 가질까? 자바스크립트는 정적 타입 언어와 다르게 변수를 선언할 때 타입을 선언하지 않는다. 어떠한 데이터 타입의 값이라도 자유롭게 할당 가능. 자바스크립트에서는 값을 할당하는 시점에 변수의 타입이 동적으로 결정되고 변수의 타입을 언제든지 변경 가능.

typeof 연산자로 변수를 연산하면 변수에 할당된 값의 데이터 타입을 반환 할 수 있다. typeof 연산자는 연산자 뒤에 위치판 피연산자의 데이터 타입을 '문자열'로 반환한다.

var foo;
console.log(typeof foo); // undefined

foo = 3;
console.log(typeof foo); // number

foo = 'hello';
console.log(typeof foo); // string

foo = true;
console.log(typeof foo); // boolean

foo = null;
console.log(typeof foo); // object

foo = Symbol();
console.log(typeof foo); // symbol

foo = {};
console.log(typeof foo); // object

foo = [];
console.log(typeof foo); // object

foo = function(){};
console.log(typeof foo); // function

0개의 댓글