When reading source of D3.js I saw x >= x
pattern. If it is for detecting NaNs among numbers, why not just isNaN(x)
or x == x
?
Source, where I encountered it:
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;
};
From my investigations,
d3.min
is supposed to work on any kind of orderable values, not only numbers.isNaN
would only work numbers.d3 was actually using
==
at some point. This commit introduced thex == x
test:This commit changed
x == x
tox <= x
(which was later again changed tox >= x
):