study: javascript | 숨참고 deep dive (9) 타입 변환과 단축 평가 - 221125

Lumpen·2022년 11월 25일
0

Study

목록 보기
12/92

1. 타입 변환

개발자의 의도에 따라 값의 타입을 변환하는 것을
명시적 타입 변환 또는 타입 캐스팅이라고 한다

개발자의 의도와 상관 없이 자바스크립트 엔진에 의해 암묵적으로 타입이 변환하는 것을
암묵적 타입 변환, 타입 강제 변환이라고 한다

두 경우 모두 값을 직접 변경하는 것은 아니다
원시 값은 변경 불가능한 값이므로 변경할 수 없다

타입 변환이란 기존의 원시 값을 사용해 다른 타입의 원시 값을 새로 생성하는 것이다
이 때 암묵적으로 생성된 중간 값은 변수에 재할당되지 않는다

엔진에 의해 암묵적으로 변환되는 형변환은 개발자가 예측 가능해야 한다
타입 스크립트를 사용하면 좋을 것 같다

2. 암묵적 타입 변환

자바스크립트 엔진은 코드의 문맥을 고려해 암묵적으로 타입을 강제 변환한다

2-1. 문자열 타입으로 변환

문자열과 + 연산을 하게되면 피연산자가 문자열로 암묵적 형변환이 일어난다
Symbol 타입은 type error가 발생함

객체 타입은 "[object Object]"

2-2. 숫자 타입으로 변환

    • 연산은 문자열이 숫자로 변환되지만
      / 연산은 NaN
  • 를 한다면 숫자가 문자열로 변환됨

2-3. 불리언 타입으로 변환

이게 제일 중요한 것 같은데
truthy, falsy 값에 대한 이해를 하면 제어문을 사용하는데 유용하다

falsy 값이 아닌 값은 모두 truthy

falsy

  • flase
  • undefined
  • null
  • 0, -0
  • NaN
  • 빈 문자열

3. 명시적 타입 변환

3-1. 문자열 타입으로

문자열 타입이 아닌 값을 문자열로 변경하는 방법
1. String 생성자 함수를 new 연산자 없이 호출
2. Object.prototype.toString() 메소드 사용
3. ㅍ문자열 연결 연산자를 사용

3-2. 숫자 타입으로

  1. Number 생성자 함수를 new 연산자 없이 호출
    • 연산자 사용 (피연산자 앞에)
    • 연산자 사용 (피연산자 * 1)
  2. (문자열의 경우) parseInt(), parseFloat() 함수 사용

3-3. 불리언 타입으로 변환

  1. Boolean 생성자 함수를 new 연산자 없이 호출
  2. 부정 논리 연산자 !를 두 번 사용

4. 단축 평가

4-1. 논리 연산자를 사용한 단축 평가

논리합, 논리곱의 연산 결과는 꼭 불리언이 아닐 수 있다
논리합과 논리곱 연산의 결과는 늘 두 피연산자 중 하나의 값으로 평가된다

true || anything // true
false || anything // anything
true && anything // anything
false && anything // false

이처럼 논리 연산 결과를 결정하는 피연산자를 타입 변환 없이 반환하는 것을
단축 평가라고 한다
표현식을 평가하는 도중 평가 결과가 확정된 경우 나머지 평가 과정을 생략하는 것

단축 평가는 if 문을 대체할 수 있다

4-2. 옵셔널 체이닝

ES11 에 도입된 옵셔널 체이닝 연산자 ?.는
좌항의 피연산자가 null 또는 undefined 일 경우 undefined를 반환하고
아니라면 우항의 참조를 이어간다
결과가 항상 undefined 이므로 참조 에러가 발생하지 않아
가독성을 떨어트릴 수 있는 단점이 있다

이와 같은 경우에 옵셔널 체이닝이 아닌 논리곱 연산자를 사용할 수 있지만
논리곱 연산의 결과는 좌항의 피연산자가 falsy 값일 경우
좌항의 피연산자 그대로를 반환한다는 차이가 있다

4-3. null 병합 연산자

ES11 에서 도입된 널 병합 연산자 ?? 는
좌항의 피연산자가 null 또는 undefined 일 경우 우항의 값을 반환하고
아니면 좌항의 피연산자를 반환한다

널 병합 연산자는 변수에 기본 값을 설정할 때 유용하다
논리 연산자 ||를 사용할 경우 falsy 값을 모두 판별하기 때문에
0이나 빈 문자열을 값으로 써야할 경우 사용이 어려웠다

profile
떠돌이 생활을 하는. 실업자는 아니지만, 부랑 생활을 하는

0개의 댓글