有没有什么办法来检查,如果严格模式被执行?(Is there any way to check if

2019-06-24 05:46发布

反正是有检查,如果严格模式“使用严格的”强制执行,我们要进行严格的模式和其他代码的非严格模式下执行不同的代码。 寻找类似功能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?