오늘 공부한 내용.
오늘 읽은 범위 : 6장 데이터 타입 (59p ~ 73p)
날짜 : 2023.10.31 ~ 11.1
목차
1. 숫자 타입
2. 문자열 타입
3. 템플릿 리터럴
3-1. 멀티라인 문자열
3-2. 표현식 삽입
4. 불리언 타입
5. undefined 타입
데이터 타입
데이터 타입은 (줄여서 타입이라고도 한다.) 값의 종류를 말한다.
7개의 데이터 타입을 제공하며, 원시 타입과 객체 타입으로 분류할 수 있다.
구분 | 데이터 타입 | 설명 |
---|---|---|
원시 타입 | 숫자 타입 | 숫자. 정수와 실수 구분 없이 하나의 숫자 타입만 존재 |
문자열 타입 | 문자열 | |
불리언 타입 | 논리적 참(true)과 거짓(false) | |
undefined 타입 | var 키워드로 선언된 변수에 암묵적으로 할당되는 값 | |
null 타입 | 값이 없다는 것을 의도적으로 명시할 때 사용하는 값 | |
심벌 타입 | ES6에서 추가된 7번째 타입 | |
객체 타입 | 객체, 함수, 배열 등 |
ECMAScript 사양에 따르면 숫자 타입의 값은 배정밀도 64비트 부동소수점 형식을 따른다.
// 모두 숫자 타입이다.
var integer = 10; // 정수
var double = 10.12; // 실수
var negative = -20; // 음의 정수
정수, 실수, 2진수, 8진수, 16진수 리터럴은 모두 메모리에 배정밀도 64비트 부동소수점 형식의 2진수로 저장된다.
var binary = 0b0100001; // 2진수
var octal = 0o101; // 8진수
var hex = 0x41;
// 표기법만 다를 뿐 모두 같은 값이다.
console.log(binary) // 65
console.log(octal) // 65
console.log(hex) // 65
console.log(binary === octal) // true
console.log(octal === hex) // true
// 숫자 타입은 모두 실수로 처리된다.
console.log(1 === 1.0); // true
console.log(4 / 2); // 2
console.log(3 / 2); // 1.5
숫자 타입은 추가적으로 세 가지 특별한 값도 표현할 수 있다.
// 숫자 타입의 세 가지 특별 값
console.log(10 / 0); // Infinity
console.log(10 / -0); // -Infinity
console.log(1 * 'String'); // NaN
// -> NAN, Nan, nan은 값이 아닌 식별자로 해석하니 주의!
텍스트 데이터를 나타내는 데 사용한다.
작은따옴표 ('')
, 큰따옴표("")
또는 백틱(``)
으로 감싼다.작은따옴표
를 사용하는 것이다.// 문자열 타입
var string;
string = '문자열'; // 작은따옴표
string = "문자열"; // 큰따옴표
string = `문자열`; // 백틱 (ES6)
string = '작은따옴표로 감싼 문자열 내의 "큰따움표"는 문자열로 인식된다.';
string = "큰따옴표로 감싼 문자열 내의 '작은따옴표'는 문자열로 인식된다.";
// 따옴표로 감싸지 않은 hello를 식별자로 인식한다.
var string = hello; // ReferenceError: hello is not defined
만약 문자열을 따옴표로 감싸지 않으면 자바스크립트 엔진은 키워드나 식별자 같은 토큰으로 인식한다.
그리고 만약 따옴표로 문자열을 감싸지 않는다면 스페이스와 같은 공백 문자도 포함시킬 수 없다.
원시형 타입
이며, 분변 가능한 값
이다.ES6부터 템플릿 리터럴이라고 하는 새로운 문자열 표기법이 도입되었다.
템플릿 리터럴은 멀티라인 문자열, 표현식 삽입, 태그드 템플릿 등 편리한 문자열 처리를 제공한다.
백틱(``)
을 사용해 표현한다.var template = `Template literal`;
console.log(template); // Template literal
// 일반 문자열 내에서는 줄바꿈(개행)이 허용되지 않는다.
var str = 'Hello
world.';
// syntaxError: Invalid or unexpected token
// 줄바꿈과 들여쓰기가 적용된 HTML 문자열은 다음과 같이 이스케이프 시퀀스를 작성한다.
var template1 = '<ul>\n\t<li><a href="#">Home</a></li>\n</ul>'
var template2 = `<ul>
<li><a href="#">Home</a></li>
</ul>`
console.log(template1);
console.log(template2);
template1, template2 동일한 값이 출력된다.
<ul>
<li><a href="#">Home</a></li>
</ul>
표현식을 삽입하려면 ${ }으로 표현식을 감싼다.
var first = 'ung-mo';
var last = 'Lee';
// ES5: 문자열 연결
console.log('My name is' + first + ' ' + last + '.'); // My name is ung-mo Lee.
// ES6: 표현식 삽입
console.log(`My name is ${first} ${last}.`); // My name is ung-mo Lee.
표현식의 결과가 문자열이 아니더라도 문자열로 타입이 강제로 변환된다.
console log(`1 + 2 = ${1 + 2}`); // 1 + 2 = 3
console log('1 + 2 = ${1 + 2}'); // 1 + 2 = ${1 + 2}
불리언 타입의 값은 논리적 참, 거짓을 나타내는 true와 false뿐이다.
불리언 타입의 값은 참과 거짓으로 구분되는 조건에 의해 프로그램의 흐름을 제어하는 조건문에서 자주 사용한다.
var foo = true;
console.log(foo); // true
foo = false;
console.log(foo); // false
undefined 타입의 값은 undefined가 유일하다.
var 키워드로 선언한 변수는 암묵적으로 undefined로 초기화 된다.
garbage value
이 들어있다.)로 내버려두지 않고 자바스크립트 엔진이 undefined로 초기화한다.var foo;
console.log(foo); // undefined
undefined를 직역하면 "정의되지 않은"이다.
일반적으로 정의란 개념은 어떤 대상을 명확하게 규정하는 것을 의미한다.
- 자바스크립트의 undefined에서 말하는 정의란 변수에 값을 할당하여 변수의 실체를 명확히 하는 것을 말한다.
- 자바스크립트의 경우 변수를 선언하면 암묵적으로 정의가 이뤄지기 때문에 선언과 정의의 구분이 모호하다.
- ESMAScript 사양에서
변수는 '선언한다'
라고 표현하고,함수는 '정의한다'
라고 표현한다.