IT/JS

변수타입, 데이터타입, let vs var, hoisting (드림코딩 by 엘리)

프티 2021. 5. 6. 21:30
반응형

이번에는 엘리님의 자바스크립트 3번째 강의를 보고 이해한 것을 두서없이 정리해보았다.

 

변수 타입은 두 가지로 나누어진다.

  1. permitive, single item : number, string, boolean, null, undefined, symbol
  2. object, box container : function, first class function

첫 번째 타입은 메모리에 바로 저장되는 값으로 값이 바뀔 수 있지만(수정되는 것이 아님),

두 번째 타입은 함수 내에서 할당되는 오브젝트가 변할 수 있다는 차이가 있다.

 

  • block scope
    {} 안에서 변수에 값을 할당하면 그 밖에서는 무시됨.
    <-> global scope

 

  • let vs var
    변수에 값을 할당할 때,
    기존에 사용하던 것은 var이었다고한다.

    var은 변수 선언의 순서와 관계없이 값을 할당할 수 있는데,
    var hoisting 기능이 있었기 때문이었다.

    당장은 편리한 기능이지만,
    코드가 복잡해질수록 문제가 발생할 확률이 높기 때문에 현재는 es5에서 도입된 let을 사용한다.

 

  • const (constant)
    값이 변하지 않는 변수.

    runtime 환경에서 변수의 타입이 결정되는데,
    이것을 방지해주어 보안에 좋다는 장점이 있다.

    그리고 애플리케이션에서 여러 개의 스레드가 같은 변수의 값을 수정하였을 때 발생할 수 있는 문제들로부터 보호함으로써 안정성을 가진다.

    마지막으로,
    후에 사람이 바뀌면 안 되는 값을 실수로 수정하는 상황을 예방해준다.

 

    • number
      내가 천문대에서 C언어를 다룰 때에는 관측 자료를 수정하는 전처리하는 과정에서 데이터 타입에 따라 한순간에 과학적 가치를 잃을 수도 있다는 사실에 코딩하면서 많은 시행착오와 삽질을 했었다.. ㅎㅎ

      그리고 C언어는 오류가 발생해도 힌트조차 알려주지 않았기에 더 많은 시간을 쏟아야 했다..

      하지만 JS에서는 number로 모든 숫자를 정의할 수 있다고 하니 정말 편리한 것 같다!!

 

  • bigInt
    JS에서 숫자는 -2^53부터 2^53까지 정의되며,
    이때 숫자 뒤에 n이 붙으면 bigInt라는 데이터 타입으로 정의된다. (ES6부터 지원)

 

  • string
    문자는 '' 안에서 정의되며 변수 값을 출력하려면 ``(string literal)을 사용하여 그 안에 ${}를 넣으면 된다.

 

  • boolean
    참과 거짓을 나타내는 데이터 타입이다.
    거짓 : 0, null, undefined, NaN, ''
    참 : 그 이외의 모든 것

 

  • null
    only nothing

 

  • undefined
    값 지정이 되어있지 않은 경우

 

  • symbol
    동시 발생 변수를 정의할 때 사용하며 우선순위를 부여한다.

    같은 이름이어도 같은 값이 아니다.
    같은 값을 가지려면 symbol.for('')을 사용한다.

    출력 시에는 변수.description을 사용한다.

 

  • dynamic typing
    JS에서는 runtime에 변수들의 타입이 바뀌기 쉽다.

    string + number => +를 문자열과 이어지는 새로운 문자열로 인식하여 결과 값을 string으로 인식한다.
    string / string => string이 숫자로 인식되면 숫자끼리의 연산으로 인식하여 연산을 수행하고 결과 값을 number로 인식한다.

    이처럼 type이 실시간으로 바뀔 수 있기에 나온 것이 TypeScript라고 한다.

 

 

 

 

출처 : 드림코딩 by 엘리 유튜브 채널

 
 

 

반응형

'IT > JS' 카테고리의 다른 글

Array  (0) 2021.05.20
Function  (0) 2021.05.20
Class  (0) 2021.05.20
Operator, Control flow statement  (0) 2021.05.20
main.js와 html 구현을 효과적으로 할 수 있는 방법(by 드림코딩 엘리)  (0) 2021.05.06