JavaScript use strict explained

Posted on February 03, 2021


The "use strict" directive is added since ES5 in order to help you write JavaScript code that is less prone to error. For example, you can’t initialize a variable that’s not yet defined with the strict mode active:

"use strict";
name = "Jack";

To active the strict mode you need to add the "use strict" string expression right at the first line of your code. Adding the directive may be ignored by JavaScript:

console.log("Hello");
("use strict"); // ignored
name = "Jack"; // doesn't throw an error

Is use strict necessary?

The strict mode is no longer required since the release of ES2015, which fixes most of JavaScript’s confusing behavior with a more robust syntax. It’s just good to know because you might find it in legacy projects that still used it.

Strict mode rules

The strict mode will prohibit you from doing the following things:

You can’t use a variable before declaration:

"use strict";
name = "Jack"; // ReferenceError: name is not defined

Deleting declarations and expressions including variables, functions, and classes:

"use strict";
function greeting() {
  console.log("Hello");
}
delete greeting; //  Delete of an unqualified identifier in strict mode

Deleting an undeletable property:

"use strict";
delete Object.prototype; // Cannot delete property 'prototype' of function Object()

Using the same parameter name twice, like arg name above:

"use strict";
function x(arg, arg) {} // Duplicate parameter name not allowed in this context

Removed the with statement because it causes performance and ambiguity problems.

"use strict";
with ({}) { // Strict mode code may not include a with statement
  var name = "Jack";
} 

Octal literals are not allowed:

"use strict";
var num = 010; // Octal literals are not allowed in strict mode.

You can’t use some names for variables:

"use strict";
var eval = 7; // Unexpected eval or arguments in strict mode

The list of restricted names are:

  • eval
  • arguments
  • implements
  • interface
  • let
  • package
  • private
  • protected
  • public
  • static
  • yield

And it will include any names that will be used as keywords for future JavaScript versions.

More on JavaScript:

Grab the free JavaScript book today 👍

Learn the building blocks of JavaScript programming language like data types, functions, objects, arrays and classes.

Use the knowledge from the book to build a small but solid program.

Learn more