Gibt es sowieso zu überprüfen, ob der strikte Modus 'use strict' erzwungen wird, und wir möchten anderen Code für den strengen Modus und anderen Code für den nicht strengen Modus ausführen. Auf der Suche nach Funktion wieisStrictMode();//boolean
javascript
ecmascript-5
ecma262
strict-mode
Deepak Patil
quelle
quelle
return this === undefined
: Sie vergleicht sie nicht mit dem globalen Objekt, sondern prüft nur, ob siethis
vorhanden ist.Ich bevorzuge etwas, das keine Ausnahmen verwendet und in jedem Kontext funktioniert, nicht nur in einem globalen:
var mode = (eval("var __temp = null"), (typeof __temp === "undefined")) ? "strict": "non-strict";
Es nutzt die Tatsache, dass im strengen Modus
eval
keine neue Variable in den äußeren Kontext eingeführt wird.quelle
--use_strict
Flag.function isStrictMode() { try{var o={p:1,p:2};}catch(E){return true;} return false; }
Sieht so aus, als hättest du schon eine Antwort bekommen. Aber ich habe schon Code geschrieben. Also hier
quelle
Ja,
this
befindet sich'undefined'
innerhalb einer globalen Methode, wenn Sie sich im strengen Modus befinden.function isStrictMode() { return (typeof this == 'undefined'); }
quelle
Eleganter Weg: Wenn "dies" ein Objekt ist, konvertieren Sie es in "wahr"
"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 ) }
quelle
Warnung + universelle Lösung
Viele Antworten hier deklarieren eine Funktion, die auf strengen Modus überprüft werden soll, aber eine solche Funktion sagt nichts über den Bereich aus, von dem aus sie aufgerufen wurde, sondern nur über den Bereich, in dem sie deklariert wurde!
function isStrict() { return !this; }; function test(){ 'use strict'; console.log(isStrict()); // false }
Gleiches gilt für Cross-Script-Tag-Aufrufe.
Wenn Sie also nach dem strengen Modus suchen müssen, müssen Sie den gesamten Scheck in diesem Bereich schreiben:
var isStrict = true; eval("var isStrict = false");
Im Gegensatz zur am besten bewerteten Antwort funktioniert diese Überprüfung durch Yaron nicht nur im globalen Bereich.
quelle
Eine andere Lösung kann die Tatsache ausnutzen, dass im strengen Modus deklarierte Variablen
eval
nicht im äußeren Bereich verfügbar gemacht werdenfunction isStrict() { var x=true; eval("var x=false"); return x; }
quelle