有没有办法检查严格模式是否被强制执行?
有没有办法检查是否严格模式使用严格执行,我们要执行不同的代码严格模式和其他代码非严格模式。 寻找像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 ) }