//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

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() 와 같다.