1
votes

Comment passer 0 aux paramètres facultatifs de TypeScript?

La fonction suivante imprime "null"

function foo(x?: number): void {
  alert(x || null);
}

foo(0);

Je sais que 0 == null est faux, alors ne devrait-il pas afficher 0?


12 commentaires

Il ne devrait pas 0 être faux developer.mozilla. org / en-US / docs / Glossary / Falsy + developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...


Est-il possible d'accepter une valeur de 0? J'utilise ceci pour des valeurs qui peuvent également être 0 et mon code fonctionne pour tous les cas, sauf lorsque l'argument est 0.


x est égal à 0 dans votre code.


@zerkms ouais, et pourtant il affiche "null".


alerte (x) ? Vous imprimez null donc il imprime null .


@ug_ vous vouliez probablement typeof x , isNaN fait quelque chose de différent.


@zerkms alert (0) affiche 0


@AnthonyYershov c'est correct. Et x || null vaut null si x === 0 .


Vous pouvez également vérifier x en utilisant if (x === undefined) {/ * gérer l'erreur * /}


@ aashah7 undefined ne peut pas y être passé (si le compilateur est en mode strict )


@zerkms D'accord, c'est un problème résolu, mais le remplacement de alert (x || null) par alert (x) dans la fonction imprime également null.


@AnthonyYershov ce n'est pas le cas - je vous ai fourni un lien ci-dessous avec une preuve.


3 Réponses :


1
votes

changer la vérification de (x || null) à x! == null? x: nul

car 0 est faux mais n'est pas égal à null


7 commentaires

En fonction de ce que vous recherchez, vous voudrez peut-être également l'étendre avec &&! IsNaN (x) . Vous pouvez le faire parallèlement à la vérification de null pour exclure également NaN.


@ y2bd isNaN n'est pas vraiment ce que vous vouliez. Il recherche une valeur spéciale Number.NaN .


il imprime toujours null :(


@zerkms appliquant le changement suggéré.


J'ai demandé à afficher votre code actuel actuel car la modification suggérée fonctionne parfaitement typescriptlang.org/play/...


@zerkms le voici: function foo (x ?: number): void {alert (x == null? x: null); } toto (0);


@AnthonyYershov il renvoie null comme prévu. Avez-vous lu votre code?



0
votes

Si vous essayez de vous assurer que la valeur par défaut de x doit être null , si rien n’est passé, vous pouvez le faire

function foo(x: number | null = null): void {
  alert(x);
}

foo(0);


0 commentaires

2
votes

// Opération ET logique

x || null //Result=>null

// Opération OU logique

alert( 1 || 0 ); // 1 (1 is truthy)
alert( true || 'no matter what' ); // (true is truthy)

alert( null || 1 ); // 1 (1 is the first truthy value)
alert( null || 0 || 1 ); // 1 (the first truthy value)
alert( undefined || null || 0 ); // 0 (all falsy, returns the last value)

votre code d'alerte basé sur les règles ci-dessous: p >

false || any_data;  // Result=> any_data
false || any_data; // Result=> any_data

ou,

false || true;  // Result=>true
false || false; // Result=>false

Pour plus de précisions:

true  || true;  // Result=>true
true  || false; // Result=>true
false || true;  // Result=>true
false || false; // Result=>false

Alors quand x = 0, cela signifie que x est faux dans un contexte booléen,

true  && true;  // Result=>true
true  && false; // Result=>false
false && true;  // Result=>false
false && false; // Result=>false

Nous pouvons donc conclure que alert affichera null


0 commentaires