Is there any way to check if strict mode is enforced?

Is there anyway to check if strict mode 'use strict' is enforced , and we want to execute different code for strict mode and other code for non-strict mode. Looking for function like isStrictMode();//boolean

Answers:

Answer

The fact that this inside a function called in the global context will not point to the global object can be used to detect strict mode:

var isStrict = (function() { return !this; })();

Demo:

> echo '"use strict"; var isStrict = (function() { return !this; })(); console.log(isStrict);' | node
true
> echo 'var isStrict = (function() { return !this; })(); console.log(isStrict);' | node
false
Answer

I prefer something that doesn't use exceptions and works in any context, not only global one:

var mode = (eval("var __temp = null"), (typeof __temp === "undefined")) ? 
    "strict": 
    "non-strict";

It uses the fact the in strict mode eval doesn't introduce a new variable into the outer context.

Answer
function isStrictMode() {
    try{var o={p:1,p:2};}catch(E){return true;}
    return false;
}

Looks like you already got an answer. But I already wrote some code. So here

Answer

Yep, this is 'undefined' within a global method when you are in strict mode.

function isStrictMode() {
    return (typeof this == 'undefined');
}
Answer

More elegant way: if "this" is object, convert it to true

"use strict"

var strict = ( function () { return !!!this } ) ()

if ( strict ) {
    console.log ( "strict mode enabled, strict is " + strict )
} else {
    console.log ( "strict mode not defined, strict is " + strict )
}
Answer

Another solution can take advantage of the fact that in strict mode, variables declared in eval are not exposed on the outer scope

function isStrict() {
    var x=true;
    eval("var x=false");
    return x;
}
Answer

Warning + universal solution

Many answers here declare a function to check for strict mode, but such a function will tell you nothing about the scope it was called from, only the scope in which it was declared!

function isStrict() { return !this; };

function test(){
  'use strict';
  console.log(isStrict()); // false
}

Same with cross-script-tag calls.

So whenever you need to check for strict mode, you need to write the entire check in that scope:

var isStrict = true;
eval("var isStrict = false");

Unlike the most upvoted answer, this check by Yaron works not only in the global scope.

Tags

Recent Questions

Top Questions

Home Tags Terms of Service Privacy Policy DMCA Contact Us

©2020 All rights reserved.