Quel est le but d'appeler
if (typeof window !== 'undefined')
Je l'ai vu dans JSPM plugin-css , et dans quelques autres bibliothèques.
C'est une vérification idiomatique pour voir si le script est exécuté dans une page Web à l'intérieur d'un navigateur Web ou non.
On pourrait supposer que JavaScript ne s'exécute que dans les pages Web car c'est pour cela qu'il a été conçu à l'origine, mais ce n'est pas vrai: JavaScript est un langage polyvalent qui peut également être utilisé pour écrire du code côté serveur dans Node.js ou IIS ' Pages Active Server (depuis 1996!), Ou à l'intérieur "web workers" , qui sont des scripts pour les pages Web qui s'exécutent en arrière-plan.
Dans une page Web, il existe plusieurs objets intrinsèques, tels que window
, d'autres environnements (comme Node.js) n'auront pas window
mais pourraient avoir d'autres objets comme console
( eh bien, console
existe maintenant dans la plupart des navigateurs, mais ce n'était pas le cas à l'origine).
Par exemple, dans différents contextes, différents objets sont disponibles dans la portée globale du script (cette liste n'est pas exhaustive):
Math
et Date
Object
, Number
, Function
, String
, etc. (objets représentant des types intégrés), etc.<script>
Mots clés):Window
(interface) est exposé comme l'objet global window
, qui est également l'objet qui est le global portée (déclarant ainsi var foo
dans la portée globale crée en fait une propriété window.foo
!)document
accède en fait au window.document
propriété.window
ni de propriétés comme document
ou navigator
, mais vous obtenez d'autres objets globaux comme :console
process
exports
window
, donc la portée globale est un objet WindowOrWorkerGlobalScope
qui expose des objets via des propriétés comme:caches
indexedDB
Origin
response
(pour écrire dans le flux de réponse)request
(pour la lecture de la requête HTTP entrante)Application
et Session
(pour la persistance des données entre les requêtes)WScript
expose les fonctionnalités du script Host.Cela peut être utilisé pour détecter si le code s'exécute dans un environnement de navigateur typique (par exemple, un environnement avec un DOM de navigateur) ou dans un autre environnement JS puisque l'objet window
existe dans un JS de navigateur typique, mais n'existe pas dans quelque chose comme node.js ou même un webWorker dans un navigateur.
Si l'objet window
n'existe pas, alors
typeof window === 'undefined'
donc le code que vous avez demandé:
if (typeof window !== 'undefined')
exécutera le bloc if
si l'objet window
existe en tant que variable de niveau supérieur.
Dans le code spécifique que vous avez lié, c'est pour éviter d'exécuter du code ciblé par navigateur qui référence des objets DOM comme document
si le plugin est utilisé dans un environnement sans navigateur.