프론트엔드 개발자의 기록 공간

[JavaScript DeepDive] 7~9장 본문

모던 자바스크립트 Deep Dive

[JavaScript DeepDive] 7~9장

[리우] 2022. 1. 25. 16:47

📖 학습 목차

  • 07장_ 연산자
  • 08장_ 제어문 (넘어감)
  • 09장_ 타입 변환과 단축 평가

 

✅ 연산자

지수 연산자

ES7에서 도입된 지수 연산자는 좌황의 피연산자를 밑으로, 우항의 피연산자를 지수로 거듭 제곱하여 숫자 값을 반환한다.

// 기존 지수 연산 사용법
Math.pow(2, 2) // 4

// ES7 지수 연산자
2 ** 2 // 4
2 ** 0 // 1

 

✅ 타입 변환과 단축 평가

✍ 타입 변환

개발자가 의도적으로 값의 타입을 변환하는 것을 명시적 타입 변환 또는 타입 캐스팅이라 한다.개발자의 의도와는 상관없이 표현식을 평가하는 도중에 자바스크립트 엔진에 의해 암묵적으로 타입이 자동 변환 되는 것을 암묵적 타입 변환 또는 타입 강제 변환이라 한다.

 

✍ 단축 평가

논리합( || ) 또는 논리곱( && ) 연산자 표현식의 평과 결과는 불리언 값이 아닐 수도 있다.

논리합 또는 논리곱 연산자 표현식은 언제나 2개의 피연산자 중 어느 한쪽으로 평가된다.

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

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

 

객체를 가리키기를 기대하는 변수가 null 또는 undefined가 아닌지 확인하고 프로퍼리를 참조할 때 유용하게 사용된다.

var elem = null;
var value = elem.value // TypeError

var elem = null;
// elem이 null이나 undefined와 같은 falsy 값이면 elem으로 평가되고
// elem이 truthy 값이면 elem.value로 평가된다.
var value = elem && elem.value; // null

 

✍ 옵셔널 체이닝 연산자

E11(ECMAScript2020)에서 도입된 옵셔널 체이닝 연산자 ?.는 좌항의 피연산자가 null 또는 undefined인 경우 undefined를 반환하고, 그렇지 않으면 우항의 프로퍼티 참조를 이어간다.

 

옵셔널 체이닝 연산자가 도입되기 이전에는 논리 연산자 &&를 사용한 단축 평가를 통해 변수가 null 또는 undefined 인지 확인했다.

하지만 0이나 ''을 기본값으로 평가가 필요할 때 문제점이 있었다.

// 논리 연산자 단축 평가
var str = '';
// 문자열 길이를 참조한다.
var length = str && str.length;
// 문자열 길이를 참조하지 못한다.
console.log(length); // ''

// 옵셔널 체이닝
var length = str?.length;
// 문자열 길이 참조 가능
console.log(length); // 0

옵서녈 체이닝 연산자는 null 또는 undefined가 아니면 우항의 프로퍼티 참조를 이어간다.

 

✍ null 병합 연산자

E11(ECMAScript2020)에서 도입된 null 병합 연산자 ??는 좌항의 피연산자가 null 또는 undefuned인 경우 우항의 피연산자를 반환하고, 그렇지 않으면 좌항의 피연산자를 반환한다. null 병합 연산자는 변수에 기본값을 설정할 때 유용하다.

var foo = null ?? 'default string';
console.log(foo) // 'default string'

null 병합 연산자가 도입되기 이전에는 논리 연산자( || )를 사용한 단축 평가를 통해 변수에 기본값을 설정했다. 이 또한 위에 언급한 것처럼 0이나 ""을 기본값으로 사용할 때, 문제가 발생한다.

var foo = '' || 'default string';
console.log(foo); // 'default string'

var foo = '' ?? 'default string';
console.log(foo); // ''

 

👨‍💻 처음 딥 다이브 교재를 선택할 때, 양이 너무 많고 이미 알고 있던 지식들도 많아서 고민을 했었다.
하지만 논리 연산자를 이용한 단축 평가라는 개념을 처음 알게 되었고, 이를 발전시킨 것이 옵셔널 체이닝, null 병합 연산자라는 것을 알 수 있었다. 정확한 명칭과 원리를 정확하게 파악할 수 있어서 좋은 것 같다.
아직까지 초반 부분이지만, 절대 후회하지 않는 선택인 것 같다. 보다가 아는 개념이 나오면 편하게 슥슥 넘기면서 보면 되기 때문에 양이 많더라도 부담은 안 되는 것 같다.

728x90

'모던 자바스크립트 Deep Dive' 카테고리의 다른 글

[JavaScript DeepDive] 13~15장  (0) 2022.02.10
[JavaScript DeepDive] 12장_함수  (0) 2022.02.09
[JavaScript DeepDive] 10~11장  (0) 2022.01.27
[JavaScript DeepDive] 4~6장  (0) 2022.01.24
[JavaScript DeepDive] 1~3장  (0) 2022.01.20
Comments