Ответ 1
Из моих исследований d3.min
должен работать над любыми упорядочиваемыми значениями, а не только с числами. isNaN
будут работать только числа.
d3 фактически использовал ==
в некоторой точке. Этот коммит представил тест x == x
:
В отличие от
Math.min
иMath.max
, нет смысла возвращать отрицательную или положительную бесконечность дляd3.min
иd3.max
; функции D3 возвращают минимальное значение в соответствии с произвольным порядком, а не числовым значением. Вместо этого минимум или максимум пустого массива или массив, содержащий только вырожденные значения, всегда должны быть undefined.
Этот commit изменил x == x
на x <= x
(который позже был снова изменен на x >= x
):
В дополнение к
NaN
, который не равен самому себе, вы можете иметь объекты, которые не упорядочиваются из-за определенных функций valueOf, которые возвращают NaN. Например:var o = new Number(NaN);
Здесь
o == o
истинно, ноo <= o
является ложным. Следовательно, d3.min, d3.max и d3.extent могли наблюдать эти неустановимые значения, а не игнорировать их по назначению. Исправление состоит в том, чтобы проверить!(o <= o)
, а неo == o
.