01. 동등/동일(일치) 비교 연산자

동등 비교 연산자와 동일(일치) 비교 연산자는 비교하는 엄격성 정도가 다름

동등 비교 → 암묵적 타입 변환 후 타입을 통해 타입을 일치시킨 후 같은 값을 지녔는지 비교

동일 비교 → 타입과 값이 모두 일치하는지 비교함

예를 들어 같은 5라는 값을 비교할 때 동등 비교(’ == ‘) 는 타입을 상관하지 않고 5라는 값만 일치하면 true를 반환하지만 동일 비교(’=== ‘)는 타입까지 비교하여 숫자 5 와 문자열 ‘5’ 의 비교 같은 경우 false를 반환

/* 1. 숫자 1, 문자 '1', true 비교 */
console.log(`1 == '1' : ${1 == '1'}`);        // true
console.log(`1 == true : ${1 == true}`);      // true
console.log(`1 === '1' : ${1 === '1'}`);      // false
console.log(`1 === true : ${1 === true}`);    // false

/* 2. 숫자 0, 문자 '0', 빈문자열 '', false 비교 */
console.log(`0 == '0' : ${0 == '0'}`);         // true
console.log(`0 == '' : ${0 == ''}`);           // true
console.log(`0 == false : ${0 == false}`);     // true
console.log(`0 === '0' : ${0 === '0'}`);       // false
console.log(`0 === '' : ${0 === ''}`);         // false
console.log(`0 === false : ${0 === false}`);   // false

/* 3. null, undefined 비교 */
console.log(`null == undefined : ${null == undefined}`);    // true
console.log(`null === undefined : ${null === undefined}`);  // false

/* 4. NaN은 자신과 일치하지 않는 유일한 값이다. */
console.log(`NaN == NaN : ${NaN == NaN}`);                  // false
console.log(`NaN === NaN : ${NaN === NaN}`);                // false

// NaN을 일치 시키기 위해서는 함수가 필요함 -> true 반환
console.log(`Number.isNaN(NaN) : ${Number.isNaN(NaN)}`)     // true

/* 5. 일치하지 않는 값 비교 */
console.log(`1 != '1' : ${1 != '1'}`);                      // false
console.log(`1 !== '1' : ${1 !== '1'}`);                    // true

02. 논리 연산자

기본적인 ||(OR), &&(AND), !(NOT) 문법은 자바와 동일하다.

javascript에는 **단축 평가(short-ciruit-evaluation)**가 존재한다.

→ 표현식을 평가하는 과정중 평가 결과가 확정 된 경우 나머지 평가 과정을 생략하는 것

/* 1. OR의 경우 */
// 왼쪽 값이 false이면 오른쪽 아니면 왼쪽
console.log('apple' || 'banana');       // apple
console.log(false || 'banana');         // banana
console.log('apple' || false);          // apple

/* 2. AND의 경우 */
// 왼쪽 값이 true이면 오른쪽 아니면 왼쪽
console.log('apple' && 'banana');       // banana
console.log(false && 'banana');         // false
console.log('apple' && false);          // false

/* 단축 평가를 사용하면 if문을 대체할 수 있다. */
var num = 1;

if(num % 2 == 0) 
    console.log('짝수입니다.');
else
    console.log('홀수입니다.');

/* 단축 평가를 활용하여 같은 결과를 얻을 수 있다.(해당 되는 항을 실행도 시켜준다.) */
num % 2 == 0 && console.log('짝수입니다.');
num % 2 == 0 || console.log('홀수입니다.');

03. ES11에서 사용하는 연산자

옵셔널 체이닝 연산자(optional-chaining-operator)

var val = obj?.value;   // npe 방지 코드 개념
console.log(val);   // undefined

var str = '';           // Falsy하지만 null이나 undefined가 아닌 경우
var len = str?.length;
console.log(len);   // 0