Recientemente, ejecuté parte de mi código JavaScript a través de JSLint de Crockford, y me dio el siguiente error:

Problema en la línea 1, caracter 1: Falta la declaración "use estricto".

Al hacer algunas búsquedas, me di cuenta de que algunas personas agregan "use strict"; en su código JavaScript. Una vez que agregué la declaración, el error dejó de aparecer. Desafortunadamente, Google no reveló gran parte de la historia detrás de esta declaración de cadena. Ciertamente debe tener algo que ver con la forma en que el navegador interpreta el JavaScript, pero no tengo idea de cuál sería el efecto.

Entonces, ¿de qué se trata "use strict";, qué implica y si sigue siendo relevante?

¿Alguno de los navegadores actuales responde a la cadena "use strict"; o es para uso futuro?

7482
Mark Rogers 26 ago. 2009 a las 20:10

22 respuestas

La mejor respuesta

Este artículo sobre el Modo estricto de Javascript puede interesarle: John Resig - ECMAScript 5 Modo estricto, JSON y más

Para citar algunas partes interesantes:

El modo estricto es una nueva característica en ECMAScript 5 que le permite colocar un programa o una función en un contexto operativo "estricto". Este contexto estricto evita que se tomen ciertas acciones y arroja más excepciones.

Y:

El modo estricto ayuda de dos maneras:

  • Captura algunos bloopers de codificación comunes, arrojando excepciones.
  • Previene, o arroja errores, cuando se toman acciones relativamente "inseguras" (como obtener acceso al objeto global).
  • Deshabilita características que son confusas o mal pensadas.

También tenga en cuenta que puede aplicar el "modo estricto" a todo el archivo ... O puede usarlo solo para una función específica (todavía citando el artículo de John Resig) :

// Non-strict code...

(function(){
  "use strict";

  // Define your library strictly...
})();

// Non-strict code... 

Lo que podría ser útil si tiene que mezclar código antiguo y nuevo ;-)

Entonces, supongo que es un poco como el "use strict" que puedes usar en Perl (¿de ahí el nombre?) : te ayuda a cometer menos errores al detectar más cosas que podrían provocar roturas.

El modo estricto ahora es compatible con todos los principales navegadores.

Dentro de módulos ECMAScript nativos (con declaraciones import y export) y clases ES6, el modo estricto siempre está habilitado y no se puede discapacitado.

4903
FZs 12 jul. 2019 a las 10:12

El modo estricto puede evitar pérdidas de memoria.

Verifique la función a continuación escrita en modo no estricto:

function getname(){
    name = "Stack Overflow"; // Not using var keyword
    return name;
}
getname();
console.log(name); // Stack Overflow

En esta función, estamos usando una variable llamada name dentro de la función. Internamente, el compilador primero verificará si hay alguna variable declarada con ese nombre en particular en ese ámbito de función en particular. Como el compilador entendió que no existe tal variable, verificará en el ámbito externo. En nuestro caso, es el alcance global. Nuevamente, el compilador entendió que tampoco hay una variable declarada en el espacio global con ese nombre, por lo que crea una variable para nosotros en el espacio global. Conceptualmente, esta variable se creará en el ámbito global y estará disponible en toda la aplicación.

Otro escenario es que, digamos, la variable se declara en una función secundaria. En ese caso, el compilador verifica la validez de esa variable en el ámbito externo, es decir, la función padre. Solo entonces verificará el espacio global y creará una variable para nosotros allí. Eso significa que se deben hacer verificaciones adicionales. Esto afectará el rendimiento de la aplicación.


Ahora escribamos la misma función en modo estricto.

"use strict"
function getname(){
    name = "Stack Overflow"; // Not using var keyword
    return name;
}
getname();
console.log(name); 

Nosotras obtendremos el siguiente error.

Uncaught ReferenceError: name is not defined
at getname (<anonymous>:3:15)
at <anonymous>:6:5

Aquí, el compilador arroja el error de referencia. En modo estricto, el compilador no nos permite usar la variable sin declararla. Por lo tanto, se pueden evitar las pérdidas de memoria. Además, podemos escribir código más optimizado.

4
Pang 9 jul. 2019 a las 06:01

use strict es una forma de hacer que su código sea más seguro, porque no puede usar funciones peligrosas que no funcionen como espera. Y, como se escribió anteriormente, hace que el código sea más estricto.

11
SethO 13 ene. 2020 a las 14:56

