質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

1407閲覧

JavaScriptで;ではなく,で区切る意図は?

sannye

総合スコア40

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2017/08/07 18:16

編集2017/08/07 18:17

JavaScriptを眺めていると、以下のようなコードに出くわすことがあります。

1,2,3,4,5;6,7,8;9

私はこれまで、文は;で区切るものだと思っていたのですが、コンソールで動かしてみると、たしかに,でも文を区切ることができるようです。

不思議なのは、同じソースのなかに、,;が混在していることがあるということです。

この2つには何か違いがあるのでしょうか、どのような意図で、,を選択することがあるのでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

カンマ演算子

カンマ演算子(,)を使う事で複数の式(Expression)をまとめる事で、一つの式文(Expression statement)として扱うことが出来ます。
式文は文(Statement)に分類されます。

省略記法

for, while, if, 三項演算子、アロー関数等、一部の機能は、Stetament 内で一つの文(Statement)が後続する事を求めます。
一般にブロック文(BlockStatement)が使われる事が多いですが、文であれば何が入っても良い為、カンマ演算子で式文を指定する事も出来ます。

JavaScript

1if (x === 1) { // BlockStatement 2 a = 2; 3 b = 3; 4} 5 6if(x===1)a=2,b=3; // ExpressionStatement

人間が書く場合のコーディング規約では可読性の高い前者が推奨されますが、minified のような機械的処理の場合は、可読性を落としてでも、最短コードである事を優先する為、後者に変換されます。

変数文 (Variable Statement)

変数文におけるカンマ(,)はカンマ演算子ではありません
VariableStatement の文法上でカンマ(,)を含むことを許可しています。

Syntax VariableStatement[Yield]: varVariableDeclarationList[In, ?Yield]; VariableDeclarationList[In, Yield]: VariableDeclaration[?In, ?Yield] VariableDeclarationList[?In, ?Yield],VariableDeclaration[?In, ?Yield]
### セミコロン(`;`) `for` 文など、一部の例外はありますが、セミコロン(`;`)は原則として**文(Statement)**を区切る為に使われます。 カンマ演算子(`,`)は**式(Expression)**であり、式は式文(ExpressionStatement)の中に含むことが出来ます。 文(Statement)と式(Expression)は区別する必要があります。 Re: sannye さん

投稿2017/08/08 01:08

編集2017/08/08 01:51
think49

総合スコア18162

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sannye

2017/08/08 06:22

すごく丁寧で、とても参考になります。ありがとうございます。
guest

0

カンマ演算子でつないでいる箇所のことでしょうか。

【カンマ演算子 - JavaScript | MDN】
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Comma_Operator

投稿2017/08/07 18:21

kei344

総合スコア69400

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sannye

2017/08/07 18:25 編集

そうなのですが、for文ではない普通のコードで出くわすのが不思議なのです。 ``` var x = func1(); func2(), func3() ``` みたいな。minifyされたコードを見ているので、何か、最適化の結果かもしれませんが、実装者が`,`に特別な意図を持たせることがあるのかどうか、気になったのです。
Lhankor_Mhy

2017/08/08 00:25

横からすみません。 >実装者が`,`に特別な意図を持たせることがあるのかどうか これは、文法上の要請だと思います。 var x = func1(); func2(), func3() ↑はエラーにならないと思いますが、 var x = func1(), func2(), func3() ↑はエラーになると思います。 varは文なのでカンマ演算子が使えない(var文のカンマと解釈される)ことによるものです。 同様の理由で、letやconstも同じ文におけないので、 let a,b; const c,d; f(); ↑みたいな記述はありえると思います。
guest

0

MDNのカンマ演算子という箇所は読んだことがなかったので、勉強になりました。
しかし、次のようなコードがまかり通ると、私としては勘弁ならないなあとは思いました。

javascript

1//x = 10; 2x = 20; 3 4if (x === 10) 5 y = 20, console.log(y); 6else 7 y = 30, console.log(y);

投稿2017/08/07 18:54

anndonut

総合スコア667

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sannye

2017/08/07 18:59

改行するなら; しないなら, ということなのですかねえ……。
anndonut

2017/08/07 19:03

違いますよ。上のコードはifの中に2文書いてあるので本来的には;で区切ってブロック化するべきものです。2文書いてあるのにブロック化されてなければ、大抵のプログラマはぎょっとするはずです。
sannye

2017/08/07 19:05

なるほど、確かにこれはびびります。
Tak1016

2017/08/08 00:28

;は文末を明示するものですが、実は必須ではなく、改行するとセミコロンの自動挿入という問題を引き起こしたりしますよね。 余談ですみません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問