[javascript] (0 <5 <3)이 왜 true를 반환합니까?

나는 jsfiddle.net에서 놀고 있었고 이것이 왜 사실인지 궁금합니다.

if(0 < 5 < 3) {
    alert("True");
}

이것도 마찬가지입니다 :

if(0 < 5 < 2) {
    alert("True");
}

그러나 이것은하지 않습니다 :

if(0 < 5 < 1) {
    alert("True");
}

이 특징은 유용합니까?



답변

오퍼레이션 순서는 (0 < 5 < 3)Javascript에서 ((0 < 5) < 3)생성되는 것으로 해석되며 (true < 3)true는 1로 계산되어 true를 리턴합니다.

이것은 또한 이유 (0 < 5 < 1)를 반환 거짓 (0 < 5)으로 해석됩니다 true를 반환 1결과 (1 < 1).


답변

내 생각 때문이다 0 < 5사실, 그리고 true < 3캐스팅을 얻을 수 1 < 3있는 사실이다.


답변

아마도 그렇게 true추정되기 1때문에

0 < 5 < 3  -->  true < 3 -->  1 < 3  --> true


답변

때문에 true < 3, 때문에true == 1


답변

이 기발한 것이 유용한 지 여부에 대한 귀하의 질문에 관해서는 : 유용한 코드가 유용 할 수있는 경우가 있다고 생각하지만 (응축 된 코드가 당신이 따르는 것이라면) 코드에 의존하면 코드의 이해도가 심각하게 줄어들 것입니다.

더 큰 표현식의 일부로 사후 / 사전 증가 / 감소를 사용하는 것과 비슷합니다. 이 코드의 결과를 한눈에 파악할 수 있습니까?

int x = 5;
int result = ++x + x++ + --x;

참고 :이 코드를 사용하면 언어 및 컴파일러에 따라 때로는 다른 결과를 얻을 수도 있습니다.

자신과 코드를 읽을 다음 사람위해 인생을 편하게 만드는 것이 좋습니다 . 부울의 암시 적 변환과 같은 부작용에 의존하기보다는 실제로 원하는 것을 명확하게 작성하십시오.


답변

질문의 두 번째 부분에 대한 대답은 “이 기발한 것이 유용합니까?” 이전 답변에서 언급했듯이 true가 실제로 1로 캐스팅되었지만 프로그래머가 일반적으로 1과 true (및 0과 false)가 아닌 언어 (자바 스크립트)의 기발한 경우 같은 것.

그러나 1이 참이고 0이 거짓 인 정신 모델을 가지고 있다면, 그것은 매우 유용하고 강력하며 직접적인 모든 종류의 멋진 부울 기술로 이어집니다. 예를 들어, A> 100의 결과로 카운터를 직접 증가시킬 수 있습니다. A가 100보다 크면 카운터가 증가합니다.이 기술은 Java에서는 엉뚱한 속임수 또는 배열 또는 기능적 언어로 볼 수 있습니다. 관용적 일 수 있습니다.

배열 언어 APL의 전형적인 예는 배열에서 100보다 큰 항목 수를 계산하는 것입니다.

+/A>100

여기서 A가 5 개의 항목 배열 인 경우 107 22256110 3

A>100

5 개의 항목 부울 배열을 생성합니다.

10010

이 부울 결과를 합하면 :

+/1 0 1 1 0

최종 답변을 산출합니다.

이 질문 은 특히이 기술이 매우 유용한 위치에 대한 완벽한 예입니다. 특히 m 개의 부울 값 중 n 개가 참인지 여부를 판별하기 위해 문제가 일반화 된 경우.

부울 3 개 중 2 개 이상이 true인지 확인


답변

쉽습니다.

(0 < 5 < 3)

왼쪽에서 오른쪽으로 시작하여 처음 0 <5를 평가합니다. 맞습니까? 예. TRUE = 1이므로 1 <3으로 평가됩니다. 1이 3보다 작으므로 사실입니다.

이제 이것으로

 (0 < 5 < 1)

0이 5보다 작습니까? 예. 따라서 1을 의미하는 TRUE로 설정하십시오. 이제이 사실을 염두에두고 (1 <1)로 평가합니다. 1이 1보다 작습니까? 아니요, 따라서 거짓입니다. 같아야합니다.