Normalmente, JavaScript no sigue reglas estrictas, por lo tanto, aumenta las posibilidades de errores. Después de usar "use strict", el código JavaScript debe seguir un conjunto estricto de reglas como en otros lenguajes de programación como el uso de terminadores, declaración antes de la inicialización, etc.

Si se utiliza "use strict", el código debe escribirse siguiendo un conjunto estricto de reglas, lo que disminuye las posibilidades de errores y ambigüedades.

11
Pang 4 ene. 2019 a las 02:04

Use Strict se usa para mostrar errores comunes y repetidos para que se maneje de manera diferente y cambie la forma en que se ejecuta el script java, tales cambios son:

  • Previene globals accidentales

  • Sin duplicados

  • Elimina con

  • Elimina esta coerción.

  • Eval más seguro ()

  • Errores para inmutables

También puede leer esto artículo para los detalles

11
Wesam 17 oct. 2016 a las 14:09

El modo "estricto" de JavaScript se introdujo en ECMAScript 5.

(function() {
  "use strict";
  your code...
})();

Escribir "use strict"; en la parte superior de su archivo JS enciende estrictamente comprobación de sintaxis Realiza las siguientes tareas para nosotros:

  1. muestra un error si intenta asignar a una variable no declarada

  2. evita que sobrescriba las bibliotecas clave del sistema JS

  3. prohíbe algunas características de lenguaje inseguras o propensas a errores

use strict también funciona dentro de funciones individuales. Siempre es una mejor práctica incluir use strict en su código.

Problema de compatibilidad del navegador: las directivas de "uso" están destinadas a ser compatibles con versiones anteriores. Los navegadores que no los admitan solo verán un literal de cadena que ya no se hace referencia. Entonces, lo pasarán por alto y seguirán adelante.

12
jkdev 6 feb. 2019 a las 09:40

"uso estricto"; es el esfuerzo de ECMA para hacer que JavaScript sea un poco más robusto. Trae a JS un intento de hacerlo al menos un poco "estricto" (otros idiomas implementan reglas estrictas desde los años 90). En realidad, "obliga" a los desarrolladores de JavaScript a seguir algún tipo de mejores prácticas de codificación. Aún así, JavaScript es muy frágil. No existen variables tipeadas, métodos tipeados, etc. Recomiendo a los desarrolladores de JavaScript que aprendan un lenguaje más robusto como Java o ActionScript3 e implementen las mismas mejores prácticas en su código JavaScript, funcionará mejor y será más fácil. depurar.

12
hologram 14 jun. 2016 a las 23:18

Tenga en cuenta que use strict se introdujo en EcmaScript 5 y se mantuvo desde entonces.

A continuación se detallan las condiciones para activar el modo estricto en ES6 y ES7:

  • El código global es un código de modo estricto si comienza con un Prólogo de directiva que contiene una Directiva de uso estricto (consulte 14.1.1).
  • El código del módulo es siempre un código de modo estricto.
  • Todas las partes de una ClassDeclaration o una ClassExpression son códigos de modo estrictos.
  • El código de evaluación es un código de modo estricto si comienza con un Prólogo de directiva que contiene una Directiva de uso estricto o si la llamada a evaluación es una evaluación directa (ver 12.3.4.1) que está contenida en un código de modo estricto.
  • El código de función es un código de modo estricto si la Declaración de función, Expresión de función, Declaración de generador, Expresión de generador, Definición de método o Función de flecha asociada está contenida en el código de modo estricto o si el código que produce el valor de la función [[ La ranura interna ECMAScriptCode]] comienza con un Prólogo de directiva que contiene una Directiva de uso estricto.
  • El código de función que se proporciona como argumentos para los constructores de función y generador integrados es un código de modo estricto si el último argumento es una Cadena que cuando se procesa es un FunctionBody que comienza con un Prólogo directivo que contiene una Directiva de uso estricto.
19
Oriol 12 abr. 2016 a las 00:25

Pequeños ejemplos para comparar:

Modo no estricto:

for (i of [1,2,3]) console.log(i)
    
// output:
// 1
// 2
// 3

Modo estricto:

'use strict';
for (i of [1,2,3]) console.log(i)

// output:
// Uncaught ReferenceError: i is not defined

Modo no estricto:

String.prototype.test = function () {
  console.log(typeof this === 'string');
};

'a'.test();

// output
// false
String.prototype.test = function () {
  'use strict';
  
  console.log(typeof this === 'string');
};

'a'.test();

// output
// true
26
Tân 18 nov. 2018 a las 16:31

