06장 데이터 타입

  • 6.9.1 데이터 타입에 의한 메모리 공간의 확보와 참조 6.9.2 데이터 타입에 의한 값의 해석

6.10 동적 타이핑

  • 6.10.1 동적 타입 언어와 정적 타입 언어 6.10.2 동적 타입 언어와 변수

6.1 숫자 타입(06-01)

  • 정수만 표현하기 위한 데이터 타입이 별도로 존재X
// 모두 숫자 타입이다.
var integer = 10;    // 정수
var double = 10.12;  // 실수
var negative = -20;  // 음의 정수

06-02

  • 2, 8, 16진수 표현위한 데이터 타입을 제공X, 모두 10진수 해석
var binary = 0b01000001; // 2진수
var octal = 0o101;       // 8진수
var hex = 0x41;          // 16진수

// 표기법만 다를 뿐 모두 같은 값이다.
console.log(binary); // 65
console.log(octal);  // 65
console.log(hex);    // 65
console.log(binary === octal); // true
console.log(octal === hex);    // true

06-03

  • 자바스크립트의 숫자 타입은 실수로 처리
// 숫자 타입은 모두 실수로 처리된다.
console.log(1 === 1.0); // true
console.log(4 / 2);     // 2
console.log(3 / 2);     // 1.5

06-04

// 숫자 타입의 세 가지 특별한 값
console.log(10 / 0);       // Infinity : 양의 무한대
console.log(10 / -0);      // -Infinity : 음의 무한대
console.log(1 * 'String'); // NaN : Not a Number

06-05

  • 주의 : nan, Nan, NAN을 값이 아닌 식별자로 해석(대소문자 구분해서)
// 자바스크립트는 대소문자를 구별한다.
var x = nan; // ReferenceError: nan is not defined

6.2 문자열 타입(06-06)

  • 문자열은 C(배열), JAVA(객체), 자바스크립트(원시타입)
// 문자열 타입
var string;
string = '문자열'; // 작은따옴표
string = "문자열"; // 큰따옴표
string = `문자열`; // 백틱 (ES6)

string = '작은따옴표로 감싼 문자열 내의 "큰따옴표"는 문자열로 인식된다.';
string = "큰따옴표로 감싼 문자열 내의 '작은따옴표'는 문자열로 인식된다.";

06-07

// 따옴표로 감싸지 않은 hello를 식별자로 인식한다.
var string = hello; // ReferenceError: hello is not defined

6.3 템플릿 리터럴(06-08)

  • 템플릿 리터럴은 런타임에 일반 문자열로 변환
var template = `Template literal
줄바꿈도 허용`;
console.log(template); // Template literal

6.3.1 멀티라인 문자열(06-09)

  • 일반 문자열 내에서는 줄바꿈 허용X
var str = 'Hello
world.';
// SyntaxError: Invalid or unexpected token

