Operators 사용시에 주의 사항

//Logical operators
// ||(or), finds the first truthy value
const value1 = true;
const value2 = 4 < 2;
console.log(`or: ${value1 || value2 || check()}`);

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

위의 코드의 경우에서 check() function은 그냥 시간을 낭비하는 코드이다. ‘or(||)’ operator는 조건식에서 하나라도 참이면 참을 리턴하는데, 조건식을 확인할 때 맨 앞에 정의된 것부터 참인지 거짓인지 확인 한다. 즉, 조건식의 앞에서부터 차례대로 참 거짓을 판단하는데, 하나라도 참이 나오면 그 뒤의 조건식은 실행하지 않는다.

그래서 함수 호출등의 무거운 것들은 조건식에서 최대한 맨 마지막으로 보내는 것이 좋다.

// &&(and), finds the first falsy value
// ||(or), finds the first truthy value
const value1 = false;
const value2 = 4 < 2;
console.log(`or: ${value1 || value2 || check()}`);

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

‘and(&&)’ operator 의 경우는 하나만 거짓이어도 거짓을 리턴하는데, or 연산자와 동일하게 맨 앞에서부터 체크하므로 조건식 안에서 가벼운 오퍼레이션들을 앞으로 배치하는 것이 효율적이다.

object equality by reference

//object equality by reference
const ellie1 = {name: 'ellie'};
const ellie2 = {name: 'ellie'};
const ellie3 = ellie1;
console.log(ellie1 == ellie2); // false
console.log(ellie1 === ellie2); // false
console.log(ellie1 === ellie3); // true
https://www.youtube.com/watch?v=YBjufjBaxHo&list=PLv2d7VI9OotTVOL4QmPfvJWPJvkmv6h-2&index=4

ellie3에 ellie1의 reference value를 할당했기때문에 비교시에 true를 반환함

equality – puzzler

console.log(0 == false); //true
console.log(0 === false); //false (0은 boolean 타입이 아니므로)
console.log('' == false); // true
console.log('' === false) // false (''는 boolean 타입이 아니므로)
console.log(null == undefined); // true
console.log(null === undefined); // false 

True & False

  • False : 0, -0, ”, null, undefined, NaN
  • True: -1, ‘hello’, ‘false’ …
    • False 값을 제외한 모든 값들은 True로 볼수 있다.

let obj = {};
obj && console.log('obj.name'); // obj가 True 일때, 출력

if(obj){
  console.log('obj.name');
}// obj && console.log() 와 같다.