동등 비교 연산자와 동일(일치) 비교 연산자는 비교하는 엄격성 정도가 다름
동등 비교 → 암묵적 타입 변환 후 타입을 통해 타입을 일치시킨 후 같은 값을 지녔는지 비교
동일 비교 → 타입과 값이 모두 일치하는지 비교함
예를 들어 같은 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
기본적인 ||(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('홀수입니다.');
옵셔널 체이닝 연산자(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