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
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
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
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.
Ja, this
ist 'undefined'
innerhalb einer globalen Methode, wenn Sie sich im strikten Modus befinden.
function isStrictMode() {
return (typeof this == 'undefined');
}
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 )
}
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;
}