web-dev-qa-db-ja.com

javascriptがifステートメントでカンマを受け入れるのはなぜですか?

私はそれがある種の解析エラーを生成するはずであるように見えますが、そうではないいくつかのjavascript構文を偶然見つけました:

if (true, true) {console.log('splendid')} else {console.log('horrid')} // splendid
if (true, false) {console.log('splendid')} else {console.log('horrid')} // horrid

すべての式が実行されますが、最後の式のみがロジックに影響を与えるようです:

if  (console.log('super'), true) {console.log('splendid')} // super splendid

なぜそれが有効なJavaScript構文であるのか誰でも知っていますか?実用的な使い方はありますか?

64
Matt

カンマ演算子は複数の式をつなぎ合わせ、演算の結果は最後のオペランドの値です。唯一の実際の用途は、割り当てや関数呼び出しなど、複数の副作用を発生させる必要がある場合です。

33
Adam Ayres

javaScriptのコンマは、実際にはかなり難解です。私が見た中で最もクールな使い方はこれです

while(doSomething(), checkIfSomethingHappened());

最も一般的なのは、varが最近のjsで使用される方法です。

var foo = 1,
    bar = 2;
15
Matt Briggs

これは、ループ内に複数のイテレータがある可能性がある他のほとんどのプログラミング言語と同じです。

int x,y;
for(x = 0, y = 0; x < 10 || y < 100; x++, y++) {
....
}
7
Suroot

同じコンテキストで操作と比較を行うことを許可します。

例:

if(a = 2, a > 1) console.log('a is', a)
0
vinyll