이중 파이프 연산자 ( ||) 란 무엇입니까 ?
이중 파이프 연산자 ( ||)는 논리 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.".
경우 xfalsey이었다 eitherXorY될 것이다 y. 이 경우 "Either x or y is truthy."if y는 진실한 것입니다. 그렇지 않으면 당신은 얻을 "Neither x nor y is truthy"것이다.
실제 질문
이제 ||운영자의 작동 방식을 알면 x = x || y의미 하는 바를 스스로 알아낼 수 있습니다 . 경우 xtruthy이며, 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)