developer tip

자바 스크립트의 x> = x 패턴

copycodes 2020. 10. 30. 08:15
반응형

자바 스크립트의 x> = x 패턴


D3.js의 소스를 읽을 때 x >= x패턴을 보았습니다 . 숫자 중 NaN을 감지하기위한 것이라면 그냥 isNaN(x)또는 x == x?

내가 그것을 만난 출처 :

d3.min = function(array, f) {
  var i = -1, n = array.length, a, b;
  if (arguments.length === 1) {
    while (++i < n) if ((b = array[i]) != null && b >= b) {
      a = b;
      break;
    }
    while (++i < n) if ((b = array[i]) != null && a > b) a = b;
  } else {
    while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {
      a = b;
      break;
    }
    while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b;
  }
  return a;
};

내 조사에서 d3.min숫자뿐만 아니라 모든 종류의 주문 가능한 값에 대해 작업해야합니다. isNaN숫자 만 작동합니다.

d3는 실제로 ==어떤 시점에서 사용 하고있었습니다. 이 커밋x == x테스트를 도입했습니다 .

달리 Math.min하고 Math.max, 그것은 마이너스 또는 양의 무한대를 반환하는 의미하지 않습니다 d3.mind3.max; D3 함수는 숫자 값이 아닌 임의의 순서에 따라 최소값을 반환합니다. 대신 빈 배열 또는 퇴화 값만 포함하는 배열의 최소값 또는 최대 값은 항상 정의되지 않아야합니다.

이 커밋은 다음으로 변경 x == x되었습니다 x <= x(나중에 다시으로 변경됨 x >= x).

NaN자신과 같지 않은 외에도 NaN을 반환하는 정의 된 valueOf 함수로 인해 정렬 할 수없는 객체를 가질 수 있습니다. 예를 들면 :

var o = new Number(NaN);

여기는 o == o사실이지만 o <= o거짓입니다. 따라서 d3.min, d3.max 및 d3.extent는 이러한 정렬 불가능한 값을 의도 한대로 무시하는 대신 관찰 할 수있었습니다. 수정 프로그램을 확인하는 것 !(o <= o)보다는 o == o.


OK, 나는 볼 x >= x수 있습니다 false모두 NaNundefined. ( isNaN(x)또는 x == x.)

편집 :의 사용 사례 중 하나이지만 x >= x이 경우 (이를 지적하기 위해 @Felix Kling) undefined이미 확인 중입니다.

참고 URL : https://stackoverflow.com/questions/30967296/xx-pattern-in-javascript

반응형