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이고, 좌에서 우로 평가한다.
- 이 때 평가에 영향을 끼친 마지막 부분을 반환한다.