反正是有检查,如果严格模式“使用严格的”强制执行,我们要进行严格的模式和其他代码的非严格模式下执行不同的代码。 寻找类似功能isStrictMode();//boolean
Answer 1:
这事实上this
名为在全球范围内的功能不会指向全局对象可用于检测严格模式:
var isStrict = (function() { return !this; })();
演示:
> 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 2:
function isStrictMode() {
try{var o={p:1,p:2};}catch(E){return true;}
return false;
}
看起来你已经有了答案。 但是,我已经写了一些代码。 所以在这里
Answer 3:
我喜欢的东西并不在任何情况下使用异常和作品,不仅是全球性的:
var mode = (eval("var __temp = null"), (typeof __temp === "undefined")) ?
"strict":
"non-strict";
它使用严格模式的事实eval
不引入新的变量到外部环境。
Answer 4:
是的, this
是'undefined'
一个全球性的方法中,当你在严格模式。
function isStrictMode() {
return (typeof this == 'undefined');
}
Answer 5:
更优雅的方式:如果“这”对象,将其转换为真正的
"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 6:
另一种解决方案可以利用以下事实:在严格模式,在声明的变量优点eval
不暴露在外范围
function isStrict() {
var x=true;
eval("var x=false");
return x;
}
文章来源: Is there any way to check if strict mode is enforced?