El JavaScript mencionado aquí se refiere al entorno del navegador, incluido el entorno del host. El primero es el objeto global ECMAScript y el segundo es el objeto/función global en el entorno host (Host).
1. Objetos integrados de JavaScript principales, es decir, objetos proporcionados por la implementación de ECMAScript que no dependen del entorno del host.
Estos objetos ya existen (instanciados) antes de que se ejecute el programa. ECMAScript se llama The Global Object y se divide en los siguientes tipos
1. Propiedades de valor del objeto global. Hay NaN, Infinity, indefinido.
2. Propiedades de función del objeto global. Hay eval, parseInt, parseFloat, isNaN, isFinite, decodeURI, encodedURI, encodeURIComponent
3. Propiedades del constructor del objeto global (Propiedades del constructor del objeto global). Hay objetos, funciones, matrices, cadenas, booleanos, números, fechas, expresiones regulares, errores, errores de evaluación, errores de rango, errores de referencia, errores de sintaxis, errores de tipo y URIError.
4. Otras propiedades del objeto global pueden verse como clases estáticas en Java y pueden usarse directamente con nombre de clase + punto + nombre de método. Hay matemáticas, JSON.
La especificación ECMAScript menciona que estos objetos globales (el objeto global) tienen propiedades de escritura, es decir, escritura es verdadera y enumerable (enumerable) es falsa, es decir, no se puede utilizar la enumeración. ECMAScript tiene esta sección
A menos que se especifique lo contrario, las propiedades integradas estándar del objeto global tienen atributos {[[Writable]]: verdadero, [[Enumerable]]: falso, [[Configurable]]: verdadero}.
Aunque la especificación menciona que el objeto global se puede reescribir, nadie los reescribirá. Esto es sólo una prueba.
Copie el código de código de la siguiente manera:
NaN = 11;
evaluación = 22;
Objeto = 33;
Matemáticas = 44;
alerta (NaN);
alerta(evaluación);
alerta(Objeto);
alerta(Matemáticas);<BR>
El objeto global del atributo de valor, el objeto global del atributo de función, el objeto global del atributo constructor (clase) y el objeto global de otros atributos son NaN, eval, Object y Math. Los resultados son los siguientes
Los resultados muestran que, excepto NaN, que no se puede reescribir en IE9 (pre3)/Safari, todo lo demás se ha reescrito. Aquí solo se enumeran cuatro. Si está interesado, puede probar todos los objetos globales anteriores uno por uno. El punto aquí es que los objetos básicos integrados de JavaScript generalmente se pueden anular, aunque nadie lo hace.
Probemos su enumerabilidad
Copie el código de código de la siguiente manera:
para(var a en NaN){
alerta(a);
}
para(var a en eval){
alerta(a);
}
for(var a en Objeto){
alerta(a);
}
para (var a en matemáticas) {
alerta(a);
}
No hay ventanas emergentes en todos los navegadores, es decir, las propiedades no están enumeradas. Si está interesado, puede probar las propiedades de enumeración de todos los objetos globales anteriores uno por uno. Por supuesto, para algunos navegadores como Firefox, algunos objetos globales se pueden enumerar después de reescribirlos.
2. Objetos/funciones globales proporcionados por el entorno anfitrión
Como ventana, alerta, setTimeout, documento, ubicación, etc., la mayoría de los navegadores restringirán su reescritura.
Copie el código de código de la siguiente manera:
ventana = 55;
alerta(ventana);
Esta oración provocará un error en IE, lo que provocará una copia ilegal y el cuadro emergente posterior no se ejecutará. Otros navegadores siguen mostrando la ventana cuando window=55 no existe.
Vuelva a escribir la alerta
Copie el código de código de la siguiente manera:
alerta = 55;
consola.log(alerta);
Se informa un error en IE. Se ha reescrito Firefox/Chrome/Safari/Opera. Puede ver el resultado de 55 desde la consola correspondiente. Se puede ver que algunos navegadores no admiten la reescritura de objetos/funciones globales proporcionadas por el entorno host, mientras que otros sí pueden.
Las siguientes son dos formas de declarar variables globales.
Copie el código de código de la siguiente manera:
a1 = 11;
var a2 = 22;
para (a en la ventana) {
si(a=='a1'||a=='a2'){
alerta (una)
}
}
El código anterior no mostrará el cuadro de información en IE. En IE, el contenido interno es el siguiente:
Copie el código de código de la siguiente manera:
//ES DECIR
con(host_object){//ventana
con(global_object){//Global
a1 = 11;
var a2 = 22;
}
}
Es decir, a1 y a2 son los atributos del objeto global proporcionado por el motor JS como el primer tipo mencionado anteriormente, no los atributos del objeto de ventana proporcionado por el segundo entorno de alojamiento. Por lo tanto, a1 y a2 no existen cuando están en la ventana de IE. Si IE proporciona una referencia al objeto global, tal vez el siguiente código pueda mostrar un cuadro de información.
Copie el código de código de la siguiente manera:
para (a en Global) {
si(a=='a1'||a=='a2'){
alerta (una)
}
}
El interior de Firefox/Safari/Chrome/Opera probablemente se parezca al siguiente
Copie el código de código de la siguiente manera:
//Firefox/Safari/Chrome/Opera
con(host_object){//ventana
a1 = 11;
var a2 = 22;
con(global_object){//Global
}
}
Es decir, a1 y a2 son el segundo tipo mencionado anteriormente, atributos en la ventana de objetos globales proporcionados por el entorno del host. Por lo tanto, cuando está en la ventana, existen tanto a1 como a2 y aparece un cuadro de información.
Veamos el método de terceros para declarar la variable global window.a3 = 33. Esto muestra que a3 se cuelga en la ventana como una propiedad de la ventana, por lo que a3 se puede obtener en todos los navegadores cuando está en la ventana.