16

"厳密に使用"; 素晴らしく、当店でもぜひ使ってみたいと思います。ただし、私たち(開発者)が厳密性の問題を見つけられるようにするためだけに必要です。以前は正常に機能していたときに、実際の顧客のためにサイトを壊したくありません。

これで、サーバー側のロジックを使用してこれを実現できます。

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

...「usestrict」はファイルごとに動作するため、実際には機能しません(ただし、すべてのJSファイルのサーバー側処理を開始しない限り)。

だから、私の質問は、ページがロードされたときに「厳密に使用」チェックするすべてのものがチェックされるのか、それともページがロードされた後に「厳密に使用」がエラーを見つけることができるのかということです。 前者の場合は、ライブでロードする前に開発中のサイトをロードするため、「厳密に使用」を使用して心配する必要はありません。ただし、後者の場合、考えられるすべての実行時条件をテストできるわけではないため、運が悪いように思われます(また、以前にエラーがなかったときにユーザーにエラーを発生させたくありません)。

4

2 に答える 2

13

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

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

例えば

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

foo();

これは投げます

"ReferenceError: assignment to undeclared variable bar"

これは良いことです。非厳密モードでは、 というグローバル変数を作成しただけbarであり、これはおそらく私たちが望んでいたものではありません。strict modeプログラマーが愚かな/悪い/望ましくないことをするのを防ぎ、エラーメッセージをスローする状況は他にもたくさんあります。しかし、繰り返しになります、奇妙なバグではなく、これらのエラーが必要です。

MDNでさらに読む

于 2012-04-11T23:30:32.990 に答える
6

私があなたを正しく理解しているなら、はい、ページが読み込まれた後に厳密モードがエラーをキャッチすることは間違いなく可能です。例えば:

'use strict';

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

// ここをクリックしてデモをご覧ください。

できることは非常に単純です。いずれにせよ、本番環境に移行するときに JavaScript を縮小する必要があります。'use strict'その縮小プロセス中にが削除されることを確認してください。

それができない場合は、コードに厳密なエラーがないことを確認してください。Strict モードは通常、セマンティクスに関して機能します。これは、ユーザー入力の奇妙な理由や構文のせいではありません。すべてのケースを把握するのはそれほど難しくありません。(ただし、縮小して削除する'use strict'方がはるかに優れたソリューションです。)

于 2012-04-11T23:32:25.333 に答える