||(OR)

const value1 = false;
const value2 = 4 < 2;

// || (or)

// (비효율)
console.log(`or: ${ value1 || value2 || check() }`); // or: true

// (효율)
console.log(`or: ${ check() || value1 || value2 }`); // or: true

function check() {
    for (let i = 0; i < 10; i++)
    {
        // wasting time
        console.log('♠');
    }
    return true;
}

&&(AND)

const value1 = false;
const value2 = 4 < 2;

// && (and)

// (비효율)
console.log(`and: ${check() && value1 && value2}`); // and: false

// (효율)
console.log(`and: ${value1 && value2 && check()}`); // and: false

function check() {
    for (let i = 0; i < 10; i++)
    {
        // wasting time
        console.log('♠');
    }
    return true;
}

!(NOT)

if(nullableObject != null)
{
    nullableObject.something;  // something은 객체(함수)의 변수값
}
// object가 null이 아니여 야지만 뒤에오는 객체(함수)가 가지는 변수를 가져올 수 있다.