Personne n'a mentionné ici le potentiel pour NaN
, qui - pour moi - est également une valeur nulle. J'ai donc pensé ajouter mes deux cents.
Pour le code donné:
var a,
b = null,
c = parseInt('Not a number'),
d = 0,
e = '',
f = 1
;
Si vous deviez utiliser l' ||
opérateur, vous obtenez la première valeur non fausse:
var result = a || b || c || d || e || f; // result === 1
Si vous utilisez la méthode de fusion standard, telle que publiée ici , vous obtiendrez c
, qui a la valeur:NaN
var result = coalesce(a,b,c,d,e,f); // result.toString() === 'NaN'
Aucun de ces éléments ne me semble juste. Dans mon propre petit monde de logique de fusion, qui peut différer de votre monde, je considère undefined, null et NaN comme étant tous "null-ish". Donc, je m'attendrais à revenir d
(zéro) de la méthode de fusion.
Si le cerveau de quelqu'un fonctionne comme le mien et que vous souhaitez l'exclure NaN
, cette méthode accomplira cela:
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;
}
Pour ceux qui veulent un code aussi court que possible, et qui ne se soucient pas d'un petit manque de clarté, vous pouvez également l'utiliser comme suggéré par @impinball. Cela profite du fait que NaN n'est jamais égal à NaN. Vous pouvez en savoir plus ici: Pourquoi NaN n'est-il pas égal à 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;
}
x ?? y
syntaxe est maintenant dans l'état de proposition de l'étape 1 - coalescence