2012-04-11 13 views
14

"use strict";私たちは本当に私たちの店でそれを使用したいと思います。しかし、私たち(開発者)が厳密な問題を見つけることができるようにしたいだけです。私たちは、以前にうまく動作していたときに私たちの実際の顧客のために私たちのサイトを中断させたくありません。それがないように、「厳格な使用」は、ファイル単位で動作することを除いて..."厳密に"安全なライブサイトはありますか?

{% if debug %}<script>"use strict";</script>{% endif %} 

今、私たちはこれを達成するために、いくつかのサーバー側のロジックを使用することができます実際に動作します(サーバー側でJSファイルをすべて処理しない限り)。

質問:ページの読み込み時に「厳密に使用する」チェックが行われるか、ページが読み込まれた後に「厳密に使用する」ことが可能ですか?前者の場合は、「厳密な使用」を使用して心配することはできません。ライブでロードする前にサイトを開発中に読み込むためです。しかし、後者の場合は、すべての実行時条件をテストすることができないため、運が悪いように見えます(以前はエラーが発生していない場合でもユーザーにエラーを表示したくありません)。

+1

最終的な開発段階で良いJSLintを使用して、コードが安全であることを確認することもできます。 – jfriend00

答えて

12

後者です。 strict modeにある間、Javascriptインタプリタは実行時にエラーメッセージをスローする可能性があります。非厳密モードではスローされません。

一方、これらのエラーのほとんどは「エラー」です。つまり、実際にはコードを壊さないために役立ちます。例えば

function foo() { 
    "use strict"; 
    bar = true; 
} 

foo(); 

これは良いことですがstrictモードで

"ReferenceError: assignment to undeclared variable bar" 

がスローされます。厳密ではないモードでは、barというグローバル変数を作成しただけです。これはおそらく私たちが望むものではありません。 strict modeは、プログラマーが何か愚か/悪い/望ましくないことをすることを妨げ、エラーメッセージを投げる多くの状況があります。しかし、もう一度、あなたはにいくつかの厄介なバグの代わりにそれらのエラーを持ってほしいです。

は、さらに私が正しくあなたを理解していれば、ページが読み込まれた後strictモードがエラーをキャッチするために、はい、それは間違いなく可能ですMDN

+2

まず、その答えをありがとう。それは事を完全に説明する(そして、私はちょうど幸運から外れているように見える)。1つのポイント:しかし、あなたは厳しいエラーは "*良い*"と言ってきましたが、 "良い"は非常に主観的です。私はグローバル変数が悪いことに同意しますが、以前はうまく働いていたページがあるのを見て、顧客のために働くのをやめるのがずっと悪いです。厳密エラーは、顧客エラーを防止する場合にのみ「良い」ものです。そのようなエラーが発生した場合、厳密さよりも悪いです(あなたの最終目標が抽象的な「完全な」コードではなく、お客様の現場であると仮定して)。 – machineghost

+1

私が言及しました。厳密なモードでは、最終的に悪化し、隠されたエラーでさえ終わることを防ぐことができます。だから、私はいつも悪いバグではなく明確なエラーを得ることを好みます。 – jAndy

6

に読みました。たとえば、

'use strict'; 

setTimeout(function() { 
    undefined = 42; // Causes a TypeError 
}, 1000); 

// Click here for a demo.

あなたができることは、非常に簡単です。とにかくプロダクションに移行するときにJavaScriptを小さくする必要があります。その短縮処理中に'use strict'が削除されていることを確認してください。

エラーが発生していない場合は、コードに完全なエラーがないことを確認してください。 Strictモードは通常、セマンティクスに関するもので、ユーザーの入力が奇妙なものであったり、構文が原因であったりするものではありません。すべてのケースをキャッチすることはそれほど難しいことではありません。 (しかし、'use strict'を小さくして削除する方がはるかに良い解決策です)

関連する問題