[JS] 변수와 데이터타입

daybyday·2020년 11월 10일
0

Javascript

목록 보기
1/15

https://www.youtube.com/watch?v=OCCpGh4ujb8

✔ 유튜브 '드림코딩 by 엘리' 채널의 자바스크립트 강의영상을 보고 스스로 정리한 내용입니다.



Variables

let

ES6에서 추가된 문법. Mutable Data type (read/write)

Block scope

괄호를 이용해서 코드를 블럭 안에 쓰게되면, 블럭 밖에서는 작동하지 않게 됨.

Global scope

괄호 바깥에 작성한 코드로, 블럭 밖이나 안에서나 어디서든 작동함.

프로그램이 시작되고 끝날 때까지 계속 메모리에 탑재되어 있음. 따라서 최대한 적게 쓰는 것이 좋으며, 클래스 등으로 정의해 쓰는 것이 좋음.


✔ let vs var

var 는 예전에 쓰던 변수 선언 문법... let을 쓰자!

❗ 쓰지 말아야하는 이유

  • var는 블럭을 무시한다.

  • var는 선언을 하지 않고도 출력을 할 수 있다.
    (에러가 나지 않고 undefined로 출력됨)

  • 어디에서 선언했는지에 상관없이 선언을 맨 위로 끌어 올린다. (hoisting)


Constant (const)

한 번 할당하면 재할당과 재선언이 불가능한 선언 방법.
Immutable data type이라고도 한다.


<Immutable data type을 이용해야 하는 이유>

  • 보안
  • thread safety - 동시에 값을 변경할 때 바뀌지 않도록
  • 사람의 실수 방지

Data types

primitive, single item

더 이상 작은 단위로 나눌 수 없는 한 가지 아이템. 메모리에 바로 저장됨.

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

object

single item을 여러 개 묶어서 box로 관리할 수 있게 하는 것. 크기가 커서 메모리에 바로 저장 불가. reference를 통해 실제 오브젝트가 담겨 있는 메모리를 가리킴.

function

javascript에서 함수는 first-class function으로 변수처럼 사용 가능하다.


Number

Javascript에서는 number라고 따로 선언할 필요 없고, 그냥 let a = 12; 라고 선언해도 된다.

.

*Special Numeric Values

infinity = 1 / 0

negativeInfinity = -1 / 0

NaN = 'not a number' / 2


String

한 글자든 여러 글자든 다 string으로 할당

-template litertals (string)

string의 템플릿을 지정한다고 보면 됨.

백틱(`)을 이용해서 변수값을 넣을 수 있음.

기존에 '+'를 이용해서 변수 값을 넣어주는 것보다

중간에 넣어준 공백값들도 그대로 나오기 때문에 편리함.

Boolean

true, false로 이루어진 변수

  • false: 0, null, undefined, NaN, ...
  • true: any other value

Null & Undefined

null : 선언할 때부터 텅 비어있는 값이라고 선언하는 것.

undefined : 선언은 되었지만 값이 할당되지 않은 것. (아무런 값이 정해지지 않은 상태)

Symbol

동시다발적으로 일어나는 일에 우선순위를 주고 싶을 때 사용하는 식별자.

const symbol1 = Symbol('id');
const symbol2 = Symbol('id');

위의 두 symbol은 string은 같으나 둘 모두 유일한 식별자이다.

const gsymbol1 = Symbol.for('id');
const gsymbol2 = Symbol.for('id');
console.log(gsymbol1 === gsymbol2); //true

string이 같으면 같은 식별자로 할당하고 싶다면 Symbol.for을 쓰면 된다.

둘은 같은 식별자이다.

console.log(`value: ${symbol1.description}, type: ${typeof symbol1}`);

symbol은 출력할 때 .description을 이용해 string으로 변환한 후 출력해야 한다.


Dynamic typing : dynamically typed language

↔ statically typed language (C나 JAVA)

자바스크립트는 선언할 때 어떤 타입인지 선언하지 않아도 되는 언어.

runtime에서 할당된 값에 따라서 타입이 변경될 수 있다.

이런 유연성이 장점일 때도 있지만, 규모가 큰 프로젝트에서는 걸림돌이 될 수도 있다.

이런 이유로 Typescript가 등장!!

let text = hello;
console.log(text.charAt(0)); //h

console.log(`value: ${text}, type: ${typeof text}`); //value: hello, type: string
text = 1;
console.log(`value: ${text}, type: ${typeof text}`); //value: 1, type: number
text = '7' + 5;
console.log(`value: ${text}, type: ${typeof text}`); //value: 75, type: string
text = '8' / '2';
console.log(`value: ${text}, type: ${typeof text}`); //value: 4, type: number

console.log(text.charAt(0)); //!!error!!

0개의 댓글