Existe-t-il un moyen 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. Je cherche une fonction comme isStrictMode();//boolean
Réponses
Trop de publicités?Le fait que this
dans une fonction appelée dans le contexte global ne pointera pas vers l'objet global peut être utilisé pour détecter le mode strict :
var isStrict = (function() { return !this; })();
Démonstration :
> echo '"use strict"; var isStrict = (function() { return !this; })(); console.log(isStrict);' | node
true
> echo 'var isStrict = (function() { return !this; })(); console.log(isStrict);' | node
false
Je préfère quelque chose qui n'utilise pas d'exceptions et qui 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 que le mode strict eval
n'introduit pas une nouvelle variable dans le contexte extérieur.
Avertissement + solution universelle
De nombreuses réponses ici déclarent une fonction pour vérifier le mode strict, mais une telle fonction ne vous dira rien sur la portée à partir de laquelle elle a été appelée, seulement la portée dans laquelle elle a été déclarée !
function isStrict() { return !this; };
function test(){
'use strict';
console.log(isStrict()); // false
}
Idem pour les appels de balises croiséesscript.
Ainsi, chaque fois que vous devez vérifier le mode strict, vous devez écrire toute la vérification dans cette portée :
var isStrict = true;
eval("var isStrict = false");
Contrairement à la réponse la plus votée, cette vérification effectuée par Yaron ne fonctionne pas seulement à l'échelle mondiale.
- Réponses précédentes
- Plus de réponses