js - part1. 데이터타입, data types, let vs var, hoisting

yoon·2021년 12월 16일
0

JS - 데이터타입, data types, let vs var, hoisting

  • let (ES6에서 추가)
    -var 를 쓰는 습관은 버려야 한다.
    -let의 경우
<script>
console.log(age);
age = 4;
</script>

--> - let의 경우 :: 선언되지 않은 변수기 때문에 에러가 난다.(정상)
--> - var의 경우 :: 선언되지 않았지만 undefined라고 출력.(var hoisting)
  • hoisting이란?
    어디에 선언했냐에 상관없이 항상 제일 위로 선언을 끌어 올려주는 것.

  • Block scope
<script>
{
  age = 4;
  let age;
}
</script>

--> 변수 사용 범위가 블럭 안으로 제한 

하지만 var의 경우에는 Block scope이 통하지 않는다.

<script>
{
  age = 4;
  var age;
}
console.log(age);
</script>

--> var의 경우 어디서나 4 출력 가능..

규모 있는 프로젝트의 경우 var를 사용시 혼돈이 생길수 있다. 변수 겹침 .. 위험 부담 ..


  • const
    변하지 않는 값
    웬만하면 값을 할당한 다음에 다시는 변경되지 않는 데이터 타입 사용 권유.

  • variable types
    number, string, boolean
  • boolean
    -false = 0, null, undefined, NaN, ''
    -true = 나머지 다른 값
    ex) const a = true;
    const b = 3 < 1; //false
  • null : 일부러 비어있는 값을 의도
    let nothing = null;
    console.log(value: ${nothing}, type: ${typeof nothing})
    // value: null, type: object
  • undefined : 비어있는건지 값이 들어가 있는지가 정해지지 않은 상태
    let x;
    console.log(value: ${x}, type: ${typeof x})
    // value: undefined, type: undefined
  • symbol : 고유한 식별자가 필요할때 사용.
    동시에 다발적으로 일어날때, 우선순위를 주고싶을때 고유한 식별자가 필요한 경우 사용한다.
    간혹 스트링을 이용하기도 하는데, 같은 스트링일 경우 동일한 식별자로 간주되는 문제가 있다.
    하지만 symbol의 경우 같은 심볼을 만들어도 구별이 가능하다.
    ex) const symbol1 = Symbol('id')
    const symbol2 = Symbol('id')
    console.log(symbol1 === symbol2);
    //false
    만약 같은 심볼로 동일한 식별자를 만들고 싶다면 ?
    ex) const symbolA = Symbol.for('id')
    const symbolB = Symbol.for('id')
    console.log(symbolA === symbolB);
    //true
    그리고 symbol은 바로 출력시 에러가 나기 때문에 뒤에 .description 을 붙여서 변환해줘야 출력이 가능하다.
    console.log(value: ${symbol1.description}, type: ${typeof symbol1.description});
    // value: id, type: symbol

0개의 댓글