“Strict” Mode and Quality Code

Don’t leave home without it!

Have you ever felt like the code to which you have given precious life lacks discipline and gets away with practically everything? Does its carefree, devil-may-care attitude make your lips curl and your blood boil? Do you constantly suppress a raging inferno of disapproval and indignation as a result of a swelling suspicion that the creation to which you have tirelessly donated your blood, sweat, and tears is silently undermining you at every semicolon? Not to worry — I have the topical solution for you! With one quick and easy application of “use strict” at the crown of your Javascript files, you can become the overbearing, veracious parent you’ve always aspired to be. Kiss those pesky, inaccurate, antiquated features goodbye! Thanks, ECMAscript5!

“But, why bother? It’ll learn how to become a productive, considerate contribution to society someday, right?” WRONG.

I kid, I kid. But, if you understand the value of accurate, readable, and efficient code, then the use of “strict” mode is for you!

A “strict” operating context is important and desirable for a number of reasons and can be used in the global context for the entire script or within individual functions. First, where your code could fail silently or produce a desired outcome, but with “unsafe” and syntactically inaccurate code, a more precise context will throw errors that allow you to improve your code.

For example, if a variable is declared without the use of var, let, or const within a function and the function is called, the variable then becomes a global variable, accessible outside of this function, and the function executes without throwing an error. This can produce problems down the line. However, by declaring “use strict” inside of our function, our function fails and we can correct the error.

“strict” mode used within a function

In this example, when we call “notStrict” and pass it a parameter, our function executes and returns an output despite the lack of a variable keyword before “y”. Conversely, by adding “use strict” to the top of our function, we prohibit the forgiving nature of Javascript and throw an error.

But, what do I mean by failing silently? In “sloppy” (or “normal”) mode, certain actions may not be permitted, but do not provide us with a reason by sending an error to the console. We may expect we can delete variables or assign values to ‘read-only’ properties without using ‘strict’ mode because, well, nothing happens, but errors are super helpful!

“strict” mode used in the global context

Line 3 doesn’t do much to our variable, but there are no errors thrown!

Similarly, we cannot assign a new value to x in line 8, but the code fails silently.

However, when in a “strict” operating context, we can see exactly what we are doing wrong.

Assignments to non-writable globals like undefined, NaN, Infinity, etc also throw exceptions.

“Strict” mode also prevents the duplication of parameters in a function.

When we call the “notStrictSum” function, it returns a value of 16 even though we use “x” twice in our parameters. “But, Chris — isn’t 4 + 5 + 6 = 15?” Yes, yes it is. In this context, x is defined by our first parameter (x = 4), then reassigned (x = 5), then y is assigned (y = 6). Our function then permits the execution of line 2, which returns 5 + 5 + 6.

However, we can see that our “strictSum” function throws a Syntax Error because it prohibits the use of duplicate parameters.

Additionally, “use strict” will prohibit the use of the ‘eval’ name/keyword and with(){} statements. Sorry, were you using these?

TL;DR

With that, I leave you with a nice little summary of the benefits of using “strict” mode in your Javascript files, provided by the techies over at geeksforgeeks:

Strict mode makes several changes to normal JavaScript semantics.

  • Strict mode eliminates some JavaScript silent errors by changing them to throw errors.
  • Strict mode fixes mistakes that make it difficult for JavaScript engines to perform optimizations: strict mode code can sometimes be made to run faster than identical code that’s not strict mode.
  • Strict mode prohibits some syntax likely to be defined in future versions of ECMAScript.
  • It prevents, or throws errors, when relatively “unsafe” actions are taken (such as gaining access to the global object).
  • It disables features that are confusing or poorly thought out.
  • Strict mode makes it easier to write “secure” JavaScript.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store