web-dev-qa-db-fra.com

Que signifie un point d'exclamation avant une variable en JavaScript?

J'essaie d'apprendre JavaScript en parcourant du code dans une application et je vois toujours !variable dans des conditions if. Par exemple: 

if (!variable.onsubmit || (variable.onsubmit() != false)) {

Qu'Est-ce que c'est? Une sorte de test si la variable est vide?

17
Winters

! est le logique pas opérateur en JavaScript.

Officiellement

!expression se lit comme suit:

  • Prenez expression et évaluez-le. Dans votre cas, c'est variable.onsubmit
  • Cas le résultat de cette évaluation et le convertir en un booléen. Dans votre cas, puisque onsubmit est probablement une fonction, cela signifie - si la fonction est nulle ou indéfinie - renvoie false, sinon renvoie true. 
  • Si cette évaluation est vraie, retourne false. Sinon, retourne vrai.

Dans ton cas

Dans votre cas, !variable.onsubmit signifie retourne vrai s'il n'y a pas de fonction définie (et donc faux), sinon retourne faux (puisqu'il y a une fonction définie).

En termes simples, !variable signifie que vous devez prendre la valeur de vérité variable et l’annuler.

Ainsi, if (!variable) { entrera la clause if si variable est false (ou coercce to false)

Au total

if (!variable.onsubmit || (variable.onsubmit() != false)) {

Moyens - vérifie si variable.onsubmit est défini et vérité (donc vrai), puis vérifie si l'appel de onsubmit renvoie un résultat coercitif à vrai Dans une ligne courte, il vérifie s'il n'y a pas de onsubmit ou s'il renvoie true.

La prochaine fois, comment puis-je le trouver moi-même?

42
Benjamin Gruenbaum

C'est un opérateur de négation utilisé pour les tests de vérité sur une variable.

var myVariable = 1;

if ( ! myVariable )
{
    // myVariable evaluates as false
}

if ( myVariable )
{
    // myVariable evaluates as true
}
3
David Barker

La réponse sélectionnée répond déjà à la question. Une chose à ajouter est que l'opérateur ! peut être utilisé d'une manière plutôt intéressante.

obj = {}
if (!!obj) {console.log('works')} // !!obj = true
obj = undefined
if (!!obj) {console.log('does not work')} // !!obj = false

Donc, le double !! changera n'importe quelle expression en une valeur boolean sans exception. 

Cela a un cas d'utilisation très particulier dans certains cas. 

  • Disons qu'il existe une fonction qui renvoie soit true soit false et rien d'autre. Dans ce cas, on pourrait simplement changer return returnValue en return !!returnValue pour plus de prudence (bien que cela ne soit pas nécessaire dans la plupart des cas)

  • Inversement, si une fonction n'accepte que vrai ou faux et rien d'autre, vous pouvez simplement appeler la fonction functionA(!!parameter) au lieu de functionA(parameter), ce qui n'est pas nécessaire dans la plupart des cas, mais peut assurer une sécurité supplémentaire 

0
Prasanna