Hay una buena charla de algunas personas que estaban en el comité ECMAScript: Cambios a JavaScript, Parte 1: ECMAScript 5 " sobre cómo el uso incremental del conmutador "use strict" permite a los implementadores de JavaScript limpiar muchas de las características peligrosas de JavaScript sin romper repentinamente todos los sitios web del mundo.

Por supuesto, también habla sobre cuáles son muchas de esas características erróneas y cómo ECMAScript 5 las soluciona.

31
FutureNerd 29 mar. 2014 a las 19:39

"use strict" hace que el código JavaScript se ejecute en modo estricto , lo que básicamente significa que todo debe definirse antes de su uso. La razón principal para usar el modo estricto es evitar usos globales accidentales de métodos indefinidos.

También en modo estricto, las cosas se ejecutan más rápido, algunas advertencias o advertencias silenciosas arrojan errores fatales, es mejor usarlo siempre para hacer un código más ordenado.

"use strict" es ampliamente necesario para usarse en ECMA5, en ECMA6 es parte de JavaScript por defecto , por lo que no es necesario agregarlo si está usando ES6.

Mire estas declaraciones y ejemplos de MDN:

La directiva de "uso estricto"
La directiva de "uso estricto" es nueva en JavaScript 1.8.5 (ECMAScript versión 5). No es una declaración, sino un expresión literal, ignorada por versiones anteriores de JavaScript. los El propósito de "uso estricto" es indicar que el código debe ser ejecutado en "modo estricto". Con el modo estricto, no puede, por ejemplo, utilizar variables no declaradas

Ejemplos de uso de "uso estricto":
Modo estricto para funciones: del mismo modo, invocar el modo estricto para un función, poner la declaración exacta "uso estricto"; (o 'use estricto';) en El cuerpo de la función antes de cualquier otra declaración.

1) modo estricto en funciones

 function strict() {
     // Function-level strict mode syntax
     'use strict';
     function nested() { return 'And so am I!'; }
     return "Hi!  I'm a strict mode function!  " + nested();
 }
 function notStrict() { return "I'm not strict."; }

 console.log(strict(), notStrict());

2) modo estricto de script completo

'use strict';
var v = "Hi! I'm a strict mode script!";
console.log(v);

3) Asignación a un archivo global no editable

'use strict';

// Assignment to a non-writable global
var undefined = 5; // throws a TypeError
var Infinity = 5; // throws a TypeError

// Assignment to a non-writable property
var obj1 = {};
Object.defineProperty(obj1, 'x', { value: 42, writable: false });
obj1.x = 9; // throws a TypeError

// Assignment to a getter-only property
var obj2 = { get x() { return 17; } };
obj2.x = 5; // throws a TypeError

// Assignment to a new property on a non-extensible object.
var fixed = {};
Object.preventExtensions(fixed);
fixed.newProp = 'ohai'; // throws a TypeError

Puede leer más en MDN.

37
Palec 30 ago. 2018 a las 15:16

Cita de w3schools:

La Directiva de "uso estricto"

La directiva "use estricto" es nueva en JavaScript 1.8.5 (versión 5 de ECMAScript).

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

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

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

¿Por qué modo estricto?

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

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

Como ejemplo, en JavaScript normal, escribir mal un nombre de variable crea una nueva variable global. En modo estricto, esto arrojará un error, haciendo imposible crear accidentalmente una variable global.

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

En modo estricto, cualquier asignación a una propiedad no editable, una propiedad de obtención, una propiedad no existente, una variable no existente o un objeto no existente, arrojará un error.

Consulte http://www.w3schools.com/js/js_strict.asp para saber más

42
Shog9 13 ago. 2018 a las 03:15

Incluir use strict al comienzo de todos sus archivos JavaScript sensibles desde este punto es una pequeña forma de ser un mejor programador de JavaScript y evitar que las variables aleatorias se vuelvan globales y las cosas cambien en silencio.

46
Willi Mentzel 25 feb. 2016 a las 15:55

"Usar estricto"; es un seguro que el programador no usará las propiedades sueltas o malas de JavaScript. Es una guía, al igual que una regla te ayudará a hacer líneas rectas. "Usar estricto" lo ayudará a hacer "codificación directa".

Aquellos que prefieren no usar reglas para hacer sus líneas rectas generalmente terminan en esas páginas pidiendo a otros que depuren su código.

