Este artículo le brinda conocimientos relevantes sobre JavaScript, que presenta principalmente problemas relacionados con el modo estricto. El modo estricto es fácil de entender. Es un modo JavaScript restrictivo que hace que el código se separe implícitamente del "modo diferido", echemos un vistazo. Espero que sea de ayuda para todos.
[Recomendaciones relacionadas: videotutorial de javascript, interfaz web]
En el estándar ECMAScript5, JavaScript propuso el concepto de modo estricto:
El modo estricto es fácil de entender, es un modo JavaScript restrictivo, lo que hace que el código salga implícitamente del "modo diferido".
Cuando un navegador que admite el modo estricto detecta el modo estricto en el código, detectará y ejecutará el código de una manera más estricta.
El modo estricto impone algunas restricciones a la semántica normal de JavaScript:
El modo estricto elimina algunos de los errores silenciosos originales arrojándolos .
El modo estricto permite que el motor JS realice más optimizaciones al ejecutar código (sin tener que lidiar con alguna sintaxis especial).
El modo estricto deshabilita parte de la sintaxis que puede definirse en versiones futuras de ECMAScript.
Entonces, ¿cómo habilitar el modo estricto? El modo estricto admite la migración granular:
Puede admitir la activación del modo estricto en archivos js;
También admite activar el modo estricto para una determinada función;
JavaScript está diseñado para que sea más fácil de usar para los desarrolladores novatos, por lo que a veces tiene una sintaxis incorrecta, pero no creo que se pueda analizar normalmente;
Sin embargo, este método puede plantear riesgos de seguridad;
En modo estricto, este tipo de transacción se tratará como un error para que pueda descubrirse y corregirse rápidamente;
A continuación se muestra un resumen de algunas limitaciones comunes:
Hay dos formas de crear variables globales accidentalmente:
Declarar globalmente variables globales directamente sin usar palabras clave
Si declara una variable sin usar palabras clave dentro de una función, la función se promoverá a una variable global de forma predeterminada. El código de ejemplo es el siguiente:
'uso estricto' // Deshabilitar la creación accidental de variables globales mensaje = 'Creación accidental de variables globales' console.log(message) //El mensaje de error es: Error de referencia no detectado: el mensaje no está definido función foo() { edad=20 consola.log(edad) } foo() // Error de referencia: la edad no está definida
El código de muestra es el siguiente:
//Habilita el modo estricto y convierte el problema directamente en un error 'use estricto' const v = 100;//(definir constante) v = 1.14; //Reasignar valor (a variable) console.log(v); // TypeError no detectado: Asignación a variable constante.
En modo estricto, no puede utilizar el operador de deselección en variables.
// Activar el modo estricto 'usar estricto' var v = 100; eliminar v;//En modo no estricto: esta es una falla silenciosa, no se informa un error ni se elimina la variable v. consola.log(v);//100 //Después de activar el modo estricto, se informa un error en su lugar Eliminación de un identificador no calificado en modo estricto.
En modo estricto, usar la palabra clave eliminar para matrices y atributos de métodos tiene el mismo efecto.
// Activar el modo estricto 'usar estricto' // 1. Eliminar el contenido de la matriz en modo estricto var arr = [1,2,3,4] eliminar arreglo[0]; console.log(arr);//[ <1 elemento vacío>, 2, 3, 4] // 2. Atributos de la función de eliminación en modo estricto var obj = { nombre: 'Hombre Cerdo' } eliminar obj.nombre; console.log(obj.nombre)//indefinido
El código de muestra es el siguiente:
'uso estricto' // No se permiten funciones con el mismo nombre de parámetro function foo2 (x, y, x) { consola.log(x, y, x) } foo2(10, 20, 30) // SyntaxError: nombre de parámetro duplicado no permitido en este contexto
El código de muestra es el siguiente:
// El formato octal original var num1 = 0123 no está permitido var num2 = 0o123 // Se puede escribir en este formato como octal var num3 = 0x123 // Se puede escribir en este formato como hexadecimal var num4 = 0b100 // Se puede escribir en este formato como binario console.log(num1) // SyntaxError: los literales octales no están permitidos en modo estricto. console.log(núm2, núm3, núm4) // 83 291 4
El código de muestra es el siguiente:
'uso estricto' var mensaje = 'Hola mundo'; var obj = { nombre: 'mermelada', edad: 20 } // La declaración with puede formar su propio alcance. Al imprimir la edad en la declaración with, se generará el atributo de edad en el objeto obj. Sin embargo, cuando se imprima el mensaje de atributo inexistente en la declaración with, se imprimirá. un nivel al alcance exterior. Un nivel para encontrar la función foo () {. con (obj) { consola.log(edad) consola.log(mensaje) } consola.log(mensaje) } foo() // SyntaxError: el código de modo estricto puede no incluir una declaración with
El código de muestra es el siguiente:
var jsString = "var mensaje = 'hola mundo';console.log(mensaje)" eval(jsString) // Salida hola mundo console.log(message) //El mensaje de error es: ReferenceError: el mensaje no está definido
开启严格模式eval函数不会向上引用变量所以全局作用域就没有message这个变量所以会报错
El código de muestra es el siguiente:
'uso estricto' // En modo estricto, la función autoejecutable (enlace predeterminado) apuntará a indefinido, y en modo no estricto, apuntará a ventana función foo() { consola.log(esto) } foo() // indefinido