&& 와 || 연산자의 결과값이 논리 값(불리언)이 아니다.
두 피연산자 중 한쪽(오직 한쪽의) 값이다. 즉, 두 피연산자의 값들 중 하나를 선택한다.
&& 또는 || 연산자의 결과값이 반드시 불리언 타입이어야 하는 것은 아니며,
항상 두 피연산자 표현식 중 어느 한쪽 값으로 귀결된다.
var a = 42;
var b = "abc";
var c = null;
a || b;
a && b;
c || b;
c && b;
-----------------------------------------------------------------------------------------------
|| , && 연산자는 우선 첫번째 피연산자(a , c)의 불리언 값을 평가한다. 피연산자가 비 불리언 타입이면 먼저 ToBoolean로 강제변환 후 평가를 계속한다.
|| 연산자는 그 결과가 true면 첫번째 피연산자(a , c) 값을, false면 두 번재 피연산자(b) 값을 반환한다.
&& 연산자는 그 결과가 true면 두번재 피연산자(b)의 값을, false면 첫 번재 피연산자( a , c)의 값을 반환한다.
||, && 표현식의 결과값은 언제자 피연산자의 값 중 하나이고, 평가 결과가 아니다.
c && b 에서 c는 null이므로 falsy 값이다. 그러나 && 표현식은 평가 결과인 false(falsy를 강제변환)가 아니라 c 자신의 값, null로 귀결된다.
a || b;
// 대략 다음과 같다
a ? a : b;
a && b;
// 대략 다음과 같다
a ? b : a;
function foo( a , b) {
a = a || "hello";
b = b || "world";
console.log(a + " " + b);
}
foo();
foo("second test", " best");
위의 || 연산자의 패턴은 falsy 값은 무조건 건너뛸 경우에만 사용해야 한다. 그렇지 않으면 조건 평가식을 삼항 연산자( ? : )로 더욱 명시적으로 지정해야 한다.
-----------------------------------------------------------------------------------------------
function foo() {
console.log(a);
}
var a = 30;
a && foo();
&& 연산자는 첫번째 피연산자의 평가 결과가 truthy일 때에만 두 번째 피연산자를 '선택'한다고 했는데 이런 특성을 '가드 연산자(Guard Operator)라고 한다. 첫 번째 표현식이 두번째 표현식의 '가드' 역학을 한다.
-----------------------------------------------------------------------------------------------
|| , && 연산 결과가 실제로 true / false 가 아니다.
var a = 42;
var b = null;
var c = "foo";
if ( a && ( b || c)) {
console.log( "Yes");
}
a && ( b || c) 표현식의 실제 결과는 true가 아닌 "foo" 다. if문은 이 "foo"를 불리언 타입으로 강제변환하여 true로 만든다.
-----------------------------------------------------------------------------------------------
'개발 및 관리 > Javascript' 카테고리의 다른 글
자바스크립트 값 변환, null -> undefined (0) | 2022.04.10 |
---|---|
자바스크립트 값 변환, 느슨한/엄격한 동등 비교 (0) | 2022.04.10 |
자바스크립트 값 변환, ToBoolean (0) | 2022.04.10 |
자바스크립트 값 변환, Number (0) | 2022.04.10 |
자바스크립트, 문자열 메소드(String methods) (0) | 2022.04.04 |