Créame. La sobrecarga es insignificante en comparación con el código mal diseñado. Doug Crockford, quien ha sido senior Desarrollador de JavaScript durante varios años, tiene una publicación muy interesante aquí. Personalmente, me gusta volver a su sitio todo el tiempo para asegurarme de no olvidar mi buena práctica.

La práctica moderna de JavaScript siempre debe evocar el "Uso estricto"; pragma. La única razón por la que el Grupo ECMA ha hecho que el modo "estricto" sea opcional es permitir que los codificadores con menos experiencia tengan acceso a JavaScript y darles tiempo para adaptarse a las nuevas y más seguras prácticas de codificación.

52
Peter Mortensen 26 oct. 2014 a las 10:34

El modo estricto realiza varios cambios en la semántica de JavaScript normal:

  • elimina algunos errores silenciosos de JavaScript cambiándolos arrojar errores.

  • corrige errores que dificultan JavaScript motores para realizar optimizaciones.

  • prohíbe que se defina cierta sintaxis en el futuro versiones de ECMAScript.

Para obtener más información, visite Strict Mode- Javascript

53
alexyorke 29 oct. 2014 a las 17:34

Si utiliza un navegador lanzado en el último año, lo más probable es que sea compatible con el modo JavaScript Strict. Solo los navegadores más antiguos antes de que ECMAScript 5 se convirtiera en el estándar actual no lo admiten.

Las comillas alrededor del comando aseguran que el código seguirá funcionando también en los navegadores más antiguos (aunque las cosas que generan un error de sintaxis en modo estricto generalmente solo causarán un mal funcionamiento del script de alguna manera difícil de detectar en esos navegadores más antiguos).

62
Stephen 10 mar. 2012 a las 03:31

Me gustaría ofrecer una respuesta algo más fundada que complemente las otras respuestas. Esperaba editar la respuesta más popular, pero fallé. Traté de hacerlo lo más completo y completo posible.

Puede consultar la documentación MDN para obtener más información.

"use strict" una directiva introducida en ECMAScript 5.

Las directivas son similares a las declaraciones, pero diferentes.

  • use strict no contiene palabras clave: la directiva es una declaración de expresión simple, que consiste en un literal de cadena especial (entre comillas simples o dobles). Los motores de JavaScript, que no implementan ECMAScript 5, simplemente ven una declaración de expresión sin efectos secundarios. Se espera que las futuras versiones de los estándares ECMAScript introduzcan use como una palabra clave real; las citas se volverían obsoletas.
  • use strict se puede usar solo al comienzo de un script o de una función, es decir, debe preceder a cualquier otra declaración (real). No tiene que ser la primera instrucción en un script de función: puede estar precedido por otras expresiones de instrucción que consisten en literales de cadena (y las implementaciones de JavaScript pueden tratarlas como directivas específicas de implementación). Las declaraciones de literales de cadena, que siguen a una primera declaración real (en un script o función) son declaraciones de expresión simple. Los intérpretes no deben interpretarlos como directivas y no tienen ningún efecto.

La directiva use strict indica que el siguiente código (en un script o una función) es un código estricto. El código en el nivel más alto de un script (código que no está en una función) se considera código estricto cuando el script contiene una directiva use strict. El contenido de una función se considera código estricto cuando la función misma se define en un código estricto o cuando la función contiene una directiva use strict. El código que se pasa a un método eval() se considera código estricto cuando se llamó a eval() desde un código estricto o contiene la propia directiva use strict.

El modo estricto de ECMAScript 5 es un subconjunto restringido del lenguaje JavaScript, que elimina los déficits relevantes del lenguaje y presenta una verificación de errores más estricta y una mayor seguridad. A continuación se enumeran las diferencias entre el modo estricto y el modo normal (de los cuales los tres primeros son particularmente importantes):

  • No puede usar la declaración with - en modo estricto.
  • En modo estricto, todas las variables deben declararse: si asigna un valor a un identificador que no ha sido declarado como variable, función, parámetro de función, parámetro de cláusula catch o propiedad del Object global, obtendrá a ReferenceError. En modo normal, el identificador se declara implícitamente como una variable global (como una propiedad del Object global)
  • En modo estricto, la palabra clave this tiene el valor undefined en funciones que se invocaron como funciones (no como métodos). (En modo normal, this siempre apunta al Object global). Esta diferencia se puede usar para probar si una implementación admite el modo estricto:
