
논리 연산자는 보통
Boolean(논리적) 값과 함께 쓰이며, 불리언 값을 반환합니다. 그런데,&&과||연산자는 사실 피연산자 중 하나의 값을 반환합니다. 그러므로 불리언 외의 다른 값과 함께 사용하면 불리언 값이 아닌 것을 반환할 수 있습니다.
A&&B가 true가 되기 위해서 A와 B가 모두 참이여한다" 그리고 "A||B가 true가 되기 위해서 A 또는 B가 참이 되어야한다"라고 생각하고 이 개념 이상으로 논리연산자를 사용하거나 생각해보지 않았다.expr1 && expr2 일 때 반환값은 expr1이 truthy한 값일 경우 expr2를 반환하고, 그렇지 않으면 expr1을 반환한다.expr1이 truthy한 값이라면, expr2는 검사할 필요도 없이 그대로 반환해버린다. expr2가 truthy한 값이 라면 전체 값이 truthy한 값으로 나올 것이고, 그렇지 않다면 falsy한 값이 나올테니. expr1 && expr2 일 때 반환값은 expr1이 truthy한 값일 경우 expr1를 반환하고, 그렇지 않으면 expr2을 반환한다.expr1이 truthy한 값이라면, expr1을 반환한다. 둘 중 하나만 truthy한 값이어도 truthy를 반환해야 하기 때문이다. expr1이 falsy한 값이라면 expr2는 검사할 필요도 없이 그대로 반환해버린다. expr2가 truthy한 값이 라면 전체 값이 truthy한 값으로 나올 것이고, 그렇지 않다면 falsy한 값이 나올테니. true로 변환할 수 있으면 false를 반환한다. 그렇지 않으면 true를 반환한다.이중 NOT(!!)연산자를 통해 어떤 값이든 불리언 값으로 변환할 수 있다.n1 = !!true // !!truthy returns true
n2 = !!{} // !!truthy returns true: any object is truthy...
n3 = !!(new Boolean(false)) // ...even Boolean objects with a false .valueOf()!
n4 = !!false // !!falsy returns false
n5 = !!"" // !!falsy returns false
n6 = !!Boolean(false) // !!falsy returns false