В любом случае, нужно проверить, применяется ли строгий режим "use strict", и мы хотим выполнить другой код для строгого режима и другого кода для нестрогого режима.
Поиск функции типа isStrictMode();//boolean
Есть ли способ проверить, установлен ли строгий режим?
Ответ 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
Ответ 2
function isStrictMode() {
try{var o={p:1,p:2};}catch(E){return true;}
return false;
}
Похоже, у вас уже есть ответ. Но я уже написал код. Итак, здесь
Ответ 3
Я предпочитаю то, что не использует исключения и работает в любом контексте, а не только глобальном:
var mode = (eval("var __temp = null"), (typeof __temp === "undefined")) ?
"strict":
"non-strict";
Он использует тот факт, что в строгом режиме eval
не вводит новую переменную во внешний контекст.
Ответ 4
Yep, this
является 'undefined'
в глобальном методе, когда вы находитесь в строгом режиме.
function isStrictMode() {
return (typeof this == 'undefined');
}
Ответ 5
Более элегантный способ: если "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 )
}