For a long time, JavaScript evolved without compatibility issues. New features were added to the language while old functionality didnât change.
That had the benefit of never breaking existing code. But the downside was that any mistake or an imperfect decision made by JavaScriptâs creators got stuck in the language forever.
This was the case until 2009 when ECMAScript 5 (ES5) appeared. It added new features to the language and modified some of the existing ones. To keep the old code working, most such modifications are off by default. You need to explicitly enable them with a special directive: "use strict".
âuse strictâ
The directive looks like a string: "use strict" or 'use strict'. When it is located at the top of a script, the whole script works the âmodernâ way.
For example:
"use strict";
// this code works the modern way
...
Quite soon weâre going to learn functions (a way to group commands), so letâs note in advance that "use strict" can be put at the beginning of a function. Doing that enables strict mode in that function only. But usually people use it for the whole script.
Please make sure that "use strict" is at the top of your scripts, otherwise strict mode may not be enabled.
Strict mode isnât enabled here:
alert("some code");
// "use strict" below is ignored--it must be at the top
"use strict";
// strict mode is not activated
Only comments may appear above "use strict".
use strictThere is no directive like "no use strict" that reverts the engine to old behavior.
Once we enter strict mode, thereâs no going back.
Browser console
When you use a developer console to run code, please note that it doesnât use strict by default.
Sometimes, when use strict makes a difference, youâll get incorrect results.
So, how to actually use strict in the console?
First, you can try to press Shift+Enter to input multiple lines, and put use strict on top, like this:
'use strict'; <Shift+Enter for a newline>
// ...your code
<Enter to run>
It works in most browsers, namely Firefox and Chrome.
If it doesnât, e.g. in an old browser, thereâs an ugly, but reliable way to ensure use strict. Put it inside this kind of wrapper:
(function() {
'use strict';
// ...your code here...
})()
Should we âuse strictâ?
The question may sound obvious, but itâs not so.
One could recommend to start scripts with "use strict"⦠But you know whatâs cool?
Modern JavaScript supports âclassesâ and âmodulesâ â advanced language structures (weâll surely get to them), that enable use strict automatically. So we donât need to add the "use strict" directive, if we use them.
So, for now "use strict"; is a welcome guest at the top of your scripts. Later, when your code is all in classes and modules, you may omit it.
As of now, weâve got to know about use strict in general.
In the next chapters, as we learn language features, weâll see the differences between the strict and old modes. Luckily, there arenât many and they actually make our lives better.
All examples in this tutorial assume strict mode unless (very rarely) specified otherwise.
Comments
<code>tag, for several lines â wrap them in<pre>tag, for more than 10 lines â use a sandbox (plnkr, jsbin, codepenâ¦)