논리 연산자
예시)
console.log(true || false); // true
console.log(false || true); // true
만약 피연산자가 불린형이 아니면 평가를 위해 불린형으로 변환됨
if(0 || 1) {
console.log('true'); // 0은 false, 1은 true
}
연산자와 피연산자가 여러개인 경우
or연산자는 가장 왼쪽 피연산자부터 오른쪽 피연산자까지 차례대로 나아가며 피연산자를 평가
그 다음 각 피연산자를 불린형으로 변환함 그 후 그 값이 true이면 연산을 멈추고 첫 번째 truthy를 반환하며 해당 피연산자의 변환 전 원래 값을 반환함
피연산자를 모두 평가한 후 모든 피연산자가 false이면 맨 마지막 연산자를 반환함
console.log( 0 || 1 ); // 1 (0은 falsy니까)
console.log( null || 2 ); // 2 (null도 falsy니까)
console.log( null || 0 || 1 ); // 1 (null과 0 둘다 falsy니까)
console.log( undefined || null || 0 ); // 0 (모두다 falsy니까 마지막 값 반환);
예시)
console.log(true && false); // false
console.log(false && true); // false
console.log(true && true); // true
console.log(false && false); // false
or연산자와 마찬가지로 and연산자의 피연산자 타입에 제약이 없다
if (1 && 0) {
console.log(실행될까?);
}
// 피연산자가 숫자형으로 들어와있지만 논리형으로 바뀌어 1은 true로, 0은 false로 변환됨
and연산자가 여러개인 경우 or연산자와 알고리즘은 비슷하다
다만 차이점은 and 연산자가 첫 번째 falsy를 반환하며 모든 피연산자가 true로 평가되는 경우 마지막 피연산자가 반환됨
console.log( 0 && 1 ); // 0 (1은 truthy니까)
console.log( 1 && 3 ); // 3 (모든 피연산자가 true니까 마지막 피연산자가 반환됨)
console.log( null && 0 && 1 ); // null (첫 번째 피연산자가 falsy면 첫 번째 피연산자 반환)
console.log( 0 && "하하" ); // 0
console.log( !false ); // true
console.log( !0 ) // true
not을 연달아 두 개 사용하면 값을 불린형으로 변환할 수 있다
console.log( !!"배고파" ); // true
console.log( !!null ); // false
참고로 내장함수 Boolean을 사용하면 !!을 사용한 것과 같은 결과를 낼 수 있음
console.log(Boolean(!!"배고파")); // true
console.log(Boolean(!!null)); // false