논리 연산자
AND 연산자 &&
: 둘 다 true면 true
- 우선순위: AND(&&) > OR(||)
✨ AND 연산자로 첫 번째 false 찾기
- AND 연산자가 여러 개인 경우, 첫 번째 falsy 반환
- falsy가 없다면 마지막 값을 반환
result = value1 || value2 || value3;
(1) 왼쪽부터 피연산자를 boolean형으로 변환하며 true 찾기
(2) false면 연산을 멈추고 해당 피연산자의 기존값을 반환 (더 이상 진행하지 않는다.)
(3) false가 없으면 마지막 피연산자 반환
// 첫 번째 피연산자가 truthy이면,
// AND는 두 번째 피연산자를 반환합니다.
alert( 1 && 0 ); // 0
alert( 1 && 5 ); // 5
// 첫 번째 피연산자가 falsy이면,
// AND는 첫 번째 피연산자를 반환하고, 두 번째 피연산자는 무시합니다.
alert( null && 5 ); // null
alert( 0 && "아무거나 와도 상관없습니다." ); // 0
OR 연산자 ||
: 둘 중 하나가 true면 true
- 피연산자가 boolean형이 아니면 boolean형으로 변환
✨ OR 연산자로 첫 번째 true 찾기
- OR 연산자가 여러 개인 경우, 첫 번째 truthy 반환
- truthy가 하나도 없다면 마지막 피연산자를 반환
result = value1 || value2 || value3;
(1) 왼쪽부터 피연산자를 boolean형으로 변환하며 true 찾기
(2) true면 연산을 멈추고 해당 피연산자의 기존값을 반환 (더 이상 진행하지 않는다.)
(3) true가 없으면 마지막 피연산자 반환
alert( 1 || 0 ); // 1 (1은 truthy임)
alert( null || 1 ); // 1 (1은 truthy임)
alert( null || 0 || 1 ); // 1 (1은 truthy임)
alert( undefined || null || 0 ); // 0 (모두 falsy이므로, 마지막 값을 반환함)
------------------------
let firstName = "";
let lastName = "";
let nickName = "바이올렛";
alert( firstName || lastName || nickName || "익명"); // 바이올렛
a &&= b : a가 true일 때, a에 b값 할당
a ||= b : a가 false일 때, a에 b값 할당
a ??= b : a가 undefined/null일 때, a에 b값 할당
! (NOT)
: 피연산자를 boolean형으로 변환 ➡ 변환값을 반대로 만듦
alert( !true ); // false
alert( !0 ); // true
!! (NOT 두 개)
: boolean형으로 변환 (= Boolean( ))
alert( !!"non-empty string" ); // true
alert( !!null ); // false
논리 연산자
ko.javascript.info