webentwicklung-frage-antwort-db.com.de

Gibt es eine Möglichkeit zu überprüfen, ob der strikte Modus erzwungen wird?

Gibt es trotzdem zu prüfen, ob der strikte Modus 'use strict' erzwungen wird, und wir möchten einen anderen Code für den strikten Modus und anderen Code für den nicht strengen Modus ausführen. Suche nach Funktion wie isStrictMode();//boolean

58
Deepak Patil

Die Tatsache, dass this innerhalb einer Funktion, die im globalen Kontext aufgerufen wird, nicht auf das globale Objekt verweist, kann zum Erkennen des strengen Modus verwendet werden:

var isStrict = (function() { return !this; })();

Demo:

> echo '"use strict"; var isStrict = (function() { return !this; })(); console.log(isStrict);' | node
true
> echo 'var isStrict = (function() { return !this; })(); console.log(isStrict);' | node
false
80
ThiefMaster
function isStrictMode() {
    try{var o={p:1,p:2};}catch(E){return true;}
    return false;
}

Sieht aus, als hätten Sie bereits eine Antwort erhalten. Aber ich habe schon etwas Code geschrieben. Also hier

23
Thalaivar

Ich bevorzuge etwas, das keine Ausnahmen verwendet und in jedem Kontext funktioniert, nicht nur in einem globalen Kontext:

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

Es verwendet die Tatsache, dass im strengen Modus eval keine neue Variable in den äußeren Kontext eingeführt wird.

20
noseratio

Ja, this ist 'undefined' innerhalb einer globalen Methode, wenn Sie sich im strikten Modus befinden.

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

Eleganter Weg: Wenn "this" ein Objekt ist, konvertieren Sie es in 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 )
}
1
user6748331

Eine andere Lösung kann die Tatsache ausnutzen, dass im strikten Modus in eval deklarierte Variablen nicht am äußeren Gültigkeitsbereich angezeigt werden

function isStrict() {
    var x=true;
    eval("var x=false");
    return x;
}
0
Yaron U.