Este artigo traz conhecimentos relevantes sobre JavaScript, que apresenta principalmente questões relacionadas ao modo estrito, é fácil de entender. É um modo JavaScript restritivo, que faz com que o código se afaste implicitamente do ""modo preguiçoso", vamos dar uma olhada. nisso, espero que seja útil para todos.
[Recomendações relacionadas: tutorial em vídeo javascript, front-end da web]
No padrão ECMAScript5, JavaScript propôs o conceito de modo estrito:
O modo estrito é fácil de entender, é um modo JavaScript restritivo, que faz com que o código saia implicitamente do "modo lento".
Quando um navegador que suporta o modo estrito detecta o modo estrito no código, ele detecta e executa o código de maneira mais estrita.
O modo estrito impõe algumas restrições à semântica normal do JavaScript:
O modo estrito elimina alguns dos erros silenciosos originais, lançando-os .
O modo estrito permite que o mecanismo JS execute mais otimizações ao executar o código (sem ter que lidar com alguma sintaxe especial).
O modo estrito desativa algumas sintaxes que podem ser definidas em versões futuras do ECMAScript.
Então, como habilitar o modo estrito? O modo estrito oferece suporte à migração granular:
Pode suportar a ativação do modo estrito em arquivos js;
Ele também suporta a ativação do modo estrito para uma determinada função;
O JavaScript foi projetado para ser mais fácil de ser usado por desenvolvedores novatos, então às vezes ele tem sintaxe incorreta, mas não pense que pode ser analisado normalmente;
Contudo, este método pode trazer riscos de segurança;
No modo estrito, esse tipo de transação será tratada como um erro para que possa ser rapidamente descoberta e corrigida;
Aqui está um resumo de algumas limitações comuns:
Existem duas maneiras de criar variáveis globais acidentalmente:
Declarar globalmente variáveis globais diretamente sem usar palavras-chave
Se você declarar uma variável sem usar palavras-chave dentro de uma função, a função será promovida a uma variável global por padrão. O código de exemplo é o seguinte:
'usar estrito' // Desativa a criação acidental de variáveis globais message = 'Criação acidental de variáveis globais' console.log(message) //A mensagem de erro é: Uncaught ReferenceError: a mensagem não está definida função foo(){ idade=20 console.log(idade) } foo() // ReferenceError: idade não está definida
O código de exemplo é o seguinte:
//Ativa o modo estrito e converte o problema diretamente em um erro 'use strict' const v = 100;//(definir constante) v = 1,14; //Reatribuir valor (à variável) console.log(v); // TypeError não capturado: Atribuição à variável constante.
No modo estrito, você não pode usar o operador de desmarcação em variáveis.
//Ativa o modo estrito 'use strict' var v = 100; delete v;//No modo não estrito: esta é uma falha silenciosa, nem um erro é relatado nem a variável v é excluída. console.log(v);//100 //Depois de ativar o modo estrito, um erro é relatado. Exclusão de um identificador não qualificado no modo estrito.
No modo estrito, usar a palavra-chave delete para matrizes e atributos de método tem o mesmo efeito.
//Ativa o modo estrito 'use strict' // 1. Exclua o conteúdo do array no modo estrito var arr = [1,2,3,4] excluir arr[0]; console.log(arr);//[ <1 item vazio>, 2, 3, 4 ] // 2. Atributos da função delete em modo estrito var obj = { nome: 'Homem Porco' } excluir obj.nome; console.log(obj.name)//indefinido
O código de exemplo é o seguinte:
'usar estrito' //Funções com o mesmo nome de parâmetro não são permitidas function foo2 (x, y, x) { console.log(x, y, x) } foo2(10, 20, 30) // SyntaxError: Nome de parâmetro duplicado não permitido neste contexto
O código de exemplo é o seguinte:
// O formato octal original var num1 = 0123 não é permitido var num2 = 0o123 // Pode ser escrito neste formato como octal var num3 = 0x123 // Pode ser escrito neste formato como hexadecimal var num4 = 0b100 // Pode ser escrito neste formato como binário console.log(num1) // SyntaxError: Literais octais não são permitidos no modo estrito. console.log(num2, num3, num4) // 83 291 4
O código de exemplo é o seguinte:
'usar estrito' var mensagem = 'Olá mundo'; var obj = { nome: 'jam', idade: 20 } //A instrução with pode formar seu próprio escopo Ao imprimir a idade na instrução with, o atributo age no objeto obj será exibido. No entanto, quando a mensagem do atributo inexistente for impressa na instrução with, ela será impressa. um nível para o escopo externo. Um nível para encontrar a função foo () { com (obj) { console.log(idade) console.log(mensagem) } console.log(mensagem) } foo() // SyntaxError: o código do modo estrito pode não incluir uma instrução with
O código de exemplo é o seguinte:
var jsString = "var mensagem = 'olá mundo';console.log(mensagem)" eval(jsString) // Saída Olá mundo console.log(message) //A mensagem de erro é: ReferenceError: a mensagem não está definida
开启严格模式eval函数不会向上引用变量所以全局作用域就没有message这个变量所以会报错
O código de exemplo é o seguinte:
'usar estrito' // No modo estrito, a função autoexecutável (ligação padrão) apontará para indefinido, e no modo não estrito, apontará para janela função foo(){ console.log(este) } foo() // indefinido