これはワームの缶を開けていると確信していますが、[スタイルガイド]は少し古くなっているようで、2つの変更を提案したいと思います
const
とlet
にvar
?var
が好まれる理由がわかりません(最近のPRでvarに変更するように言われました)。 私の推測では、それが始まりであり、 const
とlet
が新しいためです。 しかし、コードベースがES5モジュールを使用しているので、 var
を維持する理由はほとんどなくなっているようです。 import
行があるため、 var
のみをサポートするブラウザーでコードを機能させるには、コードをトランスパイラーで実行する必要があります。 その同じトランスパイラーは、すでにconst
とlet
をvar
変換します。
さらに、 var
const
とlet
を使用することには、具体的な客観的なプラス面があります。 どちらも、関数スコープではなく中括弧にスコープされています。 var
とは異なり、グローバル変数も作成しません。 確かに、コードの多くは現在var
ます(ただし、IIRC eslintはそれを自動修正できます)。 const
とlet
を必要とするようにリンターを変更し、レガシーコードをゆっくりと変更すると、エラーやリークが増えるのを防ぐことができます。 また、 const
とlet
がどこでも使用されているので、eslintを有効にして、未定義の変数をチェックすることができます。これは、少なくとも私にとっては大きな助けになります。
var
が速かった時期がありましたが、その時代は過ぎ去りました。
var
使用をやめる時が
これはDoob氏の個人的な好みかもしれませんが、IEの時代から残っていると思います。 IEは末尾のコンマをサポートしていませんでしたが、トランスパイルが発生しているため、IEの互換性のために末尾のコンマはトランスパイラーによって削除されます。 開発者にとって、末尾のコンマはエラーが少なくなるため、メリットがあります。 通常はキャッチされますが、キャッチするために少なくとも1回の反復が必要なエラー。ブラウザで実行し、構文エラーを確認してから、戻ってコンマを編集します。 少なくとも私の経験では、末尾のコンマはその問題を回避します。
複数行の配列やオブジェクトの末尾にコンマがあるとは、たとえば
const sizes = [
100,
200,
300,
];
と
const options = {
width: 100,
height: 200,
depth: 300,
};
末尾のコンマを使用すると、行を追加または削除するために必要なのは1行だけです。 末尾にコンマがある場合は、最後のコンマがであることに常に注意し、それを削除または追加する必要があることを意味します。
もちろん、決められたものは何でも大丈夫です、私はPRのガイドに従います。 コードがES5モジュールに切り替わったときに、スタイルガイドの一部を再検討する時期が来たかどうかを尋ねると思いました( var
部分は実際にはスタイルガイドに含まれていないことに注意してください)。
varの方が速い時代がありましたが、その時代は過ぎ去りました。
これは何に基づいていますか? 前回これをテストしたときのIIRCでは、 const
違いはありませんlet
はやや遅くなりました。 これに関するいくつかの更新されたテストを見るのは良いことです。
複数行の配列とオブジェクトで末尾のコンマを許可する
IEに問題がなければ、この変更に完全に同意します(少なくとも、IE 10と11をサポートしたいのですが)。
varの方が速い時代がありましたが、その時代は過ぎ去りました。
これは何に基づいていますか? 前回これをテストしたときのIIRCでは、
const
違いはありませんlet
はやや遅くなりました。 これに関するいくつかの更新されたテストを見るのは良いことです。
ええ、いくつかの数字はこの決定に役立ちます。
複数行の配列とオブジェクトで末尾のコンマを許可する
複数行の配列やオブジェクトの末尾にコンマがあるとは、たとえば
const sizes = [ 100, 200, 300, ];
私の脳はそれを次のように読んでいます:
const sizes = [
100,
200,
300, undefined
];
JS通訳者は最近そのコンマを削除しますか?
私も読むのが珍しいと思うので、私は個人的に複数行の配列で末尾のコンマを許可することに投票しません。
私にとって、末尾のコンマの目的は、物事の追加と削除、およびカット/ペーストによる並べ替えをすばやく行うことです。 最後のアイテムをカットしただけでも心配する必要はありません。すべての行が同じです。 undefined
、1行に1つのアイテムしかないことがわかっている場合、および配列が[1, 2, 3, 4, 5]
ように1行にある場合は、末尾にコンマを追加しないことを簡単に回避できます。
一方で、どちらにしても問題ないと思います。 const
/ let
への切り替えは、ここでの重要な問題です。
...しかし今、トランスパイルが起こっています...
私たちはトランスパイルしていませんよね? rollup-plugin-bubleのようなプラグインを追加しない限り、ロールアップはES6のインポート/エクスポート構文を置き換えるだけで、他のすべてはそのままにします。 ただし、IE11ではlet
/ const
がサポートされています。
末尾のコンマは、単なる「使いやすさ」よりもはるかに大きな目的を果たします。 多くの人が貢献している大規模なプロジェクトでは、 git blame
ようなものを使用して、誰がどのコードの責任者であるかを調べると便利です。
したがって、ここで明白なことを述べてください: @mrdoobによって追加された複数の行にリストされているものがあり、後でそこに行を追加すると、私の名前は私が書かなかったコードの最後の行に表示されます。
個人的には、前に述べたのとまったく同じ理由で末尾のカンマを使用することに反対していますが、今年からオフィスでもこれを実施しているので、メリットがあり、慣れてきました。
JS通訳者は最近そのコンマを削除しますか?
うん。
let
とvar
の使用について:
let
とvar
の違いは、パフォーマンスに関して言えば、最近は問題ではなくなりました。 V8とSpidermonkey(Firefox)には、最近非常にうまく機能する優れた最適化があります。
詳細については、この投稿を参照してください(実際のスニペットを実行して、違いがほとんど無視できることを確認してください): https :
そのSO質問の受け入れられた回答は、機能的な観点からのvar
とlet
の違いも指摘しています。どちらも、明確でない場合に備えて、非常に異なる意味とユースケースを持っているからです。誰にも。
決して変更されない変数にconst
を使用するのは簡単です。 javascriptエンジンは、変数がconst
で宣言されていることを確認できれば、その値が二度と変更されないことを認識しているため、大幅に最適化できます。
ちょうど私の2セント。
参考のために:
末尾のコンマは、私が見た中で最高のjsパターンの1つであり、差分をはるかに読みやすくします。
JS通訳者は最近そのコンマを削除しますか?
IEを除いて、すべてのブラウザは10年以上、配列とオブジェクトのコンマで問題ありませんでした。
別のPOVとして奇妙なこととして見るのではなく、構文は実際にはコンマが必要であり、ブラウザーが休憩を与えるだけで、最後のコンマは必要ないということを付け加えておきます。 ある人の奇妙なのは別の人の美化です。 すべての行の一貫性は、最後の行が異なるよりも個人的に同じであることがわかります。 もちろん、それらは個人的な好みであり、私は物事を見る別の方法を提示しているだけです。
差分については、これらの比較をオンラインで見つけました
行を追加する末尾のコンマ差分はありません
行を追加する末尾のコンマ差分
最初にlet
とconst
から始めましょう。 一歩ずつ。
私はそれらのタイミングが近すぎて呼び出すことができないと思います。 異なる結果が得られます
Chrome 70では、リモートで閉じられませんが
私たちがそれにいる間
末尾のカンマにもう1つPOVを追加しましょう😜末尾のカンマはセミコロンに似ています。
これは完全に合法的なコードです
{
doThis();
doThat();
doOther()
}
セミコロンがない最後の行。 1つのPOVは、コンマを同じものと見なすことです。 多分それは人々/ランプの幻想のようなものです。
あなたが2人またはランプスティックを見るかどうかは両方とも有効です。 しかし、その場合、両方のPOVが適合するため、コンマを使用すると(「コンマが定義されていないように見える」と「コンマが欠落しているように見える」)、一方には客観的な利点があり、もう一方にはそうではありません...?
コードのどこかにconst
追加しようとしましたが、コンパイルされなくなりました...
@mrdoob出力形式は、 ES
またはES5
ではなくES6
に設定する必要があります。
#6419を支持して閉会。
最も参考になるコメント
IEを除いて、すべてのブラウザは10年以上、配列とオブジェクトのコンマで問題ありませんでした。
別のPOVとして奇妙なこととして見るのではなく、構文は実際にはコンマが必要であり、ブラウザーが休憩を与えるだけで、最後のコンマは必要ないということを付け加えておきます。 ある人の奇妙なのは別の人の美化です。 すべての行の一貫性は、最後の行が異なるよりも個人的に同じであることがわかります。 もちろん、それらは個人的な好みであり、私は物事を見る別の方法を提示しているだけです。
差分については、これらの比較をオンラインで見つけました
行を追加する末尾のコンマ差分はありません
行を追加する末尾のコンマ差分