Est-il possible de vérifier si le mode strict 'use strict' est appliqué, et nous voulons exécuter un code différent pour le mode strict et un autre code pour le mode non strict. Recherche d'une fonction comme isStrictMode();//boolean
Le fait que this
à l'intérieur d'une fonction appelée dans le contexte global ne pointe pas vers l'objet global peut être utilisé pour détecter le mode strict:
var isStrict = (function() { return !this; })();
Démo:
> 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;
}
On dirait que tu as déjà eu une réponse. Mais j'ai déjà écrit du code. Alors voici
Je préfère quelque chose qui n'utilise pas d'exceptions et fonctionne dans n'importe quel contexte, pas seulement global:
var mode = (eval("var __temp = null"), (typeof __temp === "undefined")) ?
"strict":
"non-strict";
Il utilise le fait qu'en mode strict eval
n'introduit pas une nouvelle variable dans le contexte externe.
Oui, this
est 'undefined'
dans une méthode globale lorsque vous êtes en mode strict.
function isStrictMode() {
return (typeof this == 'undefined');
}
Manière plus élégante: si "this" est un objet, convertissez-le en vrai
"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 )
}
Une autre solution peut tirer parti du fait qu'en mode strict, les variables déclarées dans eval
ne sont pas exposées dans l'étendue externe.
function isStrict() {
var x=true;
eval("var x=false");
return x;
}