とにかく、厳格モード 'use strict'が適用されているかどうかをチェックする必要がありますか?厳格モード用の異なるコードと非厳格モード用の他のコードを実行したいと思います。 isStrictMode();//boolean
のような関数を探しています
グローバルコンテキストで呼び出された関数内のthis
がグローバルオブジェクトを指さないという事実は、厳密モードを検出するために使用できます。
var isStrict = (function() { return !this; })();
デモ:
> echo '"use strict"; var isStrict = (function() { return !this; })(); console.log(isStrict);' | node
true
> echo 'var isStrict = (function() { return !this; })(); console.log(isStrict);' | node
false
私は例外を使用せず、グローバルなものだけでなく、あらゆるコンテキストで機能するものが好きです:
var mode = (eval("var __temp = null"), (typeof __temp === "undefined")) ?
"strict":
"non-strict";
これは、厳密モードeval
では外部変数に新しい変数が導入されないという事実を使用しています。
function isStrictMode() {
try{var o={p:1,p:2};}catch(E){return true;}
return false;
}
すでに回答を得ているようです。しかし、私はすでにいくつかのコードを書きました。だからここ
はい、this
は'undefined'
厳密モードの場合、グローバルメソッド内。
function isStrictMode() {
return (typeof this == 'undefined');
}
よりエレガントな方法:「this」がオブジェクトの場合、それをtrueに変換します
"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 )
}
別の解決策は、厳密モードでは、eval
で宣言された変数が外部スコープで公開されないという事実を利用できます。
function isStrict() {
var x=true;
eval("var x=false");
return x;
}