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
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
Antworten:
Die Tatsache, dass this
innerhalb einer im globalen Kontext aufgerufenen Funktion nicht auf das globale Objekt verweist, kann verwendet werden, um den strengen Modus zu erkennen:
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
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.
--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
Ja, this
befindet sich 'undefined'
innerhalb einer globalen Methode, wenn Sie sich im strengen Modus befinden.
function isStrictMode() {
return (typeof this == 'undefined');
}
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 )
}
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.
return this === undefined
: Sie vergleicht sie nicht mit dem globalen Objekt, sondern prüft nur, ob siethis
vorhanden ist.