여러 조건이있는 javascript if 문이 모든 조건을 테스트합니까?
자바 스크립트에서 테스트 할 여러 조건이있는 if 문을 사용할 때 자바 스크립트는 모든 조건을 테스트합니까, 아니면 이미 거짓이면 모두 테스트하기 전에 보석금을 낼까요?
예를 들면 :
a = 1
b = 2
c = 1
if (a==1 && b==1 && c==1)
자바 스크립트는 이러한 3 가지 조건 모두에 대해 테스트할까요? 아니면 b가 1과 같지 않아 거짓임을 확인한 후 문을 종료합니까?
성능의 관점에서 묻습니다. 예를 들어, 3 개의 복잡한 jQuery 선택기를 테스트하는 경우 첫 번째를 통해 FALSE를 반환 할 것이 분명하다면 jQuery가 DOM을 3 번 통과하지 않는 것이 좋습니다. (이 경우 3 개의 if 문을 중첩하는 것이 더 합리적입니다).
부록 : 더 많은 호기심, 이것에 대한 적절한 용어는 무엇입니까? 나는 많은 사람들이 '단락'이라는 용어를 사용한다는 것을 알고 있습니다. 또한 일부 언어는 이것을 수행하고 다른 언어는 수행하지 않습니까?
&&
운영자 "단락"- 왼쪽 조건이 거짓 인 경우이며, 그것은 올바른 평가를 귀찮게하지 않습니다.
마찬가지로 ||
왼쪽 조건이 참이면 연산자가 단락됩니다.
편집 :하지만 벤치마킹하고 문제가 있음을 결정할 때까지 성능에 대해 걱정해서는 안됩니다. 조기 마이크로 최적화는 유지 관리의 골칫거리입니다.
성능 측면에서 이것은 마이크로 최적화가 아닙니다.
3 개의 부울 변수 a, b, c가 있으면 마이크로 최적화입니다.
부울 변수를 반환하는 3 개의 함수를 호출하면 각 함수에 시간이 오래 걸릴 수 있으며이 단락을 아는 것이 중요 할뿐만 아니라 순서도 중요합니다. 예를 들면 :
if (takesSeconds() && takesMinutes())
보다 훨씬 낫다
if (takesMinutes() && takesSeconds())
둘 다 똑같이 false를 반환 할 가능성이 있습니다.
그래서 다음과 같은 자바 스크립트 코드로 할 수 있습니다.
var x = x || 2;
즉, x가 정의되지 않았거나 '거짓'이면 기본값은 2입니다.
누군가 가 모든 조건 의 평가 를 강제 하는 방법이 있는지 궁금한 경우 , 경우에 따라 비트 연산자 &
를 |
사용할 수 있습니다.
var testOr = true | alert(""); //alert pops up
var testAnd = false & alert(""); //alert pops up
이 사용해야 정말 신중하게 비트 연산자가 피연산자의 단일 비트에서 작동하며 산술 연산자이기 때문에 할 수 항상의 "비 단락"버전과 같은 기능 &&
과||
예:
-2147483648 && 1 = 1
그러나
-2147483648 & 1 = 0
여기에 도착한 누군가가 (나와 같은) 정보를 찾는 데 도움이 되었기를 바라며 수정 및 반례에 대해 @Max에게 감사드립니다.
첫 번째 조건이 참인 경우에만 모든 조건을 테스트하고 직접 테스트합니다.
javascript: alert (false && alert("A") && false);
단락 회로-귀하의 예에서는 a와 b 만 비교됩니다.
b가 1과 같지 않음을 확인한 후 종료됩니다.
왼쪽에 하나 이상의 매개 변수를 사용하여 평가를 중지하는 또 다른 이유입니다.
if (response.authResponse && (response.authResponse.accessToken! = user.accessToken)) {...}
두 번째 평가는 첫 번째가 참인 것에 의존하며, 첫 번째 조건이 실패했기 때문에 response.authResponse가 null이거나 정의되지 않은 경우 등으로 컴파일 오류가 발생하지 않습니다.
다른 언어는 초기에이 문제가 있었으며 지금은 컴파일러를 빌드하는 표준 접근 방식이라고 생각합니다.
이 질문에 대해 혼란스러워하는 사람은 다음 ||
과 같이 ?
연산자 와 함께 사용할 때 단락 동작을 보지 못하기 때문입니다 .
x = 1 || true ? 2 : 3 // value of x will be 2, rather than 1 as expected
단락 규칙이 작동하지 않는 것 같습니다. ||
첫 번째가 참일 때 왜 (참? 2 : 3) 의 두 번째 항을 평가 하는가? 위의 내용은 다음과 같기 때문에 작업 순서 문제로 판명되었습니다.
x = (1 || true) ? 2 : 3
와 ||
제 평가는 상기 ?
제 평가 하였다. 원하는 것은 다음과 같습니다.
x = 1 || (true ? 2 : 3)
'programing' 카테고리의 다른 글
AngularJS를 사용할 때 페이지에 표시하기 위해 중괄호를 어떻게 이스케이프합니까? (0) | 2020.09.05 |
---|---|
Ruby는 Tail Call 최적화를 수행합니까? (0) | 2020.09.05 |
sqlalchemy 모델의 정의 된 열을 반복하는 방법? (0) | 2020.09.05 |
tomcat-CATALINA_BASE 및 CATALINA_HOME 변수 (0) | 2020.09.05 |
Java 애플리케이션을 다시 시작하려면 어떻게해야합니까? (0) | 2020.09.05 |