Есть ли способ проверить, соблюдается ли строгий режим?



есть ли в любом случае , чтобы проверить, применяется ли строгий режим "использовать строгий", и мы хотим выполнить другой код для строгого режима и другой код для нестрогого режима.
Ищу функцию, как isStrictMode();//boolean

378   6  

6 ответов:

дело в том, что 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
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 не вводит новую переменную во внешний контекст.

Да, this и 'undefined' в глобальном методе, когда вы находитесь в строгом режиме.

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

более элегантный способ: если" это " является объектом, преобразуйте его в 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 )
}

другое решение, может воспользоваться тем, что в строгом режиме, переменные, объявленные в eval не выставляются на внешнюю область

function isStrict() {
    var x=true;
    eval("var x=false");
    return x;
}

Comments

    Ничего не найдено.