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?
3 Réponses :
changer la vérification de (x || null)
à x! == null? x: nul
car 0
est faux mais n'est pas égal à null
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?
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);
// 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
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 imprimeznull
donc il imprimenull
.@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
vautnull
six === 0
.Vous pouvez également vérifier
x
en utilisantif (x === undefined) {/ * gérer l'erreur * /}
@ aashah7
undefined
ne peut pas y être passé (si le compilateur est en modestrict
)@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.