-2
votes

Pourquoi cette méthode est-elle renvoyée indéfinie et non booléenne?

J'ai la méthode suivante

p>

const isPrivate = (input) => {
  return input && input.type && input.type === "private";
}

console.log(isPrivate());


5 commentaires

L'entrée n'est pas définie si vous ne le transmettez pas sous forme de paramètre .


Impossible de reproduire, il enregistre non défini comme prévu lorsque je l'exécute localement.


@Lewis ne devrait pas l'évaluer la première condition à Faux et retourne faux? Pourquoi si (entrée) évalue à FALSE


&& Dans JavaScript retourne des opérandes, pas des booléens, à moins que l'opérande renvoyé soit un booléen.


Dupliqué possible de Pourquoi les opérateurs logiques (&& et ||) renvoient toujours un résultat booléen?


3 Réponses :


-1
votes

Il y a un problème avec votre variable entrée . L'erreur indique simplement que entrée est indéfini, ce qui signifie que vous ne l'avez jamais donné une valeur. JavaScript n'essaiera pas de résoudre une valeur non définie comme false, mais plutôt jeter l'erreur.

Si vous souhaitez tester d'abord non défini, changez-le à xxx

de cette façon, il va vérifier si c'est NULL d'abord, et s'il est valide, évaluera comme vrai et passer au calcul suivant.


2 commentaires

Il ne lui demande pas d'être vrai , mais vérité-y - les chaînes non vides sont la vérité-y.


@Adiga êtes-vous sûr? Je viens de tester var intrant; INPUT! = NULL && INPUT && INPUT.TYPE && INPUT.TYPE === "PRIVATE"; Dans la console de ma navigateur et il est renvoyé false correctement.



1
votes

Les opérateurs logiques ne soient ni les booléens.

!! Entrée code> Assurez-vous que la saisie est une valeur de vérité et retourne un booléen. INPUT.TYPE === "Privé" code> retournera également un booléen. Étant donné que les deux côtés de l'opérateur évaluent aux booléens, vous obtiendrez la valeur que vous attendez. P>

p>

const isPrivate = (input) => {
  return !!input && input.type === "private";
}

console.log(isPrivate());
console.log(isPrivate({}));
console.log(isPrivate(''));
console.log(isPrivate({ type: 'public' }));
console.log(isPrivate({ type: 'private' }));


0 commentaires

0
votes

La distribution forcée de l'évaluation de l'existence d'intrants à Boolean n'est pas garantie. Test d'existence explicitement. Cela précise également l'intention de l'évaluation. De plus, exploiter l'interprète pour vérifier les erreurs d'intention en inversant l'ordre des opérandes de comparaison pour l'opérateur ===. Comparaison d'entrée.Type à "Private" littéral, l'interprète ne laissera pas l'erreur ["privée" = entrée.type], mais irait bien avec [INPUT.TYPE = "Private"]. Enfin, il est très peu coûteux d'utiliser des parenthèses pour améliorer sa séance de la délimitation des phrases.

const isprivate = (entrée) => { retour ("non défini"! == type d'entrée) && ("non défini"! == type d'entrée.type) && ("privé" === INPUT.TYPE); };


0 commentaires