"Modo Strito" é uma nova sintaxe definida na ECMA-262 Edition 5, indicando que ela precisa ser executada usando uma sintaxe estrita JavaScript. Alguns métodos de escrita usados no passado lançarão exceções sintaxes, como:
1. Nenhuma declaração de var antes da variável
2. Use a sintaxe octal: var n = 023 e var s = "/047" "
3. Use com declarações
4. Use Excluir para excluir um nome de variável (não o nome do atributo): Exclua MyVariable
5. Use avaliar ou argumentos como nome variável ou nome da função
6. Use palavras futuras reservadas (talvez usadas no ECMAScript 6): implementos, interface, deixe, pacote, privado, protegido, público, estático e rendimento como nomes variáveis ou nomes de funções
7. Use a declaração da função no bloco de instrução: if (a <b) {função f () {}}
8. Outros erros
8.1. Use dois nomes de atributos idênticos no tamanho da sub-face do objeto: {a: 1, b: 3, a: 7}
8.2. Use dois nomes de parâmetros idênticos nos parâmetros da função: função f (a, b, b) {}
Estes são explicados em detalhes abaixo.
1. Por que usar "modo rigoroso"
O objetivo de estabelecer um "modelo rigoroso" é principalmente o seguinte:
1. Elimine alguns aspectos irracionais e imperfeitos da sintaxe do JavaScript e reduza alguns comportamentos estranhos;
2. Elimine algumas inseguranças no código em execução e garanta a segurança do código em execução;
3. Melhore a eficiência do compilador e aumente a velocidade de operação;
4. Coloque a base para a nova versão do JavaScript no futuro.
O "modo rigoroso" reflete a direção de desenvolvimento mais razoável, mais segura e rigorosa do JavaScript. Os navegadores convencionais, incluindo o IE 10, já o apoiaram, e muitos projetos importantes começaram a abraçá -lo integralmente.
Por outro lado, o mesmo código pode ter diferentes resultados em execução em "modo rigoroso"; Algumas declarações que podem ser executadas no "modo normal" não serão executadas no "modo rigoroso". Dominar esses conteúdos o ajudará a entender o JavaScript com mais cuidado e profundidade, tornando você um programador melhor.
Este artigo fornecerá uma introdução detalhada ao "modelo rigoroso".
2. Declare "modo rigoroso"
Declarar o "modo rigoroso" é simples e tem apenas uma afirmação:
A cópia do código é a seguinte: "Use Strict";
NOTA: Os navegadores mais antigos o tratarão como uma corda normal e a ignorarão.
3. Declare a localização e a relação contextual de "modo rigoroso"
O "modo rigoroso" afeta principalmente o escopo onde está localizado. Se usado nas funções, não transformará o escopo global e outras funções não utilizadas em "modo rigoroso". Isto é, o escopo de uma declaração estrita de padrão depende de seu contexto. Se o modo rigoroso for declarado em um contexto global (fora do escopo de uma função), todo o código no programa está em modo rigoroso. Se um padrão rigoroso for declarado em uma função, todo o código na função está em padrão rigoroso. Por exemplo, no exemplo a seguir, todo o código está no modo rigoroso, e declarações variáveis fora da função causarão um erro de sintaxe: "as variáveis não são definidas no modo rigoroso". Existem duas maneiras de chamar de "modo rigoroso" e são adequadas para diferentes ocasiões.
1. Para todo o arquivo de script
Coloque "Use Strict" na primeira linha do arquivo de script e todo o script será executado no "Modo Strito". Se essa instrução de linha não estiver na primeira linha, ela será inválida e todo o script será executado no "Modo Normal". Isso requer atenção especial se os arquivos de código de diferentes modos forem mesclados em um arquivo.
(Estritamente falando, desde que a afirmação que produza o resultado real não seja precedida, "Use Strict" pode não estar na primeira linha, como diretamente após um semicolon vazio.)
A cópia do código é a seguinte:
<Cript>
"Use rigoroso";
console.log ("Este é o modo rigoroso.");
</script>
<Cript>
console.log ("Este é o modo normal.");
</script>
O código acima indica que existem duas peças de código JavaScript em uma página da web, por sua vez. A tag de script anterior é o modo rigoroso, o último não é.
2. Para uma única função
Coloque "Use Strict" na primeira linha do corpo da função, e toda a função é executada no "Modo Estrito".
A cópia do código é a seguinte:
function stric () {
"Use rigoroso";
retornar "Este é um padrão rigoroso".;
}
function notstrit () {
retornar "Este é o modo normal.";
}
3. Solução alternativa para arquivos de script
Como o método de primeira chamada não é propício para a fusão de arquivos, é melhor emprestar o segundo método e colocar o arquivo de script inteiro em uma função anônima que é executada imediatamente.
A cópia do código é a seguinte:
(function () {
"Use rigoroso";
// Algum código aqui
}) ();
4. A sintaxe e o comportamento mudam no "modo rigoroso"
O "modo rigoroso" fez algumas alterações na sintaxe e comportamento do JavaScript.
1. Declaração explícita de variáveis globais
No modo normal, ao usar variáveis, não precisamos usar o VAR para declarar (declarar explicitamente), mas no modo rigoroso, devemos usar o VAR para declarar antes do uso de variáveis, caso contrário, ocorrerá um erro.
A cópia do código é a seguinte:
"Use rigoroso";
v = 1; // um erro é relatado, V não é declarado
para (i = 0; i <2; i ++) {// um erro foi relatado, eu não fui declarado
}
Portanto, no modo rigoroso, as variáveis devem ser declaradas com o comando VAR antes do uso.
2. Ligação estática
Um recurso da linguagem JavaScript é que ela permite "ligação dinâmica", ou seja, a que pertencem certas propriedades e métodos, não é determinada no momento da compilação, mas no tempo de execução.
O modo rigoroso coloca algumas restrições à ligação dinâmica. Em alguns casos, apenas a ligação estática é permitida. Em outras palavras, que objetam que os atributos e métodos pertencem é determinado durante o estágio de compilação. Isso ajudará a melhorar a eficiência da compilação, facilitará a leitura do código e menos acidentes.
Especificamente, os seguintes aspectos estão envolvidos.
(1) Uso com declarações é proibido
Porque a declaração com com não pode ser determinada no momento da compilação, a que objeta o atributo pertence.
A cópia do código é a seguinte:
"Use rigoroso";
var V = 1;
com (O) {// Sintaxe Erro
v = 2;
}
(2) Crie um escopo de avaliação
No modo normal, a linguagem JavaScript possui dois escopos variáveis: escopo global e escopo da função. O modo rigoroso cria um terceiro escopo: avaliar o escopo.
No modo normal, o escopo da instrução Eval depende se está no escopo global ou no escopo funcional. No modo rigoroso, a própria declaração de avaliação é um escopo e não pode mais gerar variáveis globais. As variáveis que ele gera só podem ser usadas dentro de avaliação.
A cópia do código é a seguinte:
"Use rigoroso";
var x = 2;
console.info (EVALL ("var x = 5; x")); // 5
console.info (x); // 2
3. Medidas de segurança aprimoradas
(1) Proibir essa palavra -chave de apontar para objetos globais
A cópia do código é a seguinte:
função f () {
retornar! Isso;
}
// retorna false, porque "isso" aponta para o objeto global "! Isso" é falso
função f () {
"Use rigoroso";
retornar! Isso;
}
// retorna true, porque no modo rigoroso, o valor disso é indefinido, então "! Isso" é verdadeiro.
Portanto, ao usar o construtor, se você esquecer de adicionar novas, isso não aponta mais para o objeto global, mas relata um erro.
A cópia do código é a seguinte:
função f () {
"Use rigoroso";
this.a = 1;
};
f (); // erro, isso não é definido
Na função comum chamada f (), o valor disso apontará para o objeto global. No modo rigoroso, o valor disso apontará para indefinido. Quando a função é chamada através de chamada e aplicação, se o parâmetro passado deste valor for um valor primitivo (string, número, valor booleano), exceto para nulo e indefinido, o valor disso se tornará o objeto Wrapper correspondente ao valor original. Se o valor desse parâmetro de valor for indefinido ou nulo, o valor disso apontará para o objeto global. No modo rigoroso, o valor desse valor é o valor desse parâmetro de valor, sem qualquer conversão de tipo.
(2) proibido de atravessar a pilha de chamadas dentro da função
A cópia do código é a seguinte:
função f1 () {
"Use rigoroso";
F1.Caller; // Relate um erro
f1.arguments; // Relate um erro
}
f1 ();
4. Desative a exclusão de variáveis
As variáveis não podem ser excluídas no modo rigoroso. Somente as propriedades do objeto cujo configurável é definido como true pode ser excluído.
A cópia do código é a seguinte:
"Use rigoroso";
var x;
excluir x; // erro de sintaxe
var o = object.create (null, 'x', {
Valor: 1,
Configurável: Verdadeiro
});
excluir boi; // excluir com sucesso
5. Erro explícito
No modo normal, se você atribuir uma propriedade somente leitura de um objeto, não haverá erros e ele só falhará em silêncio. No modo rigoroso, será relatado um erro.
A cópia do código é a seguinte:
"Use rigoroso";
var o = {};
Object.DefineProperty (O, "V", {Value: 1, Writitable: false});
ov = 2; // Relate um erro
No modo rigoroso, se você atribuir uma propriedade lida usando o método getter, será relatado um erro.
A cópia do código é a seguinte:
"Use rigoroso";
var o = {
obtenha v () {return 1; }
};
ov = 2; // Relate um erro
No modo rigoroso, a adição de novos atributos a objetos que são proibidos de serem estendidos resultará em um erro.
A cópia do código é a seguinte:
"Use rigoroso";
var o = {};
Object.PreventExtensions (O);
ov = 1; // Relate um erro
No modo rigoroso, a exclusão de uma propriedade Undelete causará um erro.
A cópia do código é a seguinte:
"Use rigoroso";
excluir object.prototype; // Relate um erro
6. Renomeie o erro
O modo rigoroso adicionou alguns erros de sintaxe.
(1) Objetos não podem ter atributos com nomes duplicados
No modo normal, se o objeto tiver vários atributos duplicados, o último atributo atribuído substituirá o valor anterior. No modo rigoroso, este é um erro de sintaxe.
A cópia do código é a seguinte:
"Use rigoroso";
var o = {
P: 1,
P: 2
}; // erro de sintaxe
(2) As funções não podem ter parâmetros com nomes duplicados
No modo normal, se a função possui vários parâmetros com nomes duplicados, ela poderá ser lida com argumentos [i]. No modo rigoroso, este é um erro de sintaxe.
A cópia do código é a seguinte:
"Use rigoroso";
função f (a, a, b) {// erro de sintaxe
retornar ;
}
7. Notação octal é proibida
No modo normal, se o primeiro bit de um número inteiro for 0, significa que esse é um número octal, como 0100 é igual a 64 em decimal. O modo rigoroso proíbe essa representação. Se o primeiro bit do número inteiro for 0, será relatado um erro.
A cópia do código é a seguinte:
"Use rigoroso";
var n = 0100; // erro de sintaxe
8. Restrições de objetos de argumentos
Os argumentos são objetos de parâmetro de funções e o modo rigoroso limita seu uso.
(1) Atribuir argumentos não é permitido
A cópia do código é a seguinte:
"Use rigoroso";
argumentos ++; // erro de sintaxe
var obj = {set p (argumentos) {}}; // erro de sintaxe
tente {} catch (argumentos) {} // erro de sintaxe
Função Argumentos () {} // Sintaxe Erro
var f = nova função ("Argumentos", "Use Strict '; Return 17;"); // erro de sintaxe
(2) Os argumentos não rastreiam mais as alterações nos parâmetros
A cópia do código é a seguinte:
função f (a) {
a = 2;
retornar [a, argumentos [0]];
}
f (1); // O modo normal é [2,2]
função f (a) {
"Use rigoroso";
a = 2;
retornar [a, argumentos [0]];
}
f (1); // O modo rigoroso é [2,1]
(3) o uso de argumentos.Callee é proibido
Isso significa que você não pode se chamar dentro de uma função anônima.
A cópia do código é a seguinte:
"Use rigoroso";
var f = function () {return Argumments.callee; };
f (); // Relate um erro
9. A função deve ser declarada no nível superior
No futuro, novas versões do JavaScript introduzirão "escopo no nível do bloco". Para se alinhar com a nova versão, o modo rigoroso apenas permite que as funções sejam declaradas no nível superior do escopo global ou escopo da função. Ou seja, não é permitido declarar funções em blocos de código não funções.
A cópia do código é a seguinte:
"Use rigoroso";
if (true) {
função f () {} // Sintaxe Erro
}
for (var i = 0; i <5; i ++) {
função f2 () {} // Sintaxe Erro
}
10. Mantenha as palavras
Para fazer a transição para uma nova versão do JavaScript no futuro, algumas palavras reservadas foram adicionadas ao modo rigoroso: implementos, interface, deixar, pacote, privado, protegido, público, estático, rendimento.
O uso dessas palavras como nomes de variáveis resultará em um erro.
A cópia do código é a seguinte:
pacote de função (protegido) {// Sintaxe Erro
"Use rigoroso";
VAR implementos; // erro de sintaxe
}
Além disso, a quinta versão do ECMAScript também estipula outras palavras reservadas (classe, enumeração, exportação, estende, importação, super), bem como palavras const reservadas adicionadas pelos principais navegadores, que não podem ser usados como nomes de variáveis.