Beim Lesen der Quelle von D3.js sah ich x >= x
Muster. Wenn es zum Nachweis von NaNs unter Zahlen dient, warum nicht einfach isNaN(x)
oder x == x
?
Quelle, wo ich darauf gestoßen bin :
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;
};
javascript
d3.js
coding-style
nan
Piotr Migdal
quelle
quelle
Antworten:
Nach meinen Untersuchungen
d3.min
soll an jeder Art von bestellbaren Werten gearbeitet werden, nicht nur an Zahlen.isNaN
würde nur Zahlen arbeiten.d3 wurde tatsächlich
==
irgendwann verwendet. Dieses Commit führte denx == x
Test ein:Dieses Commit wurde geändert
x == x
inx <= x
(was später wieder geändert wurdex >= x
):quelle
!(o <= o)
sieht mein Gesicht so aus, wenn ich versuche, die==
Gleichstellungsregeln von Javascript zu verstehen .OK, ich sehe das
x >= x
gibtfalse
für beideNaN
undundefined
. (Im Gegensatz zuisNaN(x)
oderx == x
.)BEARBEITEN: Während dies einer der Anwendungsfälle von ist
x >= x
, wird in diesem Fall (danke @Felix Kling für den Hinweis)undefined
bereits geprüft.quelle
undefined
Fall ist jedoch!= null
ohnehin schon abgedeckt .