web-dev-qa-db-fra.com

Manière ES2015 / 2016 de 'typeof nomVar ===' undefined`?

Je me vautre dans ES2015 + luxe avec quelques projets en ce moment et je me demande si je peux me débarrasser de la béquille tant détestée pour vérifier undefined au nouveau pays des merveilles.

Existe-t-il déjà un chemin plus court mais toujours exact vers typeof varName === 'undefined' Dans ES2015 +?

Bien sûr, je pourrais utiliser paramètres par défaut mais cela ressemble aussi à une tâche inutile.

function coolFn(a = null){
   if (a===null) console.log("no a supplied");
}
50
Hedge

Il suffit de vérifier pour varName === undefined.

Dans les anciens navigateurs, il était possible d'attribuer une valeur alternative à la variable globale undefined, ce qui entraînait l'échec du test, mais cela est désormais impossible dans ES2015 +.

Notez qu’il n’ya aucun moyen de distinguer explicitement le passage de undefined en tant que paramètre de laisser le paramètre en dehors de l’enregistrement autrement que par regarder arguments.length.

71
Alnitak

Le seul cas où typeof varName === 'undefined' est utile lorsque vous ne savez pas si la variable varName a été déclarée.

Et IMO si vous ne savez pas si vos variables sont déclarées, votre code a de sérieux problèmes.

Dans d'autres cas, vous avez de meilleures options:

  • varName === void 0

    Cela détectera si varName n'est pas défini.

    void est un opérateur qui reçoit un argument (vous pouvez utiliser n'importe quoi à la place de 0), et retourne non défini.

  • varName === undefined

    Ceci devrait détecter si varName est indéfini.

    Cependant, sachez que le global undefined aurait pu être écrasé (avant ES5) ou suivi d'une autre valeur. Par conséquent, je préfère void, qui est également plus court.

  • varName == null

    Ceci détectera si varName est indéfini ou nul.

  • !varName

    Ceci détectera si varName est faux (indéfini, null, 0, chaîne vide, NaN, false).

22
Oriol