Tutorial JS

JS INICIO JS Introducción JS Dónde Salida JS Declaraciones JS Sintaxis JS Comentarios JS Variables JS JS Vamos Constante JS Operadores JS Aritmética JS Tarea JS Tipos de datos JS Funciones JS Objetos JS Eventos JS Cadenas JS Métodos de cadena JS Búsqueda de cadenas JS Plantillas de cadena JS Números JS Métodos numéricos JS Matrices JS Métodos de matriz JS Clasificación de matriz JS Iteración de matriz JS Constante de matriz JS Fechas JS Formatos de fecha JS Métodos de obtención de fecha JS Métodos de configuración de fechas JS Matemáticas JS JS al azar Booleanos JS Comparaciones JS Condiciones JS Interruptor JS Bucle JS para Bucle JS para entrada Bucle JS para de Bucle JS mientras descanso JS Iterables JS Conjuntos JS Mapas JS JS Tipo de Conversión de tipo JS JS bit a bit JS expresión regular Errores JS Alcance JS JS Elevación Modo estricto JS JS esta palabra clave Función de flecha JS Clases JS JSJSON Depuración JS Guía de estilo JS Prácticas recomendadas de JS Errores JS Rendimiento JS Palabras reservadas de JS

Versiones JS

Versiones JS JS 2009 (ES5) JS 2015 (ES6) JS 2016 JS 2017 JS 2018 JS IE / Borde Historia de JS

Objetos JS

Definiciones de objetos Propiedades del objeto Métodos de objetos Visualización de objetos Accesores de objetos Constructores de objetos Prototipos de objetos Objeto iterables Conjuntos de objetos Mapas de objetos Referencia de objeto

Funciones JS

Definiciones de funciones Parámetros de función Invocación de funciones Llamada de función Función Aplicar Cierres de funciones

Clases JS

Introducción a la clase Herencia de clase Clase estática

JS asíncrono

Devoluciones de llamada JS JS asíncrono Promesas JS JS asíncrono/espera

JS HTML DOM

Introducción al DOM Métodos DOM Documento DOM Elementos DOM DOM HTML Formularios DOM DOM CSS Animaciones DOM Eventos DOM Oyente de eventos DOM Navegación DOM Nodos DOM Colecciones DOM Listas de nodos DOM

Lista de materiales del navegador JS

Ventana JS Pantalla JS Ubicación de JS Historia de JS Navegador JS Alerta emergente JS Tiempo JS Galletas JS

API web de JS

Introducción a la API web API de formularios web API de historial web API de almacenamiento web API de trabajo web API de búsqueda web API de geolocalización web

JS AJAX

Introducción a AJAX AJAX XMLHttp Solicitud AJAX Respuesta AJAX Archivo XML AJAX AJAXPHP Ajax ASP Base de datos AJAX Aplicaciones AJAX Ejemplos de AJAX

JSJSON

Introducción JSON Sintaxis JSON JSON frente a XML Tipos de datos JSON Análisis JSON Cadena JSON Objetos JSON Matrices JSON Servidor JSON JSONPHP JSONHTML JSON JSONP

JS frente a jQuery

Selectores jQuery HTML de jQuery CSS de jQuery DOM de jQuery

Gráficos JS

Gráficos JS Lienzo JS JS Trazado Gráfico JS.js Gráfico de Google JS JS D3.js

Ejemplos de JS

Ejemplos de JS JS HTML DOM Entrada HTML JS Objetos JS HTML Eventos JS HTML Navegador JS Editor JS Ejercicios JS Prueba JS Certificado JS

Referencias JS

Objetos JavaScript Objetos HTML DOM


Uso estricto de JavaScript


"use strict";Define que el código JavaScript debe ejecutarse en "modo estricto".


La Directiva de "uso estricto"

La "use strict"directiva era nueva en ECMAScript versión 5.

No es una declaración, sino una expresión literal, ignorada por versiones anteriores de JavaScript.

El propósito de "use strict"es indicar que el código debe ejecutarse en "modo estricto".

Con el modo estricto, no puede, por ejemplo, usar variables no declaradas.

Todos los navegadores modernos admiten el "uso estricto", excepto Internet Explorer 9 y versiones anteriores:

Directive
"use strict" 13.0 10.0 4.0 6.0 12.1

Los números de la tabla especifican la primera versión del navegador que es totalmente compatible con la directiva.

Puede usar el modo estricto en todos sus programas. Le ayuda a escribir un código más limpio, como evitar que use variables no declaradas.

