20

JavaScript セミコロンレス スタイルを使用する価値があるかどうかを判断しようとしています。

セミコロンのない JavaScript コードがある場合:

function(){
    var first = 1
    var second = 2
    sum = 1 + 2
    return sum
}

ブラウザとNode.jsで動作します。

しかし、(Uglify またはClosure Compilerによって) 縮小されたコードはブラウザーと Node.js で機能しますか?

JavaScript の Semicolons are optionalという記事を読みました。それはうまくいくはずだと言っています。

4

5 に答える 5

25

私は個人的にはセミコロン派のタイプですが、公正な意見が与えられないことが多い代替案には説得力のある議論があります。すべてのコーディング スタイルの議論と同様に、これは合理的な結論のない終わりのない議論になります。あなたとあなたのチームがより快適に感じるものを実行してください。

倹約的なセミコロンのアプローチを採用する場合は、自分と自分のチームが自動セミコロン挿入(ASI) とステートメント終了規則を正しく理解していることを確認してください。それは間違いなくあなたの決定が何であれ理解するのに良いことです.

縮小化に関して: ASI が適切に行われていないため、縮小化バグの潜在的な頭痛の種と、それを報告して修正する (または修正を待つ) という関連する負担を負うリスクを冒したくない場合は、以下に依存しないでください。 ASI。

  • Isaacs ( Node.jsメンテナー、したがって、この質問の目的ではミニフィケーションにとらわれない)について
  • 彼は、ASI ルールのこの優れた公平な分析を推奨しています。
于 2012-08-22T20:52:37.330 に答える
5

JavaScript のセミコロンは省略可能ですが、セミコロンを使用しないことに対する強いアドバイスがあります。

  • コードがバグに対して脆弱になります空白を削除した結果 (縮小に使用):これを試して:

    変数 a = 1; 変数 b = 7; 変数合計 = a+b (a + b)

に縮小されvar a=1,b=7,sum=a+b(a+b);エラーが発生しますnumber is not a functionにもこんなケースもあります。

更新: このバグはミニフィケーションによるものではありませんが、次のバグは次のとおりです。

  • 縮小化に起因するバグに対してコードが脆弱になります: 試してください:

      var isTrue = true
    
      function doSomething() { return 'yeah' }
    
      function doSomethingElse() { return 'yes, dear' }
    
      doSomething()
    
      !isTrue && doSomethingElse()
    

    次のように縮小します。

      var isTrue=true;function doSomething(){return "yeah"}function doSomethingElse(){return "yes, dear"}doSomething()!isTrue&&doSomethingElse();
    

    その結果:

      SyntaxError: Unexpected token !
    
  • 利便性の点で、コードの可読性と保守性が低下します。セミコロンの使用は、適切なプラクティスとして当然のこととして確立されており、訓練を受けた JavaScript 開発者は、規則を回避しようとするコードに困惑するでしょう。

もう 1 つのことは、自問する必要があるということです。セミコロンを省略して、実際に何のメリットがあるのでしょうか。

  • クリーンコード? JavaScript を JavaScript のように見せたくない場合は、CoffeeScriptを試してください。しかし、上記のような落とし穴は「簡単な解決策: 行が括弧で始まる場合は、先頭にセミコロンを追加する」ことで解決できると信じている誤った考えもあります。このクリーンなコードはどのように機能し、コードを読む人にとってどのように役立つでしょうか?

結論: 縮小化では、私は間違いなくJSLintの規則を使用しようとします。縮小されていないコードでは発生せず、縮小されたコードで発生しているバグを修正しようと何時間も試みた後、最終的に JavaScript コードを lint する人を見てきました。この惨めさの中に身を投じないでください。セミコロンは一見醜いかもしれませんが、バグを寄せ付けません。

于 2012-08-22T13:44:58.420 に答える
3

コンパイラとミニファイヤはおそらく、必要に応じてセミコロンを追加するのに十分なほどインテリジェントです(そして、それがミニファイプロセスに役立つ場合)。

でも!セミコロンは、これが文の終わりであることをインタプリタに伝えます。欠落している場合は、次の行の先頭を調べて、ステートメントを続行する意味があるかどうかを確認する必要があります。次に、次の行が新しいステートメント (つまり、セミコロンが欠落している) であるか、実際には前の行からのステートメントの継続であるかを決定します。

セミコロンがないと、処理が遅くなります! 言うまでもなく、これにより、説明したアルゴリズムを実行するインタープリターが間違っていると判断したときに、あいまいなエラーが発生する可能性があります。

于 2012-08-22T13:18:34.560 に答える
0

やらないでください。セミコロンの挿入は非常に危険なことです。サイズの増加は、追加のリスクに値しません。

Douglas Crockford はあなたを好きになれないでしょう :) JavaScript: 良い部分

于 2012-08-22T13:14:57.913 に答える
-2

私見、そうしないでください。実際にはそれほど多くは得られず、セミコロンはAFAIKが自動的にそこに配置され、奇妙なバグを生成する場所に配置される可能性があります.

于 2012-08-22T13:15:05.073 に答える