strict mode in JavaScript

ECMAScript 5 introduced the concept of "strict mode" . It allows you to place a program, or a function, in a "strict" operating context. This strict context prevents certain actions from being taken and throws more exceptions . Its main purpose is to do more checking.

How 'strict mode'

As an example, in normal JavaScript, mistyping a variable name creates a new global variable. In strict mode , this will throw an error, making it impossible to accidentally create a global variable .

The following script will work because it is non strict mode.

str = "Hello World"; document.write(str);

The following script won't work because it is in strict mode.

'use strict'; str = "Hello World"; // => Throw a reference error document.write(str);

The above script will throw a reference error because variable str is used without declaring it.

So, how to correct it?

'use strict'; var str = "Hello World"; document.write(str);

Browser Support

The major browsers now implement strict mode. However, don't blindly depend on it since there still are numerous Browser versions used in the wild that only have partial support for strict mode or do not support it at all (e.g. Internet Explorer below version 10!). Strict mode changes semantics. Relying on those changes will cause mistakes and errors in browsers which don't implement strict mode

What happens if browsers doesn't support Strict Mode?

Nothing happened. The "use strict" directive is simply a string statement that will be ignored by JavaScript engines that don't support Strict Mode. This allows safe cross-browser use of Strict Mode syntax while ensuring built-in forward compatibility with browsers that might support Strict Mode in the future.

Advantage of using strict mode:

  1. Eliminate JavaScript silent errors by throwing error.

  2. Fixes mistake that make it difficult for JavaScript engine to perform optimisation.

  3. Make code run faster sometime than identical code that's not in strict mode.

  4. Prohibits some syntax likely to be defined in future version of ECMAScript.