비교 연산자
동등 비교 (==, !=) : 암묵적 타입 변환을 통해 타입 일치 시킨 후 같은 값인지 비교
일치 비교 (===, !==) : 타입과 값이 모두 일치하는지 비교
console.log(`NaN == NaN : ${ NaN == NaN }`);
console.log(`NaN === NaN : ${ NaN === NaN }`);
// Number.isNaN 사용
console.log(`Number.isNaN(NaN) : ${ Number.isNaN(NaN) }`);
// 일치 비교 연산자
console.log(`'hello' === 'hello' : ${ 'hello' === 'hello' }`);
console.log(`'hello' !== 'hello' : ${ 'hello' !== 'hello' }`);
// 대소 비교 연산자
console.log(`'apple' < 'banana' : ${ 'apple' < 'banana' }`);
console.log(`'apple' > 'banana' : ${ 'apple' > 'banana' }`);
console.log(`'cat' < 'Zoo' : ${ 'cat' < 'Zoo' }`);
console.log(`'cat' > 'Zoo' : ${ 'cat' > 'Zoo' }`);
단축 평가 : 표현식을 평가하는 도중 평가 결과가 확정 된 경우 나머지 평가 과정을 생략하는 것
단축 평가를 활용하면 if문을 대체할 수 있다.
var num = 2;
if(num % 2 == 0) {
console.log('짝수');
} else {
console.log('홀수');
}
num % 2 == 0 && console.log('짝수');
num % 2 == 0 || console.log('홀수');
객체를 가리키기를 기대하는 변수가 null 또는 undefined가 아닌지 확인하고, 프로퍼티를 참조할 때 단축 평가를 유용하게 사용할 수 있다.
var obj = null;
// TypeError: Cannot read properties of null (reading 'value')
// var val = obj.value;
var val = obj && obj.value;
ECMAScript(2020) (?) : ES11에서 도입 된 연산자
좌항의 피연산자가 null 또는 undefined인 경우 undefined를 반환하고
그렇지 않으면 우항의 프로퍼티 참조를 이어간다.
var obj = null;
// var val = obj.value;
var val = obj?.value;
console.log(val);
옵셔널 체이닝 연산자 이전에는 논리 연산자 &&를 사용한 단축 평가를 활용했었는데 빈 문자열과 같은 Falsy 값을 false 취급해서 생기는 문제가 있다.
var str = '';
var len = str && str.length;
console.log(len);
var len2 = str?.length;
console.log(len2);
null 병합 연산자 (??) :
좌항의 피연산자가 null 또는 undefined인 경우 우항의 피연산자를 반환하고,
그렇지 않으면 좌항의 피연산자를 반환한다.
변수에 기본 값을 설정할 때 유용하다.
var obj = null;
var test = obj ?? '기본 값';
console.log(test);
null 병합 연산자 이전에는 논리 연산자 || 를 사용한 단축 평가로 변수에 기본 값을 설정할 수 있었다.
단, 빈 문자열과 같은 Falsy 값을 false로 취급해서 생기는 문제가 있다.
var val = '' || '기본 값';
console.log(val);
var val2 = '' ?? '기본 값';
console.log(val2);
java와 동일하게 사용한다.