Niemand hat hier erwähnt, dass das Potenzial für NaN
was für mich ebenfalls ein Nullwert ist. Also dachte ich, ich würde meine Meinung dazu sagen.
Für den angegebenen Code:
var a,
b = null,
c = parseInt('Not a number'),
d = 0,
e = '',
f = 1
;
Wenn Sie die ||
Operator, erhält man den ersten nicht-falschen Wert:
var result = a || b || c || d || e || f; // result === 1
Wenn Sie das neue ??
(Null-Koaleszenz-Operator), erhalten Sie c
, die den Wert hat: NaN
vas result = a ?? b ?? c ?? d ?? e ?? f; // result === NaN
Weder erscheinen mir richtig. In meiner eigenen kleinen Welt der Coalesce-Logik, die sich von Ihrer Welt unterscheiden mag, betrachte ich undefiniert, null und NaN als "null-ish". Ich würde also erwarten, dass ich zurückkomme d
(Null) aus der Koaleszenzmethode.
Wenn das Gehirn von jemandem so funktioniert wie meines, und Sie ausschließen wollen NaN
dann wird dieser Brauch coalesce
Methode (im Gegensatz zu das hier gepostete ) wird dies erreichen:
function coalesce() {
var i, undefined, arg;
for( i=0; i < arguments.length; i++ ) {
arg = arguments[i];
if( arg !== null && arg !== undefined
&& (typeof arg !== 'number' || arg.toString() !== 'NaN') ) {
return arg;
}
}
return null;
}
Für diejenigen, die den Code so kurz wie möglich halten wollen und denen ein wenig Unklarheit nichts ausmacht, können auch diesen Code verwenden, wie von @impinball vorgeschlagen. Dies macht sich die Tatsache zunutze, dass NaN niemals gleich NaN ist. Mehr dazu können Sie hier nachlesen: Warum ist NaN nicht gleich NaN?
function coalesce() {
var i, arg;
for( i=0; i < arguments.length; i++ ) {
arg = arguments[i];
if( arg != null && arg === arg ) { //arg === arg is false for NaN
return arg;
}
}
return null;
}
39 Stimmen
Anmerkung aus dem Jahr 2018:
x ?? y
Die Syntax befindet sich jetzt im Stadium 1 des Vorschlags - Nullische Verschmelzung4 Stimmen
Es gibt jetzt eine Babel-Plugin die genau diese Syntax enthält.
11 Stimmen
Anmerkung aus dem Jahr 2019: Jetzt ist der Status Stufe 3!
2 Stimmen
Anmerkung von später im Jahr 2019: Nullish Coalescing ist in TypeScript 3.7 verfügbar!
5 Stimmen
Hinweis ab Januar 2020: Der Nullish Coalescing Operator ist nativ in Firefox 72 verfügbar, der optionale Chaining Operator jedoch noch nicht.
6 Stimmen
Der nullische Koaleszenzoperator (
x ?? y
) und optionaler Verkettungsoperator (user.address?.street
) sind nun beide Stufe 4. Hier finden Sie eine gute Beschreibung, was das bedeutet: 2ality.com/2015/11/tc39-process.html#stage-4%3A-finished .