06-10

  • 백슬래시(‘')를 활용한 이스케이프 시퀀스 사용시 줄바꿈 가능
var template = '<ul>\n\t<li><a href="#">Home</a></li>\n</ul>';

console.log(template);
/* 출력화면
<ul>
  <li><a href="#">Home</a></li>
</ul>
*/

06-11

  • 템플릿 리터럴내에서의 줄바꿈 허용
var template = `<ul>
  <li><a href="#">Home</a></li>
</ul>`;

console.log(template);
/*
<ul>
  <li><a href="#">Home</a></li>
</ul>
*/

6.3.2 표현식 삽입(06-12)

  • +연산자의 경우 피연산자 중 하나 이상이 문자열인 경우 문자열 연결 연산자로 동작(즉, 연결 동작시 숫자도 문자열로 바뀌고 연결)
var first = 'Ung-mo';
var last = 'Lee';

// ES5: 문자열 연결
console.log('My name is ' + first + ' ' + last + '.'); // My name is Ung-mo Lee.

06-13

  • 템플릿 리터럴 내에서의 표현식 삽입(${})
var first = 'Ung-mo';
var last = 'Lee';

// ES6: 표현식 삽입
console.log(`My name is ${first} ${last}.`); // My name is Ung-mo Lee.

06-14

  • 템플릿 리터럴 내에서의 표현식 삽입(${})
console.log(`1 + 2 = ${1 + 2}`); // 1 + 2 = 3

06-15

  • 문자열 내에서의 표현식 삽입은 문자열로 취급
console.log('1 + 2 = ${1 + 2}'); // 1 + 2 = ${1 + 2}

6.4 불리언 타입(06-16)

  • 불리언 타입(T/F) : typeof사용시 boolean으로 출력
var foo = true;
console.log(foo); // true

foo = false;
console.log(foo); // false

06.5 undefined 타입(6-17)

  • 타입 undefined는 undefined가 유일
var foo;
console.log(foo); // undefined

6.6 null 타입(06-18)

  • 변수에 값 없다는것을 명시하는 방법 중 하나 null 타입(주석 참고)
var foo = 'Lee';

// 이전에 할당되어 있던 값에 대한 참조를 제거. foo 변수는 더 이상 'Lee'를 참조하지 않는다.
// 유용해 보이지는 않는다. 변수의 스코프를 좁게 만들어 변수 자체를 재빨리 소멸시키는 편이 낫다.
foo = null;

06-19

  • 함수가 유효한 값을 반환할 수 없는 경우 명시적으로 null을 반환하기도 함
<!DOCTYPE html>
<html>
<body>
  <script>
    var element = document.querySelector('.myClass');

    // HTML 문서에 myClass 클래스를 갖는 요소가 없다면 null을 반환한다.
    console.log(element); // null
  </script>
</body>
</html>

6.7 심벌 타입(06-20)

  • ES6에서 추가된 7번째 타입 심벌(Symbol)

  • 심벌 이외의 원시값은 리터럴로 생성, 그러나 심벌은 함수 호출로 생성

  • 외부 노출X, 다른 값과 절대 중복X인 유일무이한 값

// 심벌 값 생성
var key = Symbol('key');
console.log(typeof key); // symbol

// 객체 생성
var obj = {};

// 이름이 충돌할 위험이 없는 유일무이한 값인 심벌을 프로퍼티 키로 사용한다.
obj[key] = 'value';
console.log(obj[key]); // value
obj // { [Symbol(key)]: 'value' }

6.8 객체 타입

  • 자바스크립트를 이루고 있는 거의 모든 것이 객체

  • 지금까지 살펴본 6가지 데이터 타입 이외의 값은 모두 객체 타입이다

6.9 데이터 타입의 필요성

6.9.1 데이터 타입에 의한 메모리 공간의 확보와 참조(06-21)

  • 데이터 타입의 필요성
    • 값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정
    • 값을 참조할 때 한번에 읽어 들여야 할 메모리 공간의 크기를 결정
    • 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정 위해
var score = 100;

6.9.2 데이터 타입에 의한 값의 해석

  • 메모리에서 읽어 들인 2진수를 어떻게 해석할지 등을 결정

6.10 동적 타이핑

6.10.1 동적 타입 언어와 정적 타입 언어(06-22)

  • C, JAVA같은 정적타입 언어는 명시적 타입선언 해야함
// c 변수에는 1바이트 정수 타입의 값(-128 ~ 127)만을 할당할 수 있다.
char c;

// num 변수에는 4바이트 정수 타입의 값(-2,124,483,648 ~ 2,124,483,647)만을 할당할 수 있다.
int num;

06-23

  • 자바스크립트는 동적타입 언어이므로 var, let, const 키워드를 사용해 변수를 선언할 뿐

  • 변수의 데이터 타입이 아니라 변수에 할당된 값의 데이터 타입을 반환

  • 변수 선언이 아닌 할당에 의해 타입이 결정(타입추론)

  • 재할당에 의해 변수 타입은 언제든 동적으로 변함(동적 타이핑)

  • 정적타입 언어와 구별을 위해 동적타입 언어라고 함

  • 그러나 유연성은 높지만 신뢰성이 떨어지므로 타입스크립트 많이 사용

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

6.10.2 동적 타입 언어와 변수

  • 동적 타입 언어는 변수에 어떤 데이터 타입의 값이라도 자유롭게 할당

댓글남기기