Front-End/JavaScript

[Javascript] 타입 관련 예외사항

sihyeong 2022. 10. 26. 21:27

null의 타입

  • null의 타입은 object 타입이다.
  • 자바스크립트 설계 오류이다.
  • 따라서 null 타입 검사 시 typeof null을 하게되면 object로 나오게 됨
  • 비교하려면 null === null로 비교해야함

 

심볼(Symbol) 타입

  • 변경 불가능한 원시타입의 값이다.
  • 이름의 충돌 위험이 없는 유일한 객체의 프로퍼티 키를 만들기 위해 사용됨
var key = simbol('key');
var obj = {};

obj[key] = 'value';
console.log(obj[key]);	// 'value'

 

값에 의한 전달 방식

  • 원시타입은 모두 값에 의한 전달 방식이다.
  • 원시타입을 제외한 나머지 값들은 모두 객체이고, 객체는 참조에 의한 전달 방식을 사용한다.

 

변수 중복 선언

  • var 키워드로 선언한 변수는 중복 선언이 가능하다.
  • 중복 선언하면 에러 없이 이전 변수의 값을 덮어 쓴다.

 

호이스팅

  • 자바스크립트의 모든 선언문은 호이스팅 된다.
  • 호이스팅은 var 선언문이나 function 선언문 등 모든 선언문이 해당 Scope의 선두에 옮겨진 것처럼 동작하는 특성이다.
  • c의 전방선언과 같다고 생각하면 편하다.

 

변수 범위

  • var : 함수 레벨 스코프        (전역)
  • let : 블록 레벨 스코프         (지역)
  • const : 블록 레벨 스코프    (지역)

 

암묵적 타입 변환

단항연산자

  • +나 - 같은 단항연산자는 피연산자를 숫자타입으로 변환한 값을 생성해 반환한다.
  • +'10'은 숫자 10
  • +true는 1
  • +false는 0

비교연산자

  • ==는 암묵적 타입 변환을 통해 타입을 일치시킨 다음 같은 값을 갖는지 비교한다.
  • 따라서 원하지 않는 값이 나올 수 있다.
  • ===를 사용해 비교하자

  NaN

  •  NaN은 유일한 값이기 때문에
  • NaN을 비교하기 위해선 isNan()을 사용해야 한다.
NaN == NaN // false
NaN === NaN // false
isNaN(NaN) // true

논리연산자

  • 단축 평가 : 중간에 평가 결과가 나오면 오른쪽 끝까지 가지 않고 평가 결과를 반환한다
  • &&와 ||가 단축평가에 영향을 받는다.
"apple" || "banana"  // "apple"
"apple" && "banana" // "banana"
  • 빈문자열이 아니기 때문에 true이고, 좌에서 우로 평가한다.
  • 이 때 평가에 영향을 끼친 마지막 부분을 반환한다.