논리 연산자(JavaScript)

논리 연산자는 논리(부울) 연산을 수행합니다.
연산자 설명
expr1 && expr2 (논리 AND) expr1expr2가 모두 true이면 true를 리턴합니다.
expr1 || expr2 (논리 OR) expr1 또는 expr2 중 하나가 true이거나 둘 다 true이면 true를 리턴합니다.
! expr1 (논리 NOT) expr1이 false이면 true를 리턴하고, 그렇지 않은 경우 false를 리턴합니다.

false로 변환할 수 있는 표현식의 예제는 널, 0, 비어 있는 문자열(??????) 또는 정의되지 않음으로 평가되는 항목입니다. && 및 || 연산자가 부울 값이 아닌 피연산자에 사용될 수 있어도 리턴 값은 항상 부울 값으로 변환 가능하므로 여전히 부울 연산자로 간주할 수 있습니다.

사용법

모범 사례는 부울 피연산자에서 논리 연산자를 사용하는 것입니다. 그러나 임의의 유형의 피연산자를 결합할 수 있습니다. 다음은 엄격한 규칙입니다.
  • AND의 경우 첫 번째 피연산자가 false이면 결과는 false이고, 그렇지 않으면 결과는 두 번째 피연산자의 부울 값입니다.
  • OR의 경우 첫 번째 피연산자가 true이면 결과는 true이고, 그렇지 않으면 결과는 두 번째 피연산자의 부울 값입니다.
  • NOT의 경우 피연산자가 false이면 결과는 true이고, 그렇지 않으면 결과는 true입니다.
부울로 처리되는 경우 다음 값은 false입니다. 다른 유효한 숫자 및 문자열 값은 true로 처리됩니다.
  • 0 또는 0.0
  • 비어 있는 문자열
  • 정의되지 않음

예제

이 예제는 논리 연산자의 연습을 보여줍니다. 여기에서는 부울 및 부울이 아닌 피연산자를 처리하는 방법을 보여줍니다.
function p(stuff) {
	print("<<<" + stuff + ">>>");
}

var a = true;
var b = false;
var n0 = 0;
var n1 = 1;
var nm1 = -1;
var x0 = 0.0;
var x1 = 1.1;
var s0 = "";
var s1 = "foo";
var sn = null;

// How different types are treated as boolean
if(a) p("a is true"); else p("a is false"); // true
if(b) p("b is true"); else p("b is false"); // false
if(n0) p("n0 is true"); else p("n0 is false"); // false
if(n1) p("n1 is true"); else p("n1 is false"); // true
if(nm1) p("nm1 is true"); else p("nm1 is false"); // true
if(x0) p("x0 is true"); else p("x0 is false"); // false
if(x1) p("x1 is true"); else p("x1 is false"); // true
if(s0) p("s0 is true"); else p("s0 is false"); // false
if(s1) p("s1 is true"); else p("s1 is false"); // true
if(sn) p("sn is true"); else p("sn is false"); // false

// Using logical values as operands
p("a && a = " + (a && a)); // true
p("a && b = " + (a && b)); // false
p("b && b = " + (b && b)); // false
p("b && a = " + (b && a)); // false
p("a || a = " + (a || a)); // true
p("a || b = " + (a || b)); // true
p("b || b = " + (b || b)); // false
p("b || a = " + (b || a)); // true
p("!a = " + (!a)); // false
p("!b = " + (!b)); // true

// Using non-logical values as operands
p("n1 && n1 = " + (n1 && n1)); // true
p("n1 && n0 = " + (n1 && n0)); // false
p("n0 && n0 = " + (n0 && n0)); // false
p("n0 && n1 = " + (n0 && n1)); // false
p("n1 || n1 = " + (n1 || n1)); // true
p("n1 || n0 = " + (n1 || n0)); // true
p("n0 || n0 = " + (n0 || n0)); // false
p("n0 || n1 = " + (n0 || n1)); // true
p("!n1 = " + (!n1)); // false
p("!n0 = " + (!n0)); // true