var hasStrictMode = (function() { "use strict"; return this===undefined }());
  • Además, cuando se invoca una función con call() o apply en modo estricto, entonces this es exactamente el valor del primer argumento de la invocación call() o apply() . (En modo normal, null y undefined se reemplazan por el Object global y los valores, que no son objetos, se convierten en objetos).

  • En modo estricto, obtendrá TypeError cuando intente asignar propiedades de solo lectura o definir nuevas propiedades para un objeto no extensible. (En modo normal, ambos simplemente fallan sin mensaje de error).

  • En modo estricto, al pasar el código a eval(), no puede declarar o definir variables o funciones en el ámbito de la persona que llama (como puede hacerlo en modo normal). En cambio, se crea un nuevo alcance para eval() y las variables y funciones están dentro de ese alcance. Ese alcance se destruye después de que eval() finaliza la ejecución.
  • En modo estricto, el objeto-argumento de una función contiene una copia estática de los valores, que se pasan a esa función. En modo normal, el objeto-argumentos tiene un comportamiento algo "mágico": los elementos de la matriz y los parámetros de la función nombrada hacen referencia al mismo valor.
  • En modo estricto, obtendrá un SyntaxError cuando el operador delete esté seguido de un identificador no calificado (una variable, función o parámetro de función). En modo normal, la expresión delete no haría nada y se evalúa como false.
  • En modo estricto, obtendrá un TypeError cuando intente eliminar una propiedad no configurable. (En modo normal, el intento simplemente falla y la expresión delete se evalúa como false).
  • En modo estricto, se considera un error sintáctico cuando intenta definir varias propiedades con el mismo nombre para un objeto literal. (En modo normal no hay error).
  • En modo estricto, se considera un error sintáctico cuando una declaración de función tiene múltiples parámetros con el mismo nombre. (En modo normal no hay error).
  • En modo estricto, los literales octales no están permitidos (estos son literales que comienzan con 0x. (En modo normal, algunas implementaciones permiten literales octales).
  • En modo estricto, los identificadores eval y arguments se tratan como palabras clave. No puede cambiar su valor, no puede asignarles un valor y no puede usarlos como nombres para variables, funciones, parámetros de función o identificadores de un bloque catch.
  • En modo estricto hay más restricciones sobre las posibilidades de examinar la pila de llamadas. arguments.caller y arguments.callee provocan un TypeError en una función en modo estricto. Además, algunas propiedades de llamadas y argumentos de las funciones en modo estricto provocan un TypeError cuando intenta leerlas.
95
Ely 12 jul. 2015 a las 20:31

Recomiendo encarecidamente a cada desarrollador que comience a usar el modo estricto ahora. Hay suficientes navegadores que lo admiten que el modo estricto legítimamente nos ayudará a salvarnos de errores que ni siquiera sabíamos que estaban en su código.

Aparentemente, en la etapa inicial habrá errores que nunca hemos encontrado antes. Para obtener el beneficio completo, debemos hacer las pruebas adecuadas después de cambiar al modo estricto para asegurarnos de que hemos captado todo. Definitivamente no solo agregamos use strict en nuestro código y asumimos que no hay errores. Entonces, el abandono es que es hora de comenzar a usar esta función de lenguaje increíblemente útil para escribir un mejor código.

Por ejemplo,

var person = {
    name : 'xyz',
    position : 'abc',
    fullname : function () {  "use strict"; return this.name; }
};

JSLint es un depurador escrito por Douglas Crockford. Simplemente pegue su script, y escaneará rápidamente en busca de problemas y errores notables en su código.

137
Willi Mentzel 25 feb. 2016 a las 15:54

Una advertencia, todos ustedes, programadores de carga dura: ¡aplicar "use strict" al código existente puede ser peligroso! Esta cosa no es una calcomanía para sentirse feliz y feliz que puede colocar en el código para que sea 'mejor'. Con el pragma "use strict", el navegador de repente LANZARÁ excepciones en lugares aleatorios que nunca arrojó antes solo porque en ese punto estás haciendo algo que JavaScript predeterminado / suelto permite felizmente, ¡pero aborrece estrictamente JavaScript! Es posible que tenga infracciones de rigurosidad ocultas en llamadas poco utilizadas en su código que solo arrojarán una excepción cuando finalmente se ejecuten, por ejemplo, en el entorno de producción que usan sus clientes de pago.

Si va a dar el paso, es una buena idea aplicar "use strict" junto con pruebas unitarias completas y una tarea de compilación JSHint estrictamente configurada que le dará cierta confianza de que no hay un rincón oscuro de su módulo que explote arriba horriblemente solo porque has activado el modo estricto. O, hey, aquí hay otra opción: simplemente no agregue "use strict" a ninguno de sus códigos heredados, probablemente sea más seguro de esa manera, honestamente. DEFINITIVAMENTE NO agregue "use strict" a ningún módulo que no posea o mantenga, como los módulos de terceros.

Creo que aunque es un animal enjaulado mortal, "use strict" puede ser algo bueno, pero tienes que hacerlo bien. El mejor momento para ser estricto es cuando su proyecto es totalmente nuevo y comienza desde cero. Configure JSHint/JSLint con todas las advertencias y opciones tan ajustadas como su equipo pueda soportar, obtenga un buen sistema de construcción / prueba / afirmación del día como Grunt+Karma+Chai, y solo ENTONCES comience a marcar todos sus módulos nuevos como "use strict". Esté preparado para curar muchos errores y advertencias molestos. Asegúrese de que todos comprendan la gravedad configurando la compilación para FALLAR si JSHint/JSLint produce alguna violación.

Mi proyecto no era un proyecto nuevo cuando adopté "use strict". Como resultado, mi IDE está lleno de marcas rojas porque no tengo "use strict" en la mitad de mis módulos, y JSHint se queja de eso. Es un recordatorio para mí sobre la refactorización que debo hacer en el futuro. Mi objetivo es estar libre de marcas rojas debido a todas mis declaraciones faltantes de "use strict", pero eso está a años de distancia.

206
Ataur Rahman Munna 16 oct. 2016 a las 09:10

Si a las personas les preocupa usar use strict, puede valer la pena consultar este artículo:

ECMAScript 5 ' Soporte de modo estricto en los navegadores. ¿Qué significa esto?
NovoGeek.com - el weblog de Krishna

Habla sobre el soporte del navegador, pero lo más importante es cómo tratarlo de manera segura:

function isStrictMode(){
    return !this;
} 
/*
   returns false, since 'this' refers to global object and 
   '!this' becomes false
*/

function isStrictMode(){   
    "use strict";
    return !this;
} 
/* 
   returns true, since in strict mode the keyword 'this'
   does not refer to global object, unlike traditional JS. 
   So here, 'this' is 'undefined' and '!this' becomes true.
*/
408
Community 22 ene. 2018 a las 11:13

La declaración "use strict"; instruye al navegador a usar el modo Estricto, que es un conjunto de características reducido y más seguro de JavaScript.

Lista de características (no exhaustivas)

  1. No permite variables globales. (Captura faltan var declaraciones y errores tipográficos en nombres de variables)

  2. Las tareas fallidas silenciosas arrojarán errores en modo estricto (asignando NaN = 5;)

  3. Los intentos de eliminar propiedades no recuperables arrojarán (delete Object.prototype)

  4. Requiere que todos los nombres de propiedad en un objeto literal sean únicos (var x = {x1: "1", x1: "2"})

  5. Los nombres de los parámetros de la función deben ser únicos (function sum (x, x) {...})

  6. Prohíbe la sintaxis octal (var x = 023; algunos desarrolladores suponen erróneamente que un cero anterior no hace nada para cambiar el número).

  7. Prohíbe la palabra clave with

  8. eval en modo estricto no introduce nuevas variables

  9. Prohíbe eliminar nombres simples (delete x;)

  10. Prohíbe la vinculación o asignación de los nombres eval y arguments en cualquier forma

  11. El modo estricto no alias las propiedades del objeto arguments con los parámetros formales. (es decir, en function sum (a,b) { return arguments[0] + b;} Esto funciona porque arguments[0] está vinculado a a y así sucesivamente).

  12. arguments.callee no es compatible

[Ref: Modo estricto, Desarrollador de Mozilla Red ]

642
gprasant 22 ene. 2016 a las 18:30

Es una nueva característica de ECMAScript 5. John Resig escribió un buen resumen de la misma.

Es solo una cadena que coloca en sus archivos JavaScript (ya sea en la parte superior de su archivo o dentro de una función) que se ve así:

"use strict";

Ponerlo en su código ahora no debería causar ningún problema con los navegadores actuales, ya que es solo una cadena. Puede causar problemas con su código en el futuro si su código viola el pragma. Por ejemplo, si actualmente tiene foo = "bar" sin definir foo primero, su código comenzará a fallar ... lo cual es algo bueno en mi opinión.

1235
Peter Mortensen 26 oct. 2014 a las 10:31