development

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

big-blog 2020. 3. 2. 13:09
반응형

(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보다 작습니까? 예. TRUE로 1도 의미합니다. 이제이 사실을 염두에두고 (1 <1)로 평가합니다. 1이 1보다 작습니까? 아니요, 따라서 거짓입니다. 같아야합니다.


1 <3 일 때 1을 반환하는 0 <5를 평가하고 있습니까?

C # "이 연산자 '<'은 (는) 'bool'및 'int'유형의 피연산자에 적용 할 수 없습니다."


나는 Obj-C에서 조금 전에 이것에 부딪 쳤고 그것에 매우 당황했습니다. 나는 이런 식으로 원하는 결과를 얻었습니다.

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

물론 어느 것이 거짓이므로 "참"경고가 표시되지 않습니다. 나는 이것을 읽게되어 기쁘다. 나는 이제 이유를 안다.


Python 외에도 CoffeeScript는 체인 비교를 지원하는 또 다른 언어이므로 바닐라 JS 3 < x < 10로 변환됩니다 (3 < x && x < 10).


0 < 5 < 3 
==> ( ( 0 < 5 ) < 3 )
==> true < 3
==> 1 < 3
==> true

수학 연산자를 통해 조작하면 부울 피연산자가 숫자를 반환합니다. 이것을 확인하기 위해 우리는

true + 1  which gives you 2.

따라서 0 < 5math 연산자 (<)로 작동하는 반환 된 부울 (true)은 숫자를 반환합니다. 그래서 그것은 1 <3으로 끓입니다.true


0이 5보다 작 으면 true를 반환하고 기본적으로 true는 3을 포함하여 1을 평가할 수 있습니다.


Number ()로 결과를 표현해보십시오

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

또는 이것을 시도하십시오 :

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

나는 그것을 얻었 기 때문에 이것을 봤고 문자열 형식으로 인쇄 하는 함수 에서이 값을 얻었 기 때문에 (3 >= 20) //returning truejavascript가 3부울 로 확인하려고 한 것 같습니다 .elm.getAttribute();console.log();

참고 URL : https://stackoverflow.com/questions/4089284/why-does-0-5-3-return-true



반응형