2021. 9. 28. 17:51ㆍ언어/Javascript
모던 자바스크립트(저자 이웅모), 코어 자바스크립트(저자 정재남) 내용을 참고하였습니다.
데이터 타입은 왜 필요한 것일까?
- 값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해
- 값을 참조할 때 한 번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해
- 메모리에서 읽어 들인 2진수를 어떻게 해석할 지 결정하기 위해
데이터 타입의 분류
원시타입과 참조타입을 구분하는 기준
- 원시형은 값이 담긴 주소값을 복제하고, 참조형은 값이 담긴 주소값들로 이루어진 묶음을 가리키는 주소값을 복제한다
원시 타입
number, string, boolean, undefined, null, symbol
불변값
var a = 'abc'; a = a + 'def';
- 'abc'가 'abcdef'로 바뀌는 것이 아니라, 새로운 문자열 'abcdef'를 만들어 그 주소를 변수 a 에 저장한다
- 불변성의 성질: 변경은 새로 만드는 동작을 통해서만 이루어진다
참조 타입
Object, Array, Function, Date, RegExp(정규표현식)
가변값
var a = 10; var b = a; var obj1 = { c:10, d:'ddd' }; var obj2 = obj1;
- 참조형 데이터가 '가변값'이라고 설명할 때의 '가변'은 참조형 데이터 자체를 변경할 경우가 아니라 그 내부의 프로퍼티를 변경할 때만 성립한다
> number
자바스크립트는 하나의 숫자 타입만이 존재한다.
⇒ 상대적으로 메모리 관리에 대한 압박에서 자유로울 수 있다
var integer = 10; // 정수
var double = 1.1; // 실수
var negative = -20; // 음의 정수
정수, 실수, 2진수, 8진수, 16진수 리터럴은 모두 메모리에 배정밀도 64비트 부동소수점 형식의 2진수로 저장된다.
모든 수를 실수로 처리하며, 정수만 표현하기 위한 데이터타입(integer type)이 별도로 존재하지 않는다.
var binary = 0b01000001; // 2진수
var octal = 0o101; // 8진수
var hex = 0x41; // 16진수
console.log(binary, octal, hex); // 65 65 65
// 숫자타입은 모두 실수로 처리
console.log(1 === 1.0); // true
숫자 타입은 추가적으로 세 가지의 특별한 값도 표현할 수 있다.
- Infinity : 양의 무한대
- -Infinity : 음의 무한대
- Nan : 산술 연산 불가(not-a-number)
console.log(10 / 0); // Infinity
console.log(10 / 0); // -Infinity
console.log(1 * 'string'); // Nan
> string
문자열은 0개 이상의 16비트 유니코드 문자의 집합으로 전 세계 대부분의 문자를 표현할 수 있다.
문자열을 따옴표로 감싸지 않으면 자바스크립트 엔진은 키워드나 식별자 같은 토큰으로 인식한다.
문자열 표기 방법
- 작은 따옴표(' ')
- 큰 따옴표(" ")
- 백틱(` `)
템플릿 리터럴 (``)
ES6부터 도입된 템플릿 리터럴은 편리한 문자열 처리 기능을 제공한다.
런타임에 일반 문자열로 변환되어 처리된다.
- 멀티라인 문자열 제공
- 표현식 삽입 가능
// template literal
var template = `Hello world!`;
// 멀티라인 문자열
var multiLine = `Hello
world~`;
// 표현식 삽입
var first = 'Hello';
var last = 'world';
console.log(`Expression interpolation✨️ ${first} ${last}!`); // Expression interpolation✨️ Hello world!
console.log(`1 + 2 = ${1 + 2}`) // 1 + 2 = 3 => 표현식의 평가결과가 문자열이 아니더라도 문자열로 강제변환
> boolean
true
와 false
두 가지 값을 가진다.
> undefined
undefined
는 개발자가 의도적으로 할당하기 위한 값이 아니라 자바스크립트 엔진이 자동으로 부여하는 값이다.
- 값을 대입하지 않은 변수. 즉 데이터 영역의 메모리 주소를 지정하지 않은 식별자에 접근할 때
- 객체 내부의 존재하지 않는 프로퍼티에 접근할 때
- return문이 없거나 호출되지 않는 함수의 실행결과
개발자가 의도적으로 변수에 undefined
를 할당한다면 본래의 취지에 어긋날뿐더러 혼란을 줄 수 있으므로 권장하지 않는다. 변수에 값이 없다는 것을 명시하고 싶을 때는 null
을 할당하자.
var foo;
console.log(foo); // undefined
> null
null
은 변수에 값이 없다는 것을 의도적으로 명시할 때 사용한다. (의도적 부재)
이는 이전에 할당되어 있던 값에 대한 참조를 명시적으로 제거하는 것을 의미한다.
var foo = 'abc';
foo = null; // 이전 참조를 제거
참고
typeof
연산자로 null
값을 계산해보면 null
이 아닌 ''object''를 반환한다. ⇒ 버그
null 과 undefined 비교
// Equal operator
console.log(null == undefined); // true
// Strict Equal operator
console.log(null === undefined); // false
> symbol
ES6에서 추가된 7번째 타입으로, 변경 불가능한 원시 타입의 값이다.
참조 타입은 추후 작성할 예정.
'언어 > Javascript' 카테고리의 다른 글
TIL06 | JavaScript 문자열, 숫자 메서드 (0) | 2021.09.30 |
---|---|
TIL05 | 함수와 함수 호이스팅 (0) | 2021.09.30 |
TIL03 | JavaScrpit 객체 (0) | 2021.09.27 |
TIL02 | JavaScript 배열 (0) | 2021.09.27 |
TIL01 | JavaScrpit 변수 (0) | 2021.09.26 |