Gibt es trotzdem zu prüfen, ob der strikte Modus 'Use strict' erzwungen wird, und wir wollen anderen Code für den strikten Modus und anderen Code für den nicht strikten Modus ausführen. der Suche nach Funktion wie isStrictMode();//boolean
Gibt es eine Möglichkeit zu überprüfen, ob der strikte Modus erzwungen wird?
Antwort
Die Tatsache, dass this
in einer Funktion im globalen Kontext genannt wird nicht auf das globale Objekt Punkt verwendet werden Strict-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
Yep, this
ist 'undefined'
innerhalb einer globalen Methode, wenn Sie im strikten Modus sind.
function isStrictMode() {
return (typeof this == 'undefined');
}
function isStrictMode() {
try{var o={p:1,p:2};}catch(E){return true;}
return false;
}
Sieht aus, als hättest du schon eine Antwort bekommen. Aber ich habe schon etwas Code geschrieben. Also hier
Das ist besser als Mehdis Antwort, denn sie wird überall funktionieren, nicht nur im globalen Rahmen. Ups. :) – mgol
Dies führt zu einem Syntaxfehler, der auftritt, bevor der Code ausgeführt wird, damit er nicht abgefangen werden kann ... – skerit
Dies funktioniert nicht in ES6, da die Überprüfung entfernt wird, um berechnete Eigenschaftsnamen zuzulassen. –
Ich ziehe es etwas, das keine Ausnahme nicht verwendet und arbeitet in jedem Kontext, nicht nur global:
var mode = (eval("var __temp = null"), (typeof __temp === "undefined")) ?
"strict":
"non-strict";
Es nutzt die Tatsache, die im strikten Modus eval
nicht eine neue Variable einführt in der äußere Kontext.
Nur aus Neugier, wie kugelsicher ist das 2015, jetzt da ES6 da ist? –
Ich verifiziere, dass es in ES6 auf neuesten Chrome und Nodejs funktioniert. –
Elegant und funktionierend, danke! – rudyryk
eleganteren Weg: wenn "das" Objekt ist, wandelt es in wahre
"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)
}
Großen. Das ist elegant und funktioniert überall. –
Zur Verdeutlichung ist die return-Anweisung äquivalent zu 'return this === undefined', es wird nicht mit dem globalen Objekt verglichen, es wird nur überprüft, ob' this' existiert. – aljgom