"use strict"es solo una cadena, por lo que IE 9 no arrojará un error incluso si no lo entiende.


Declaración de modo estricto

El modo estricto se declara agregando "uso estricto"; al comienzo de un script o una función.

Declarado al comienzo de una secuencia de comandos, tiene un alcance global (todo el código de la secuencia de comandos se ejecutará en modo estricto):

Ejemplo

"use strict";
x = 3.14;       // This will cause an error because x is not declared

Ejemplo

"use strict";
myFunction();

function myFunction() {
  y = 3.14;   // This will also cause an error because y is not declared
}

Declarado dentro de una función, tiene alcance local (solo el código dentro de la función está en modo estricto):

x = 3.14;       // This will not cause an error.
myFunction();

function myFunction() {
  "use strict";
  y = 3.14;   // This will cause an error
}


El "uso estricto"; Sintaxis

La sintaxis, para declarar el modo estricto, fue diseñada para ser compatible con versiones anteriores de JavaScript.

La compilación de un literal numérico (4 + 5;) o un literal de cadena ("John Doe";) en un programa de JavaScript no tiene efectos secundarios. Simplemente compila a una variable no existente y muere.

Entonces "use strict";solo importa a los nuevos compiladores que "entienden" el significado de esto.


¿Por qué modo estricto?

El modo estricto facilita la escritura de JavaScript "seguro".

El modo estricto cambia la "mala sintaxis" previamente aceptada en errores reales.

Como ejemplo, en JavaScript normal, escribir mal el nombre de una variable crea una nueva variable global. En modo estricto, esto generará un error, lo que imposibilitará la creación accidental de una variable global.

En JavaScript normal, un desarrollador no recibirá ningún comentario de error al asignar valores a propiedades que no se pueden escribir.

En modo estricto, cualquier asignación a una propiedad que no se puede escribir, una propiedad de solo captador, una propiedad inexistente, una variable inexistente o un objeto inexistente generará un error.


No permitido en modo estricto

No se permite usar una variable sin declararla:

"use strict";
x = 3.14;                // This will cause an error

Los objetos también son variables.

No se permite usar un objeto sin declararlo:

"use strict";
x = {p1:10, p2:20};      // This will cause an error

No se permite eliminar una variable (u objeto).

"use strict";
let x = 3.14;
delete x;                // This will cause an error

No se permite eliminar una función.

"use strict";
function x(p1, p2) {};
delete x;                // This will cause an error 

No se permite duplicar el nombre de un parámetro:

"use strict";
function x(p1, p1) {};   // This will cause an error

Los literales numéricos octales no están permitidos:

"use strict";
let x = 010;             // This will cause an error

No se permiten caracteres de escape octales:

"use strict";
let x = "\010";            // This will cause an error

No se permite escribir en una propiedad de solo lectura:

"use strict";
const obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});

obj.x = 3.14;            // This will cause an error

No se permite escribir en una propiedad de solo obtención:

"use strict";
const obj = {get x() {return 0} };

obj.x = 3.14;            // This will cause an error

No se permite eliminar una propiedad imborrable:

"use strict";
delete Object.prototype; // This will cause an error

La palabra evalno se puede utilizar como variable:

"use strict";
let eval = 3.14;         // This will cause an error

La palabra argumentsno se puede utilizar como variable:

"use strict";
let arguments = 3.14;    // This will cause an error

No withse permite la declaración:

"use strict";
with (Math){x = cos(2)}; // This will cause an error

Por razones de seguridad, eval()no se permite crear variables en el ámbito desde el que se llamó:

"use strict";
eval ("let x = 2");
alert (x);             // This will cause an error

La thispalabra clave en funciones se comporta de manera diferente en modo estricto.

La thispalabra clave se refiere al objeto que llamó a la función.

Si no se especifica el objeto, las funciones en modo estricto devolverán undefinedy las funciones en modo normal devolverán el objeto global (ventana):

"use strict";
function myFunction() {
  alert(this); // will alert "undefined"
}
myFunction();


¡Prueba del futuro!

Las palabras clave reservadas para futuras versiones de JavaScript NO se pueden usar como nombres de variables en modo estricto.

Estos son:

  • implementos
  • interfaz
  • dejar
  • paquete
  • privado
  • protegido
  • público
  • estático
  • producir
"use strict";
let public = 1500;      // This will cause an error

¡Cuidado!

La directiva de "uso estricto" solo se reconoce al comienzo de un script o una función.