[JS] data types, let vs var, hoisting

Hyodduru ·2021년 10월 25일
0

JavaScript

목록 보기
13/60
post-thumbnail

출처 : 유튜브 드림코딩 자바스크립트

Programming에서 가장 중요한 것 3가지?
입력, 연산, 출력
(추가로 CPU에 최적화된 연산을 하는 것, 메모리의 사용을 최소화하는 것 또한 중요)

Variable

  • 메모리의 값을 읽고 쓰는 것이 가능하다. (read/ write)
  • mutable datatype (값이 바뀔 수 있는 변수)

let

ES6에서 추가된 언어이다. mutable datatype.
block scope 적용된다.

ex)

{let name = 'ellie';  //코드를 block내에 작성하게 되면 더이상 밖에서는 안의 내용 볼 수 없다.
console.log(name);
name = 'hello';
console.log(name);}

let globalName = 'global name'; //어느 곳에서나 접근 가능.

var

예전에 쓰던 변수. 이제는 쓰지 않음.
block scope이 적용되지 않는다.
hoisting이 가능하다.

  • hoisting? 어디에 선언했는지와 상관없이 항상 제일 위로 선언을 끌어올려주는 것. 값을 선언하기 전에도 쓰는 것이 가능해진다. more declaration from bottom to top

constant

값이 절대 바뀌지 않는 변수. Immutable data type
읽기만 가능하다. 다시 다른 값으로 쓰는 것 불가!
favor immutable data type always for a few reasons
장점)

  • security
  • thread safety (thread : 어떠한 프로그램 내에서, 특히 프로세스에서 실행되는 흐름의 단위)
  • reduce human mistakes

Note)

  • Immutable data types : premitive types, frozen objects (i. e. object.frozen())
  • Mutable data types : all objects by default are mutable in JS

Variable types

  • primitive type : 더 이상 작은 단위로 나뉘어질 수 없는 한 가지 아이템. single item : number, string, boolean, null, undefined, symbol
  • object type : single item 들을 여러개 묶어서 한 단위로, 박스로 관리해줄 수 있게 하는 것. box container
  • function : first-class function : 이 프로그래밍 언어에서는 function도 변수에 할당이 가능. 함수의 parameter로도 전달된다. 함수에서 return type으로 function을 return할 수 있다.

어떤 숫자들의 형태든 변수 취급 가능.

const count = 17; // integer
const size = 17.1;// decimal number 소수점

number

special numeric values : infinity, -infinity, NaN

const infinity = 1/0; //infinity
const negativeInfinity = -1/0; //-infinity
const nAn = 'not a number'/2; //NaN

bigint 표현하기

const bigInt = 123456789n  //bigint type

string

  • template literals (string) : allowing embedded expressions called substitutions(내장된 표현식을 허용한다.)

boolean

false : 0, null, undefined, NaN, ''
true : any other value

null

let nothing = null;

null이라고 명확하게 값 할당

undefined

let x;

값을 할당하지 않음

symbol

create unique indentifiers for objects
map이나 다른 자료구조에서 고유한 식별자가 필요하거나 동시다발적으로 일어날 수 있는 코드에서 우선순위를 주고 싶을 때.

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

위 둘은 동일한 값 아니다.
동일한 string으로 작성했어도 다른 symbol로 만들어진다.
주어진 string에 상관없이 고유한 식별자를 만들고 싶을 때 사용한다.

같은 string 같은 symbol 만들고 싶은 경우

const gSymbol1 = Symbol.for('id'); //주어진 string에 같은 symbol 만들어줘
const gSymbol2 = Symbol.for('id');
  • symbol 값 출력할 때 ".description" 꼭 붙여줄 것!
console.log(symbol1.description);

object

박스형태. reference가 저장이 된다. 한 번 할당된 object는 다시는 다른 object로 변경이 불가하다.

const ellie = {name:'ellie', age:20};
ellie.age = 21

name, age 와 같은 reference가 저장되는 것!

Dynamic typing : dynamically typed language

선언할 때 어떤 type인지 선언하지 않고 프로그램이 동작할 때 (runtime) 할당된 값에 따라서 type이 변경될 수 있는 것.
ex)
runtime 중 숫자가 문자열로 바뀌어 에러가 나타날 수 있다.
-> 이 때 typescript 등장. js 위에 type이 더 올려진 언어.

profile
꾸준히 성장하기🦋 https://hyodduru.tistory.com/ 로 블로그 옮겼습니다

0개의 댓글