Das hier erwähnte JavaScript bezieht sich auf die Browserumgebung einschließlich der Hostumgebung. Das erste ist das globale ECMAScript-Objekt und das zweite ist das globale Objekt/die globale Funktion unter der Host-Umgebung (Host).
1. In JavaScript integrierte Kernobjekte, d. h. von der ECMAScript-Implementierung bereitgestellte Objekte, die nicht von der Hostumgebung abhängen
Diese Objekte sind bereits vorhanden (instanziiert), bevor das Programm ausgeführt wird. ECMAScript heißt The Global Object und ist in die folgenden Typen unterteilt
1. Werteigenschaften des globalen Objekts. Es gibt NaN, Infinity, undefiniert.
2. Funktionseigenschaften des globalen Objekts. Es gibt eval, parseInt, parseFloat, isNaN, isFinite, decodeURI, encodedURI, encodeURIComponent
3. Konstruktoreigenschaften des globalen Objekts (Konstruktoreigenschaften des globalen Objekts). Es gibt Objekt, Funktion, Array, String, Boolean, Zahl, Datum, RegExp, Fehler, EvalError, RangeError, ReferenceError, SyntaxError, TypeError, URIError.
4. Andere Eigenschaften des globalen Objekts können in Java als statische Klassen betrachtet und direkt mit Klassenname + Punkt + Methodenname verwendet werden. Es gibt Mathematik, JSON.
In der ECMAScript-Spezifikation wird erwähnt, dass diese globalen Objekte (das globale Objekt) über beschreibbare Eigenschaften verfügen, d. h. beschreibbar ist wahr und aufzählbar (aufzählbar) ist falsch, d. ECMAScript hat diesen Abschnitt
Sofern nicht anders angegeben, haben die integrierten Standardeigenschaften des globalen Objekts die Attribute {[[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true}.
Obwohl in der Spezifikation erwähnt wird, dass das globale Objekt umgeschrieben werden kann, wird niemand es umschreiben. Das ist nur ein Test.
Kopieren Sie den Codecode wie folgt:
NaN = 11;
Bewertung = 22;
Objekt = 33;
Mathematik = 44;
Warnung(NaN);
alarm(eval);
alarm(Objekt);
alarm(Math);<BR>
Das globale Objekt des Wertattributs, das globale Objekt des Funktionsattributs, das globale Objekt des Konstruktorattributs (Klasse) und das globale Objekt anderer Attribute sind NaN, eval, Object und Math. Die Ergebnisse sind wie folgt
Die Ergebnisse zeigen, dass mit Ausnahme von NaN, das in IE9 (vor 3)/Safari nicht neu geschrieben werden kann, alles andere neu geschrieben wurde. Hier sind nur vier aufgeführt. Wenn Sie interessiert sind, können Sie alle oben genannten globalen Objekte einzeln testen. Der Punkt hier ist, dass in JavaScript integrierte Kernobjekte im Allgemeinen überschrieben werden können, obwohl dies niemand tut.
Testen wir die Aufzählbarkeit
Kopieren Sie den Codecode wie folgt:
for(var a in NaN){
Warnung(a);
}
for(var a in eval){
Warnung(a);
}
for(var a in Object){
Warnung(a);
}
for(var a in Math){
Warnung(a);
}
Es gibt kein Popup in allen Browsern, d. h. die Eigenschaften werden nicht aufgezählt. Wenn Sie interessiert sind, können Sie die Aufzählungseigenschaften aller oben genannten globalen Objekte einzeln testen. Natürlich können bei einigen Browsern wie Firefox einige globale Objekte nach dem Umschreiben aufgelistet werden.
2. Globale Objekte/Funktionen, die von der Host-Umgebung bereitgestellt werden
Wie Fenster, Warnung, SetTimeout, Dokument, Standort usw. schränken die meisten Browser das Umschreiben ein.
Kopieren Sie den Codecode wie folgt:
Fenster = 55;
Warnung(Fenster);
Dieser Satz verursacht im IE einen Fehler, der zu illegalem Kopieren führt und das darauffolgende Popup-Fenster wird nicht ausgeführt. Andere Browser öffnen das Fenster immer noch, wenn window=55 nicht existiert.
Schreiben Sie die Warnung erneut um
Kopieren Sie den Codecode wie folgt:
Warnung = 55;
console.log(alert);
Unter IE Firefox/Chrome/Safari/Opera wurde ein Fehler gemeldet. Sie können die Ausgabe von 55 in der entsprechenden Konsole sehen. Es ist ersichtlich, dass einige Browser das Umschreiben globaler Objekte/Funktionen, die von der Host-Umgebung bereitgestellt werden, nicht unterstützen, andere hingegen schon.
Im Folgenden finden Sie zwei Möglichkeiten, globale Variablen zu deklarieren
Kopieren Sie den Codecode wie folgt:
a1 = 11;
var a2 = 22;
for(a im Fenster){
if(a=='a1'||a=='a2'){
Warnung(a)
}
}
Der obige Code öffnet das Informationsfeld im IE nicht. Im IE lautet der interne Inhalt wie folgt:
Kopieren Sie den Codecode wie folgt:
//IE
with(host_object){//window
with(global_object){//Global
a1 = 11;
var a2 = 22;
}
}
Das heißt, a1 und a2 sind die Attribute des globalen Objekts, das von der JS-Engine als erster oben erwähnter Typ bereitgestellt wird, und nicht die Attribute des Fensterobjekts, das von der zweiten Hosting-Umgebung bereitgestellt wird. Daher sind a1 und a2 im Fenster im IE nicht vorhanden. Wenn der IE einen Verweis auf das globale Objekt bereitstellt, kann der folgende Code möglicherweise ein Informationsfeld anzeigen.
Kopieren Sie den Codecode wie folgt:
for(a in Global){
if(a=='a1'||a=='a2'){
Warnung(a)
}
}
Das Innere von Firefox/Safari/Chrome/Opera sieht wahrscheinlich wie folgt aus
Kopieren Sie den Codecode wie folgt:
//Firefox/Safari/Chrome/Opera
with(host_object){//window
a1 = 11;
var a2 = 22;
with(global_object){//Global
}
}
Das heißt, a1 und a2 sind der zweite oben erwähnte Typ, Attribute im globalen Objektfenster, das von der Host-Umgebung bereitgestellt wird. Wenn daher im Fenster „for“ sowohl „a1“ als auch „a2“ vorhanden sind, wird ein Informationsfeld angezeigt.
Schauen wir uns die Methode eines Drittanbieters zum Deklarieren der globalen Variablen window.a3 = 33 an. Dies zeigt, dass a3 als Eigenschaft des Fensters am Fenster hängt, sodass a3 in allen Browsern abgerufen werden kann, wenn für im Fenster.