이중 파이프 연산자 ( ||
) 란 무엇입니까 ?
이중 파이프 연산자 ( ||
)는 논리 OR
연산자 입니다. 에서 대부분의 언어 는 다음과 같은 방식으로 작동합니다 :
- 첫 번째 값이
false
인 경우 두 번째 값을 확인합니다. 이면을 true
반환 true
하고이면 false
을 반환합니다 false
.
- 첫 번째 값이
true
인 경우 true
두 번째 값이 무엇이든 항상를 반환합니다 .
따라서 기본적으로 다음과 같이 작동합니다.
function or(x, y) {
if (x) {
return true;
} else if (y) {
return true;
} else {
return false;
}
}
여전히 이해가되지 않으면 다음 표를보십시오.
| true false
------+---------------
true | true true
false | true false
다시 말해, 두 값이 모두 거짓 인 경우에만 거짓입니다.
JavaScript에서 어떻게 다른가요?
JavaScript는 형식 이 느슨 하기 때문에 약간 다릅니다 . 이 경우 ||
부울이 아닌 값으로 연산자를 사용할 수 있습니다 . 의미가 없지만이 연산자를 함수 및 객체와 같이 사용할 수 있습니다.
(function(){}) || {}
거기서 무슨 일이?
값이 부울이 아닌 경우 JavaScript는 암시 적으로 boolean으로 변환합니다 . 이 값이 falsey 경우 (예 것을 의미한다 0
, ""
, null
, undefined
(참조 자바 스크립트의 모든 falsey 값 , 그것으로 처리 될 것이다)) false
; 그렇지 않으면로 취급됩니다 true
.
true
빈 함수가 진실이기 때문에 위의 예제는을 제공해야합니다 . 글쎄요. 빈 함수를 반환합니다. ||
처음에 작성한대로 JavaScript 연산자가 작동하지 않기 때문 입니다. 다음과 같은 방식으로 작동합니다.
- 첫 번째 값이 false 이면 두 번째 값을 반환 합니다 .
- 첫 번째 값이 정확한 경우 첫 번째 값 을 반환 합니다 .
놀랐나요? 실제로, 그것은 전통적인 ||
연산자 와 "호환"됩니다 . 다음 함수로 작성 될 수 있습니다.
function or(x, y) {
if (x) {
return x;
} else {
return y;
}
}
로 true 값을 전달하면 true 값을 x
반환 x
합니다. 따라서 나중에 if
절 에서 사용하면 :
(function(x, y) {
var eitherXorY = x || y;
if (eitherXorY) {
console.log("Either x or y is truthy.");
} else {
console.log("Neither x nor y is truthy");
}
}(true/*, undefined*/));
당신은 얻을 "Either x or y is truthy."
.
경우 x
falsey이었다 eitherXorY
될 것이다 y
. 이 경우 "Either x or y is truthy."
if y
는 진실한 것입니다. 그렇지 않으면 당신은 얻을 "Neither x nor y is truthy"
것이다.
실제 질문
이제 ||
운영자의 작동 방식을 알면 x = x || y
의미 하는 바를 스스로 알아낼 수 있습니다 . 경우 x
truthy이며, x
할당되어 x
있으므로 실제로 아무 일도 일어나지 않는다; 그렇지 않으면 y
에 할당됩니다 x
. 일반적으로 함수에서 기본 매개 변수를 정의하는 데 사용됩니다. 그러나, 종종 간주됩니다 나쁜 프로그래밍 연습 그것이 falsey 값을 (필요하지 않은 통과를 방지하기 때문에, undefined
또는 null
매개 변수로). 다음 예제를 고려하십시오.
function badFunction(/* boolean */flagA) {
flagA = flagA || true;
console.log("flagA is set to " + (flagA ? "true" : "false"));
}
첫눈에 유효 해 보입니다. 당신이 전달 된 경우, 어떤 일이 일어날 것 false
같은 flagA
(그것의 부울 이후, 즉 할 수있는 매개 변수 true
나 false
)? 될 것 true
입니다. 이 예에서 설정하는 방법이 없습니다 flagA
에 false
.
명시 적으로 여부를 확인하기 위해 더 좋은 생각이 될 것 flagA
입니다 undefined
그렇게 :
function goodFunction(/* boolean */flagA) {
flagA = typeof flagA !== "undefined" ? flagA : true;
console.log("flagA is set to " + (flagA ? "true" : "false"));
}
더 길지만 항상 작동하며 이해하기 쉽습니다.
기본 함수 매개 변수에 ES6 구문을 사용할 수도 있지만 IE와 같은 이전 브라우저에서는 작동하지 않습니다. 이러한 브라우저를 지원하려면 Babel을 사용 하여 코드를 변환해야합니다 .
MDN의 논리 연산자를 참조하십시오 .
falsy
뿐만 아니라,undefined
. 내가 본 횟수doWeDoIt = doWeDoIt || true
는 나를 울리기에 충분합니다. (즉doWeDoIt
이제는되지 않을 것입니다false
)