연산자(operator)

Yoo Jong Hyeon·2023년 5월 23일
0

Front-end & JS

목록 보기
2/8
post-thumbnail

동등/일치 비교 연산자

자바나 C와 같이 변수의 타입을 변수 선언 때 정의하는 정적 타입 언어(static type language)와 달리 파이썬이나 자바스크립트는 변수의 할당에 의해 타입이 결정(타입추론, type inference)되는 동적 타입 언어(dynamic type language)이다.

따라서 다른 정적 타입 언어와 다르게 자바스크립트에서는 새로운 비교 연산자를 만날 수 있다.

동등 비교 연산자(==)

var x = 10;
var y = 10;

if(x == y){
  console.log(`equal`);
}

y = `10`;

if(x == y){
  console.log(`equal`);
}

위 코드를 실행하면 'equal'을 두 번 출력한다. 이는 동등 비교 연산자는 암묵적 타입 변환(implicit coercion)으로 피연산자의 타입을 같게 만든 뒤, 비교 연산을 수행 하기 때문이다.

따라서 동등 비교 연산자는 편리한 경우도 물론 있지만 대부분 결과를 예측하기 어렵고 개발자의 실수를 야기하기 좋다. 서로 다른 타입을 동등 비교 연산자로 비교하는 로직은 안티 패턴(anti-pattern)이라고 할 수 있다.

일치 비교 연산자(===)

일치 비교 연산자는 피연산자의 타입(type)과 값이 모두 같은 경우에 한하여 true를 반환한다.

var x = 10;
var y = 10;

if(x === y){
  console.log(`equal-1`);
}

y = `10`;

if(x === y){
  console.log(`equal-2`);
}

위 코드를 실행하면 'equal-1'을 출력한다. 이는 일치 비교 연산은 피연산자의 타입을 암묵적으로 변환하지 않기 때문이다.

단 일치 비교 연산자에서 주의할 것은 NaN 값이다.

// 불일치 비교 연산자
if(NaN !== NaN){
  soncole.log(`non-equal`);
}

위 예제는 'non-equal'을 출력한다. NaN 은 Not-A-Number(숫자가 아님) 이라는 뜻으로, 음수의 제곱근을 구하려고 하거나, 0으로 나누려고 했을 때 발생한다. 따라서 NaN 값은 자신과 일치하지 않는 유일한 값이다.

따라서 숫자가 NaN인지 조사하려면 빌트인 함수(Built-in function)인 Number.isNaN 함수를 사용해야 한다.

if(Number.isNaN(NaN)){
  console.log(`It's NaN`);
}

if(!Number.isNaN(10)){
  console.log(`It's not NaN`);
}

옵셔녈 체이닝 연산자

옵셔녈 체이닝(obtional chaining) 연산자는 ES11에서 도입된 문법이다.

좌항의 피연산자가 null 또는 undefined 인 경우 undefined를 반환하고, 그렇지 않으면 우항의 프로퍼티 참조를 이어간다. 이는 마치 자바의 Objects.requireNonNull 메서드와 비슷하다.

var var1 = null;
var var2;

console.log(var1?.value);
console.log(var2?.value);

위 예제 코드는 모두 undefined를 출력한다.

null 병합 연산자

null 병합(nullish coalescing) 연산자는 ES11에서 도입된 문법이다.

좌항이 null 또는 undefined 인 경우 우항을 반환하고, 그렇지 않으면 좌항을 반환한다. null 병합 연산자는 변수에 값이 할당되지 않은 경우 기본값을 할당하기 위한 문법으로 적합하다.

var i;

...

i = null ?? 0;

위 예제 코드는 변수 i를 사용하기 전, i가 초기화 되지 않은 변수라면 초기값으로 0을 할당하는 코드이다.


Reference

모던 자바스크립트 Deep Dive
이웅모 저 | 위키북스 | 2020년 09월 25일

0개의 댓글

관련 채용 정보