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
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
回答1:
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
回答2:
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
回答3:
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.
回答4:
Yep, this
is 'undefined'
within a global method when you are in strict mode.
function isStrictMode() {
return (typeof this == 'undefined');
}
回答5:
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 )
}
回答6:
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;
}