Skip to main content

‘Strict Mode’ in JavaScript

If you looked at some of the more recent JavaScript samples or had a look at the Windows 8 JavaScript applications, you’ve probably seen the ‘use strict’ statement before. But what is it and why use it?

By applying the ‘use strict’ statement inside your JavaScript, you are enabling Strict Mode. Strict Mode offers a set of enhancements to the JavaScript language and introduces better error-checking into your code. When you use strict mode, you cannot, for example, use implicitly declared variables, or assign a value to a read-only property, or add a property to an object that is not extensible.

Restrictions

It introduces the following restrictions to your code(source: MSDN):

Language Element Restriction
Variable Using a variable without declaring it.
Read-only property Writing to a read-only property.
Non-extensible property Adding a property to an object whose extensible attribute is set to false.
delete

Deleting a variable, a function, or an argument.

Deleting a property whose configurable attribute is set to false.

Duplicating a property Defining a property more than once in an object literal.
Duplicating a parameter name Using a parameter name more than once in a function.
Future reserved keywords Using a future reserved keyword as a variable or function name.
Octals Assigning an octal value to a numeric literal, or attempting to use an escape on an octal value.
this The value of this is not converted to the global object when it is null or undefined.
eval as an identifier The string "eval" cannot be used as an identifier (variable or function name, parameter name, and so on).
Function declared inside a statement or a block You cannot declare a function inside a statement or a block.
Variable declared inside an eval function If a variable is declared inside an eval function, it cannot be used outside that function.
Arguments as an identifier The string "arguments" cannot be used as an identifier (variable or function name, parameter name, and so on).
arguments inside a function You cannot change the values of members of the local arguments object.
arguments.callee

Not allowed.

with Not allowed.

 

Where can I use Strict Mode?

Strict Mode is part of the new EcmaScript 5 standard. For a list of browsers that already support this feature: http://caniuse.com/use-strict . But even if you have to target some browsers that not yet support this standard, I recommend start using Strict Mode today.  You’ll not get compiler errors on these browsers but it has no negative on your application and it forces you to follow a set of recommended best practices.

If you are a Windows 8 Metro style apps HTML/JS developer, Strict Mode is automatically added to the project templates in Visual Studio 11 as WinJS supports Strict Mode.

How to enable Strict Mode?

That’s the easiest part, just add the "use strict" directive to your code (don’t forget to add the quotes).

Remark: However I recommend to not apply the Strict Mode to the global scope as this will impact not only your scripts but also 3th party JavaScript libraries you include.

 

Popular posts from this blog

DevToys–A swiss army knife for developers

As a developer there are a lot of small tasks you need to do as part of your coding, debugging and testing activities.  DevToys is an offline windows app that tries to help you with these tasks. Instead of using different websites you get a fully offline experience offering help for a large list of tasks. Many tools are available. Here is the current list: Converters JSON <> YAML Timestamp Number Base Cron Parser Encoders / Decoders HTML URL Base64 Text & Image GZip JWT Decoder Formatters JSON SQL XML Generators Hash (MD5, SHA1, SHA256, SHA512) UUID 1 and 4 Lorem Ipsum Checksum Text Escape / Unescape Inspector & Case Converter Regex Tester Text Comparer XML Validator Markdown Preview Graphic Color B

Help! I accidently enabled HSTS–on localhost

I ran into an issue after accidently enabling HSTS for a website on localhost. This was not an issue for the original website that was running in IIS and had a certificate configured. But when I tried to run an Angular app a little bit later on http://localhost:4200 the browser redirected me immediately to https://localhost . Whoops! That was not what I wanted in this case. To fix it, you need to go the network settings of your browser, there are available at: chrome://net-internals/#hsts edge://net-internals/#hsts brave://net-internals/#hsts Enter ‘localhost’ in the domain textbox under the Delete domain security policies section and hit Delete . That should do the trick…

Azure DevOps/ GitHub emoji

I’m really bad at remembering emoji’s. So here is cheat sheet with all emoji’s that can be used in tools that support the github emoji markdown markup: All credits go to rcaviers who created this list.