有没有办法检查严格模式是否被强制执行?

有没有办法检查是否严格模式使用严格执行,我们要执行不同的代码严格模式和其他代码非严格模式。 寻找像isStrictMode();//boolean

事实上,在全局上下文中调用的函数内部不会指向全局对象,可以用来检测严格模式:

 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 
 function isStrictMode() { try{var o={p:1,p:2};}catch(E){return true;} return false; } 

看起来你已经有了答案。 但是我已经写了一些代码。 所以在这里

我更喜欢一些不使用例外的东西,而且在任何情况下都可以使用,不仅是全球性的:

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

它使用严格模式eval不会在外部环境中引入新variables的事实。

是的,在严格模式下, this是全局方法中的'undefined'

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

更优雅的方式:如果“this”是对象,则将其转换为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 ) }