98 votes

Existe-t-il un moyen de vérifier si le mode strict est appliqué ?

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

130voto

ThiefMaster Points 135805

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

39voto

Noseratio Points 23840

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.

28voto

Vinothbabu Points 6643
function isStrictMode() {
    try{var o={p:1,p:2};}catch(E){return true;}
    return false;
}

On dirait que vous avez déjà eu une réponse. Mais j'ai déjà écrit du code. Alors, voici

16voto

Mehdi Golchin Points 5578

Ouaip, this est 'undefined' dans une méthode globale lorsque vous êtes en mode strict.

function isStrictMode() {
    return (typeof this == 'undefined');
}

12voto

potato Points 349

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X