O JavaScript mencionado aqui refere-se ao ambiente do navegador, incluindo o ambiente host. O primeiro é o Objeto Global ECMAScript e o segundo é o objeto/função global no ambiente Host (Host).
1. Objetos internos do JavaScript principal, ou seja, objetos fornecidos pela implementação do ECMAScript que não dependem do ambiente host
Esses objetos já existem (instanciados) antes da execução do programa. ECMAScript é chamado de Objeto Global e é dividido nos seguintes tipos
1. Propriedades de valor do objeto global. Existem NaN, Infinito, indefinido.
2. Propriedades da Função do Objeto Global. Existem eval, parseInt, parseFloat, isNaN, isFinite, decodeURI, encodedURI, encodeURIComponent
3. Propriedades do Construtor do Objeto Global (Propriedades do Construtor do Objeto Global). Existem Objeto, Função, Matriz, String, Booleano, Número, Data, RegExp, Erro, EvalError, RangeError, ReferenceError, SyntaxError, TypeError, URIError.
4. Outras propriedades do objeto global podem ser vistas como classes estáticas em Java e podem ser usadas diretamente com nome da classe + ponto final + nome do método. Existe matemática, JSON.
A especificação ECMAScript menciona que esses objetos globais (O Objeto Global) possuem propriedades Writable, ou seja, Writable é verdadeiro, e enumerável (Enumerable) é falso, ou seja, pois na enumeração não pode ser usado. ECMAScript tem esta seção
A menos que especificado de outra forma, as propriedades integradas padrão do objeto global possuem atributos {[[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true}.
Embora a especificação mencione que o Objeto Global pode ser reescrito, ninguém irá reescrevê-los. Este é apenas um teste.
Copie o código do código da seguinte forma:
NaN = 11;
avaliação = 22;
Objeto = 33;
Matemática = 44;
alerta(NaN);
alerta(avaliação);
alerta(Objeto);
alerta(Matemática);<BR>
O objeto global do atributo de valor, o objeto global do atributo de função, o objeto global do atributo construtor (classe) e o objeto global de outros atributos são NaN, eval, Object e Math. Os resultados são os seguintes
Os resultados mostram que, exceto NaN, que não pode ser reescrito no IE9 (pre3)/Safari, todo o resto foi reescrito. Aqui estão apenas quatro listados. Se você estiver interessado, você pode testar todos os objetos globais acima, um por um. A questão aqui é que os principais objetos internos do JavaScript geralmente podem ser substituídos, embora ninguém faça isso.
Vamos testar sua enumerabilidade
Copie o código do código da seguinte forma:
para(var a em NaN){
alerta(a);
}
for(var a em avaliação){
alerta(a);
}
for(var a no objeto){
alerta(a);
}
for(var a em matemática){
alerta(a);
}
Não há pop-up em todos os navegadores, ou seja, as propriedades não são enumeradas. Se estiver interessado, você pode testar as propriedades de enumeração de todos os objetos globais acima, um por um. É claro que, para alguns navegadores como o Firefox, alguns objetos globais podem ser enumerados após serem reescritos.
2. Objetos/funções globais fornecidos pelo ambiente host
Como janela, alerta, setTimeout, documento, localização, etc., a maioria dos navegadores restringirá sua reescrita.
Copie o código do código da seguinte forma:
janela = 55;
alerta(janela);
Esta frase causará um erro no IE, solicitando cópia ilegal, e a caixa pop-up subsequente não será executada. Outros navegadores ainda abrem a janela quando window=55 não existe.
Reescrever alerta novamente
Copie o código do código da seguinte forma:
alerta = 55;
console.log(alerta);
Um erro é relatado no IE. Firefox/Chrome/Safari/Opera foi reescrito. Você pode ver a saída de 55 no console correspondente. Pode-se observar que alguns navegadores não suportam a reescrita de objetos/funções globais fornecidos pelo ambiente host, enquanto outros podem.
A seguir estão duas maneiras de declarar variáveis globais
Copie o código do código da seguinte forma:
a1 = 11;
var a2 = 22;
for(a na janela){
if(a=='a1'||a=='a2'){
alerta(a)
}
}
O código acima não abrirá a caixa de informações no IE. No IE, o conteúdo interno é o seguinte:
Copie o código do código da seguinte forma:
//IE
com(host_object){//janela
com(objeto_global){//Global
a1 = 11;
var a2 = 22;
}
}
Ou seja, a1 e a2 são os atributos do objeto Global fornecidos pelo mecanismo JS como o primeiro tipo mencionado acima, e não os atributos do objeto janela fornecidos pelo segundo ambiente de hospedagem. Portanto, a1 e a2 não existem quando estão na janela do IE. Se o IE fornecer uma referência ao objeto Global, talvez o código a seguir possa abrir uma caixa de informações.
Copie o código do código da seguinte forma:
para(a em Global){
if(a=='a1'||a=='a2'){
alerta(a)
}
}
O interior do Firefox/Safari/Chrome/Opera provavelmente se parece com o seguinte
Copie o código do código da seguinte forma:
//Firefox/Safari/Chrome/Opera
com(host_object){//janela
a1 = 11;
var a2 = 22;
com(objeto_global){//Global
}
}
Ou seja, a1 e a2 são o segundo tipo mencionado acima, atributos na janela global do objeto fornecido pelo ambiente host. Portanto, quando for na janela, a1 e a2 existem e uma caixa de informações é exibida.
Vejamos o método de terceiros para declarar a variável global window.a3 = 33. Isso mostra que a3 está pendurado na janela como uma propriedade da janela, então a3 pode ser obtido em todos os navegadores quando estiver na janela.