Maison >interface Web >Questions et réponses frontales >Quels sont les moyens d'obtenir des objets de premier niveau dans es6

Quels sont les moyens d'obtenir des objets de premier niveau dans es6

WBOY
WBOYoriginal
2022-08-18 16:24:111490parcourir

ES6 Comment obtenir l'objet de niveau supérieur : 1. Utilisez la méthode "typeof window !== 'undefined' ? window : (...) ? global : this" pour l'obtenir 2. Utilisez "var getGlobal = function () {.. .throw new Error('impossible de localiser l'objet global');};" méthode à obtenir.

Quels sont les moyens d'obtenir des objets de premier niveau dans es6

L'environnement d'exploitation de ce tutoriel : système Windows 10, ECMAScript version 6.0, ordinateur Dell G3.

Quels sont les moyens d'obtenir des objets de niveau supérieur dans es6 ? Avant ES6, les propriétés des objets de niveau supérieur et des variables globales étaient équivalentes, mais dans ES6, les objets de niveau supérieur et les objets globaux ont commencé à être séparés.

Inconvénients de ne pas séparer

    L'erreur des variables non déclarées ne peut pas être signalée au stade de la compilation, et elle ne peut être connue qu'au moment de l'exécution.
  • Il est facile de créer des variables globales sans le savoir
  • L'objet de niveau supérieur peut être lu et écrit à volonté
  • L'objet fenêtre signifie fenêtre, qui fait référence à l'objet fenêtre du navigateur. Il est inapproprié que l'objet de niveau supérieur ait une signification d'entité. Les variables globales déclarées par les commandes var et function sont toujours des attributs de l'objet de niveau supérieur.
  • Les variables globales déclarées par let, const et class ne sont pas des attributs de l'objet de niveau supérieur.

Objet de niveau supérieur

  • Navigateur : objet fenêtre

  • Nœud : objet global
  • Objet de niveau supérieur non uniforme

L'objet de niveau supérieur dans le navigateur est window, mais Node et Web Worker ne s'ouvrent pas. Dans les navigateurs et les Web Workers, self pointe également vers l'objet de niveau supérieur, mais Node n'a pas self.

Dans Node, l'objet de niveau supérieur est global, mais il n'est pas pris en charge dans d'autres environnements.

Obtenir l'objet de niveau supérieur

Limitations

Dans l'environnement global, cela renvoie l'objet de niveau supérieur

Dans le module Node et le module ES6, cela renvoie ceci dans le module actuel

 ; function(1) Lorsqu'il est simplement exécuté en tant que fonction, cela revient au niveau supérieur(2) En mode strict, renvoie undefined

new Function('return this')(); renvoie toujours l'objet global. Mais si le navigateur utilise CSP, les méthodes eval et new Function peuvent ne pas être disponibles

CSP : Content Security Policy, politique de sécurité du contenu. Il fonctionne sur les ressources chargées ou exécutées par le site Web via un mécanisme de liste blanche, défini dans la page Web via des informations d'en-tête HTTP ou des méta-éléments. Mais cela a également causé les problèmes suivants : l'évaluation et les fonctions associées sont désactivées.

Le code JavaScript intégré ne sera pas exécuté.

Les scripts distants ne peuvent être chargés que via la liste blanche.

Comment obtenir l'objet de niveau supérieur

// 方法1
// 针对 浏览器中 顶层对象是window,但是Node和Web Worker没有window。
( 
	typeof window !== 'undefined' ? window : (
		typeof process === 'object' &&
		typeof require === 'function' &&
		typeof global === 'object'
	) ? global : this
);

//方法2
// 针对 浏览器和Web Worker中,self也指向顶层对象,但是Node没有self。
var getGlobal = function () {
	if (typeof self !== 'undefined') { 
		return self; 
	}
	if (typeof window !== 'undefined') {
		return window; 
	}
	if (typeof global !== 'undefined') {
		return global; 
	}
	throw new Error('unable to locate global object');
};

[Recommandations associées :

tutoriel vidéo javascript
    ,
  1. front-end web
  2. ]

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn