2013-11-23 4 views
2

빌 도마뱀은 this answer에서 평등 연산자 (==)를 사용할 때의 위험과 단점을 설명했습니다. 그러나 비밀리에 "악의 쌍둥이"인 >=<=에 대해서는 거의 언급되지 않았습니다.위험도는 <= and > = 자바 스크립트입니다. 어떻게 피하는가?

0 >= ''  // true 
0 <= ''  // true 
'' >= 0  // true  
'' <= 0  // true 

따라서, 내 질문은 : 다른 유형의

  1. 한다 요소는 기본적으로 비교할 수?
    1.1 그렇지 않은 경우 반환 값은 무엇입니까? false? undefined? a >= b === false 인 경우 a < b === true을 의미합니다.
  2. 실제적인 방법으로 을 피하기 위해 수행 할 수있는 작업은 다음과 같습니다.
  3. 보다 큰 연산자 (<)와 (>) 연산자도 유형 변환을 수행하므로 이상한 사례가 있습니까?
+1

그냥 자바 스크립트의 위험이 있습니다. [WAT] (https://www.destroyallsoftware.com/talks/wat) –

+2

[This (http://stackoverflow.com/questions/13091058/best-and-or-shortest-way-to-do-strict -non-type-converting-compari)가 중요 할 수 있습니다. –

+0

좋은 질문입니다. 관습에 따라, 0 <= '은 일종의 0 ==' '일종의하는 동안, 이해가되지 않는 경우와 같은 경우에는 형식 변환을 수행합니다. 또한 FWIW도 방탄이 아닙니다. +0 === -0, http://ecma262-5.com/ELS5_HTML.htm#Section_11.9.6 – bishop

답변

3

기본적으로 다른 유형의 요소를 비교할 수 있습니까?

언어를 디자인하는 경우에만 중요합니다. 자바 스크립트에서 다른 유형의 값은 비교 가능하며 비교는 특정 규칙을 따릅니다. 당신은 그들에 대해 알고 있어야하지만, "규칙이 다르다면 어떻게 될 것인가?"

예제에서 과 같은 이상한 경우를 피하기 위해 수행 할 수있는 작업은 무엇입니까?

다른 유형의 값은 비교하지 말고 대부분의 경우 의미가 없습니다. 유용 할 수있는 유일한 상황은 숫자 문자열을 숫자와 비교하는 것입니다. 이 경우 자바 스크립트는 아무도 예상하지 못했던 이상한 결과를냅니다.

이후 (<)보다 크고 (>) 사업자 또한, 그들을 위해 어떤 이상한 경우 유형 변환을가보다 적은?

나는 지금 당장 생각할 수는 없지만 확실합니다. 그러나 당신의 견해가 왜 이상하다고 생각합니까? 유형 변환 때문에 "" == 0을 이해하는 것처럼 보이므로 예제의 모든 비교가 모두 0을 포함하므로 true을 반환하는 것은 당연합니다.

관련 문제