Le JavaScript mentionné ici fait référence à l'environnement du navigateur, y compris l'environnement hôte. Le premier est l'objet global ECMAScript et le second est l'objet/fonction global sous l'environnement hôte (Host).
1. Objets intégrés de base de JavaScript, c'est-à-dire des objets fournis par l'implémentation d'ECMAScript qui ne dépendent pas de l'environnement hôte
Ces objets existent déjà (instanciés) avant l'exécution du programme. ECMAScript est appelé The Global Object et est divisé en les types suivants
1. Propriétés de valeur de l'objet global. Il existe NaN, Infinity, indéfini.
2. Propriétés de fonction de l'objet global. Il existe eval, parseInt, parseFloat, isNaN, isFinite, decodeURI, encodedURI, encodeURIComponent
3. Propriétés du constructeur de l'objet global (Propriétés du constructeur de l'objet global). Il existe des objets, fonctions, tableaux, chaînes, booléens, nombres, dates, RegExp, erreurs, EvalError, RangeError, ReferenceError, SyntaxError, TypeError, URIError.
4. Les autres propriétés de l'objet global peuvent être considérées comme des classes statiques en Java et peuvent être utilisées directement avec le nom de la classe + le point + le nom de la méthode. Il y a les mathématiques, JSON.
La spécification ECMAScript mentionne que ces objets globaux (The Global Object) ont des propriétés Writable, c'est-à-dire que Writable est vrai et enumerable (Enumerable) est faux, c'est-à-dire que l'énumération ne peut pas être utilisée. ECMAScript a cette section
Sauf indication contraire, les propriétés intégrées standard de l'objet global ont les attributs {[[Writable]] : true, [[Enumerable]] : false, [[Configurable]] : true}.
Bien que la spécification mentionne que The Global Object peut être réécrit, personne ne les réécrira. Ceci est juste un test.
Copiez le code comme suit :
NaN = 11 ;
évaluation = 22 ;
Objet = 33 ;
Mathématiques = 44 ;
alerte(NaN);
alerte (évaluation);
alerte (Objet);
alerte(Mathématiques);<BR>
L'objet global de l'attribut value, l'objet global de l'attribut function, l'objet global de l'attribut constructeur (classe) et l'objet global des autres attributs sont NaN, eval, Object et Math. Les résultats sont les suivants
Les résultats montrent qu'à l'exception de NaN qui ne peut pas être réécrit dans IE9 (pre3)/Safari, tout le reste a été réécrit. En voici seulement quatre répertoriés. Si vous êtes intéressé, vous pouvez tester tous les objets globaux ci-dessus un par un. Le point ici est que les objets intégrés de base de JavaScript peuvent généralement être remplacés, bien que personne ne le fasse.
Testons son énumérabilité
Copiez le code comme suit :
pour(var a dans NaN){
alerte(a);
}
pour(var a dans eval){
alerte(a);
}
pour (var a dans l'objet) {
alerte(a);
}
pour(var a en mathématiques){
alerte(a);
}
Il n'y a pas de popup dans tous les navigateurs, c'est à dire que les propriétés ne sont pas énumérées. Si vous êtes intéressé, vous pouvez tester les propriétés d'énumération de tous les objets globaux ci-dessus un par un. Bien entendu, pour certains navigateurs comme Firefox, certains Objets Globaux peuvent être énumérés après avoir été réécrits.
2. Objets/fonctions globales fournis par l'environnement hôte
Tels que window, alert, setTimeout, document, location, etc., la plupart des navigateurs limiteront leur réécriture.
Copiez le code comme suit :
fenêtre = 55 ;
alerte (fenêtre);
Cette phrase provoquera une erreur sous IE, provoquant une copie illégale, et la boîte de dialogue contextuelle suivante ne sera pas exécutée. D'autres navigateurs affichent toujours la fenêtre lorsque window=55 n'existe pas.
Réécrire l'alerte à nouveau
Copiez le code comme suit :
alerte = 55 ;
console.log(alerte);
Une erreur est signalée sous IE. Firefox/Chrome/Safari/Opera a été réécrit. Vous pouvez voir la sortie de 55 depuis la console correspondante. On peut constater que certains navigateurs ne prennent pas en charge la réécriture des objets/fonctions globales fournies par l'environnement hôte, alors que d'autres le peuvent.
Voici deux façons de déclarer des variables globales
Copiez le code comme suit :
a1 = 11 ;
var a2 = 22 ;
pour(une dans la fenêtre){
si(a=='a1'||a=='a2'){
alerte(a)
}
}
Le code ci-dessus n'affichera pas la boîte d'informations dans IE. Dans IE, le contenu interne est le suivant :
Copiez le code comme suit :
//IE
avec (host_object){//window
avec(global_object){//Global
a1 = 11 ;
var a2 = 22 ;
}
}
Autrement dit, a1 et a2 sont les attributs de l'objet Global fourni par le moteur JS en tant que premier type mentionné ci-dessus, et non les attributs de l'objet window fourni par le deuxième environnement d'hébergement. Par conséquent, a1 et a2 n’existent pas dans la fenêtre d’IE. Si IE fournit une référence à l'objet Global, le code suivant peut peut-être faire apparaître une boîte d'informations.
Copiez le code comme suit :
pour(a dans Global){
si(a=='a1'||a=='a2'){
alerte(a)
}
}
L'intérieur de Firefox/Safari/Chrome/Opera ressemble probablement à ce qui suit
Copiez le code comme suit :
//Firefox/Safari/Chrome/Opéra
avec (host_object){//window
a1 = 11 ;
var a2 = 22 ;
avec(global_object){//Global
}
}
Autrement dit, a1 et a2 sont le deuxième type mentionné ci-dessus, des attributs sur la fenêtre d'objet globale fournie par l'environnement hôte. Par conséquent, lorsque for est dans la fenêtre, a1 et a2 existent et une boîte d'informations apparaît.
Regardons la méthode tierce de déclaration de la variable globale window.a3 = 33. Cela montre que a3 est accroché à la fenêtre en tant que propriété de la fenêtre, donc a3 peut être obtenu dans tous les navigateurs dans la fenêtre.