2012-07-26 24 views
20

"strictモード"を有効にすることができます。 FireBugとChromeのコンソールにありますか?このページでは

<!DOCTYPE html> 
<html> 
    <head> 
    <script> 
     "use strict"; 
     var foo = 2; 
     delete foo; 
    </script> 
    </head> 
    <body></body> 
</html> 

Firebugのコンソールが与える:

applying the 'delete' operator to an unqualified name is deprecated 
>>> foo 
ReferenceError: foo is not defined 
foo 
をしかし、これが成功した:

>>> var bar = 2; 
undefined 
>>> delete bar; 
true 

スクリプトが壊れないように、あなたがdelete foo;をコメントアウトした場合でもbarの削除は、変数deを介して作成されるため、グローバルオブジェクトのプロパティであるにもかかわらず、まだ成功していますclarationのでDontDelete attributeがあります。strictモードを 『「

>>> foo 
2 
>>> delete foo 
false 
>>> var bar = 2; 
undefined 
>>> delete bar 
true 

を有効にすることは可能です』。 FireBugやChromeのコンソールで

+1

「厳密使用します」設定する。 – AJP

+0

...私がちょうどその次のセクションを読んでいたら、これはファイヤービッグの異常な行動の要点です。コンソール内のすべてのテキストは解析され、グローバル関数としてではなくEvalコードとして実行されているようです。 ' – AJP

+2

@ zorancの最初の提案に従ったので、クロムのコンソールで厳密なモードが動作することがわかりました。 ' ' console.log('厳密なモードはクールです... '); {}()); ' – slacktracer

答えて

12

firebugコンソールは、 "eval"呼び出しですべてのコードをラップすることで動作し、スクリプトの最初のステートメントはもはや "use strict"でなくなり、無効になります。特定の関数に対して "厳密な使用"を強制する関数でコードをラップすることもできますが、私が知っている最良の解決策は、コンソールをスキップしてページ自体をテストすることです。

2

コンソールで1つの関数をテストするだけの場合は、関数宣言の最初の行に 'use strict'を置くこともできます。 +入力に入力

2

使用シフトはしないであろうDontDelete属性その場合、コンソールコードが `)(evalの`にパイプされている場合、私は、不思議この enter image description here

+1

これは動作します。これは動作します。(機能f(){ console.log( 'this this is:'、 'グローバル変数は悪です! 'use strict'を必ず追加する必要があります。 F12 Chrome Consoleの各対話時に表示されます。 –

関連する問題