2013-06-10 5 views
1

(& &) 또는 (||)를 사용하는 방법에 궁금합니다.및/또는 함께 자바 스크립트

은 둘 다 A와 B 중 1에 해당하는지 확인하려면 또는 C와 D가 모두 1

동일한 경우 나는 이것을 시도했다 :

if (a == 1 && b == 1 || c == 1 && d == 1) 
    { 
     //Do something 
    } 

을하지만 그것은 작동하지 않습니다.

아는 사람 있습니까?

+1

if ((a == 1 && b == 1) || (c == 1 && d == 1)) {} –

+0

(a와 b는 1과 같음) 또는 (c와 d = 1)을 의미합니까? OR : (a = 1 및 (b 또는 c = 1) 및 d = 1)? 그것은 분명하지 않다! –

+2

이것은 대부분의 언어 btw의 경우 자바 스크립트 – sgroves

답변

7

&&precedes||. ==은 둘 다 앞에 나옵니다.

최소한의 예부터 나는 원하는 효과를 내지 못한 이유가 무엇인지 알 수 없습니다. 어떤 종류의 가치 유형이 있습니까? 자바 스크립트는 다소 명확하지 않은 type coercion을 가질 수 있습니다. 어쩌면 ===과 비교해 보거나 명시 적으로 숫자로 변환하십시오.

사이드 노트 : 논리 연산자를 혼합 할 때 가독성을 위해 C 언어와 같은 많은 보풀 도구를 괄호 안에 넣는 것이 좋습니다.

2

Operator Precedence은 괄호 안에 표현식을 넣으면 무시할 수 있습니다.

if ((+a == 1 && +b == 1) || (+c == 1 && +d == 1)) // Use brackets to group them 
{ 
    // your code 
} 

이렇게하면 if(0&&0 || 1&&1) 같은 경우를 방지 할 수 있습니다.

+1

&&는 이미 ||보다 우선 순위가 높기 때문에 추가 한 괄호는 중복됩니다. JS는 이미 그룹화 한 방식으로 표현식을 평가합니다. – nnnnnn

+0

'0 && 0 || 1 && 1'이면? – NINCOMPOOP

+1

'0 && 0 || 1 && 1'은'1 '로 평가되며, 이는 제 요점을 증명합니다. 그러나 거짓과 거짓 거짓 true && true'가 더 좋은 예입니다 (true를 반환합니다). 괄호를 추가한다고해서 어떤 차이가 발생하지는 않습니다. – nnnnnn

1

장소 몇 가지 추가 브래킷을 차별화 할 수있는 및 n 또는 조건

if ((a == 1 && b == 1) || (c == 1 && d == 1)) 
+1

'&&'는 이미'||'보다 더 높은 우선 순위를 가지고 있기 때문에 괄호를 추가 할 필요가 없습니다. – nnnnnn

2

글쎄, 이제는 다름 아닌 다른 사람들에게 (David을 제외하고) 그들의 대답이 틀린 이유를 말하면서 나에게 그들에게 똑같은 기회를 주었다.

표시된 기존 코드는 이미 을 나타내야합니다.으로 표시됩니다. 그러나 그것은 가능하다 당신이 말할 때 :

"나는 A와 B 중 하나를 모두 1에 해당하는 경우 또는 C와 D가 모두 1에 해당하는지 확인하려면"

... 단어의 사용은 "중"일 다음 조건 중 하나에 해당하는 경우 검사 할 것을 의미 :

  • A와 B 모두 1이다 , C 및 D하지만 '없는 C 및 D가 모두 1 둘 1
  • 있지만, a와 b는 모두 1

없는 경우 변수의 한 쌍의 1로 할하지만 돈 모두를 원하지 않는다. 4 개의 변수가 동시에 1이 될 수 있습니까?논리적 OR || 연산자와는 달리, 당신은 AND && 부분을 괄호를 추가해야한다는

if ((a == 1 && b == 1)^(c == 1 && d == 1)) { 

참고 :

그렇다면, 즉 JS에서 ^ operator가 독점 OR 작업입니다 ^이 더 높은 우선 순위를 가지므로 표현식의 (^은 실제로는 비트 연산자이지만 사용하는 피연산자가 모두 부울이기 때문에 여기서는 효과가 있습니다.)

+2

부울 값의 경우 모든 것을 숫자로 변환하는 비트 단위의 것 대신에'! =='XOR 연산자를 사용할 수 있습니다 ... – Bergi

+0

@Bergi - "! == XOR 연산자"의 의미를 모르겠습니다. XOR을 AND와 OR의 조합으로 다시 작성할 수 있지만 피연산자를 반복해야하므로 결과가 길어집니다 (위의 점과 동일). 그리고이 경우에는 피연산자가 부울 (boolean)이기 때문에 bitwise XOR이 잘 작동합니다. 따라서 숫자로 변환하면 OK입니다. 전체 표현식의 결과는'0' 또는'1'이 될 것이고,'if() '당신이 단지 거짓이나 진실을 필요로하는 곳에 시험하십시오. – nnnnnn

+1

진리표를 확인하십시오. "같지 않음"*은 "배타적 인"또는 "배타적 인 것"- 그렇다면 왜 XOR을위한 연산자가 비트 단위로 사용 되는가? – Bergi

관련 문제