자바 스크립트의 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.min
및d3.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
모두 NaN
와 undefined
. ( isNaN(x)
또는 x == x
.)
편집 :의 사용 사례 중 하나이지만 x >= x
이 경우 (이를 지적하기 위해 @Felix Kling) undefined
이미 확인 중입니다.
참고 URL : https://stackoverflow.com/questions/30967296/xx-pattern-in-javascript
'developer tip' 카테고리의 다른 글
양식 입력을 사용하여 카메라에 액세스하고 웹 앱을 사용하여 즉시 사진 업로드 (0) | 2020.10.30 |
---|---|
angular.isdefined의 이점은 무엇입니까? (0) | 2020.10.30 |
명시 적 스타일없이 CSS 클래스 만있는 jQuery.animate () (0) | 2020.10.30 |
SSLCACertificateFile과 SSLCertificateChainFile의 차이점 (0) | 2020.10.30 |
TF30063 : 컬렉션에 액세스 할 권한이 없습니다. (0) | 2020.10.30 |