JavaScript 공부 2주차

sdtana·2021년 3월 20일
0

학습할 것

  • 프리미티브(Primitive) 타입의 종류와 값의 범위, 그리고 기본 값
  • 프리미티브 타입과 레퍼런스 타입
  • 리터럴 타입
  • 변수 선언 및 초기화하는 방법
  • 변수의 스코프와 라이프타임
  • 타입 변환: casting, coercion
  • 1차 및 2차 배열 선언하기
  • 타입 추론, var, let

프리미티브(Primitive) 타입의 종류와 값의 범위, 그리고 기본 값

원시 타입(Primitive type)은 6개의 종류가 존재하는데, number type, string type, boolean type, undefined type, null type, symbol type이 있다.

  • number type: 모든 수를 실수로 표현하며, infinity(양의 무한대), -infinity(음의 무한대), NaN(Not-a-Number)이라는 세 가지 특정한 값이 추가로 존재한다.
  • string type: UTF-16을 사용하며, ' '," ", 으로 텍스트를 감싼다. 위 세 따옴표로 감싸지 않으면 엔진은 텍스트가 아닌 키워드나 식별자로 판단한다.
  • boolean type: true와 false만 존재하며, 논리적 참과 거짓을 나타낸다.
  • undefined type: 변수 선언에 의해 확보된 메모리 공간을 엔진이 garbage value로 놔두지 않고 undefined로 초기화하기 위한 타입이다.
    알아볼 것- undefined로 초기화되지 않은 garbage value를 확인하는 방법
  • null type: 변수에 값이 없다는 것을 의도적으로 표기하기 위한 데이터 타입이다. JavaScript는 대소문자를 구분하므로 Null, NULL과 다르다.
    알아볼 것- null, Null, NULL의 차이
  • symbol type: ES6에서 새로 추가된 데이터 타입으로, 반드시 Symbol 함수를 호출하여 생성되며 다른 값과 중복되지 않는다.

프리미티브 타입과 레퍼런스 타입

프리미티브 타입 데이터는 변수에 할당될 때 메모리 크기가 정해지며, 변경이 불가능한 읽기 전용 데이터이다. 프리미티브 타입 데이터를 변경하면 메모리의 값이 변경되는 것이 아니라 메모리가 새로 할당되며, 변수는 새롭게 재할당된 원시 값을 나타낸다. 즉 변수 a의 데이터를 b로 복사한 후 a의 데이터를 변경하여도 b의 데이터는 변경되지 않는다.

레퍼런스 타입 데이터는 property의 갯수가 정해져 있지 않고, 추가되거나 변경 혹은 삭제될 수 있다. 그러므로 메모리 크기를 미리 정해 놓을 수 없다. 그러므로 변수에 할당될 때 객체 자체의 주소가 아닌, 참조 값(reference value)의 주소를 받는다. reference value는 객체가 저장된 메모리의 주소만을 나타내며, 즉 변수 a의 데이터를 b로 복사한 후 a의 데이터를 변경하면 b의 데이터 또한 변경된다.

리터럴 타입

리터럴을 사용하여 데이터 타입을 표현한 것.
리터럴은 사람이 이해할 수 있는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기법을 말한다.
예를 들어 16진수의 리터럴은 0x이며, 0xFFFFFF 와 같이 표현된다.

변수 선언 및 초기화하는 방법

변수 선언 방법에는 세 가지가 있다.

var: 변수에 초기 값을 지정하지 않는다면 undefined 값을 가짐
어떤 함수 안에서 선언되었다면 그 함수 전체에 대하여 유효하며, 미처 변수가 선언되기 전조차도 유효하다. 이를 위해 엔진은 함수 안에 있는 모든 변수를 함수 맨 꼭대기로 끌어올린다(Hoisting).

let: 변수에 초기 값을 지정하지 않으면 역시 undefined 값을 가짐
변수가 선언된 블록, 구문 또는 표현식 내에서만 유효하며, 변수가 초기화 혹은 선언되기 전에 참조할 경우 ReferenceError가 발생한다.

const: 유효 범위는 let과 동일하지만, 값의 재할당 및 재선언도 불가능하다. 즉 처음 선언할 때 반드시 초기화를 해야한다. 또한 관습적으로 대문자를 사용하여 선언한다.

예외적으로 x = 5와 같은 식으로 변수를 생성 할 수도 있는데, 사용하지 않는 것이 좋다.

변수의 스코프와 라이프타임

변수의 스코프에는 global과 local이 있다.
global scope는 코드 어느 곳에서나 해당 변수에 접근할 수 있다는 의미의며, 이 속성을 가진 변수는 코드가 시작될 때부터 끝날 때까지 존재한다. local scope는 코드의 특정 부분에서만 사용 가능하므로 이 속성을 가진 변수는 함수가 시작될 때 생성되고 함수가 끝나면 삭제된다.

타입 변환: casting, coercion

JavaScript의 타입은 언제든지 변경될 수 있다. 이중 개발자가 의도적으로 값의 타입을 변경하는 것을 casting, 엔진이 암묵적으로 변경하는 것을 coercion이라고 한다.

1차 및 2차 배열 선언하기

1차 배열 선언

var newArray = new Array();

2차 배열 선언: 2행 3열 기준

var newArray = new Array(2);
myArray[0] = new Array (3);
myArray[1] = new Array (3);

or

var myArray = new Array(new Array(3), new Array(3));

타입 추론

명시적인 타입 표기 없이도 엔진이 값의 타입 정보를 추론하는 것이다.
자바스크립트는 타입 추론을 지원하지 않는다.

출처

profile
귀차니즘 탈출 시도중

0개의 댓글