[타입 변환과 단축 평가] - 단축 평가

Donggu(oo)·2023년 1월 31일
0

JavaScript

목록 보기
5/49
post-thumbnail

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


  • 단축 평가란 논리곱(&&) 연산자와 논리합(||) 연산자는 논리 연산의 결과를 결정하는 피연산자를 타입 변환하지 않고 그대로 반환하는 것이다.

  • 단축 평가는 표현식을 평가하는 도중에 평가 결과가 확정된 경우 나머지 평가 과정을 생략하는 것을 말한다.

  • 단축 평가는 아래의 규칙을 따른다.

    단축 평가 표현식평가 결과
    true && anythinganything
    false && anythingfalse
    true || anythingtrue
    false || anythinganything
// 논리곱(&&) 연산자
'Cat' && 'Dog'  // 'Dog'
'false' && 'Dog'  // false
'Cat' && false  // false

// 논리합(||) 연산자
'Cat' && 'Dog'  // 'Cat'
'false' && 'Dog'  // 'Dog'
'Cat' && false  // 'Cat'

1) 단축 평가를 사용하는 경우

1-1. 객체를 가리키기를 기대하는 변수가 null 또는 undefined가 아닌지 확인하고 프로퍼티를 참조할 때

  • 객체를 가리키기를 기대하는 변수의 값이 객체가 아니라 null 또는 undefined인 경우 객체의 프로퍼티를 참조하면 타입 에러가 발생한다.
let elem = null;
let value = elem.value;  // TypeError: Cannot read property 'value' of null
  • 이때 단축 평가를 사용하면 에러가 발생하지 않는다.
let elem = null;

// elem이 null이나 undefined와 같은 Falsy 값이면 elem으로 평가되고,
// elem이 Truthy 값이면 elem.value로 평가된다.
let value = elem && elem.value;  // null

1-2. 함수 매개변수에 기본값을 설정할 때

  • 함수를 호출할 때 인수를 전달하지 않으면 매개변수에는 undefined가 할당된다. 이때 단축 평가를 사용해 매개변수의 기본값을 설정하면 undefined로 인해 발생할 수 있는 에러를 방지할 수 있다.
// 단축 평가를 사용한 매개변수의 기본값을 설정
function getStringLength(str) {
  str = str || '';
  return str.length;
}

getStringLength();  // 0
getStringLength('hi');  // 2

// ES6의 매개변수의 기본값 설정
function getStringLength(str = '') {
  return str.length;
}

getStringLength();  // 0
getStringLength('hi');  // 2

2. 옵셔널 체이닝 연산자


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

let value = elem?.value;
console.log(value);  // undefined
  • 논리 연산자 &&는 좌항 피연산자가 false로 평가되는 Falsy 값이면 좌항 피연산자를 그대로 반환한다. 하지만 0이나 ''은 객체로 평가될 때도 있다.
let str = '';

// 문자열의 길이(length)를 참조한다.
let length = str && str.length;

// 문자열의 길이(length)를 참조하지 못한다.
console.log(length);  // ''
  • 하지만 옵셔널 체이닝 연산자 ?.는 좌항 피연산자가 false로 평가되는 Falsy값이라도 null 또는 undefined가 아니면 우항의 프로퍼티 참조를 이어간다.
let str = '';

// 문자열의 길이(length)를 참조한다. 이때 좌항 피연산자가 false로 평가되는 Falsy 값이라도
// null 또는 undefined가 아니면 우항의 프로퍼티 참조를 이어간다.
let length = str?.length;

console.log(length);  // 0

3. null 병합 연산자


  • ES11(ECMAScript2020)에서 도입된 null 병합 연산자 ??는 좌항의 피연산자가 null 또는 undefined인 경우 우항의 피연산자를 반환하고, 그렇지 않으면 좌항의 피연산자를 반환한다.

  • null 병합 연산자 ??는 변수에 기본값을 설정할 때 유용하다.

// 좌항의 피연산자가 null 또는 undefined이면 우항의 피연산자를 반환하고,
// 그렇지 않으면 좌항의 피연산자를 반환한다.
let foo = null ?? 'default string';

console.log(foo);  // 'default string'
  • 논리 연산자 ||를 사용한 단축 평가의 경우 좌항의 피연산자가 false로 평가되는 Falsy 값이면 우항의 피연산자를 반환한다.
// 만약 Falsy 값인 `0`이나 `''`도 기본값으로서 유효하다면 예기치 않은 동작이 발생할 수 있다.
let foo = '' ?? 'default string';

console.log(foo);  // ''
  • 하지만 null 병합 연산자 ??는 좌항의 피연산자가 false로 평가되는 Falsy 값이라도 null 또는 undefined가 아니면 좌항의 피연산자를 그대로 반환한다.
let foo = '' ?? 'default string';

console.log(foo);  // ''

0개의 댓글