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

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

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

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

Q&A

2回答

7663閲覧

JS、jqueryのセミコロンをつけるべきかつけないべきか区別の方法がわかりません。 下記ソースの一番最後に入れるべきかどう区別するのでしょうか?

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

0グッド

0クリップ

投稿2016/10/31 06:33

JS、jqueryのセミコロンをつけるべきかつけないべきか区別の方法がわかりません。
下記ソースの一番最後に入れるべきかどう区別するのでしょうか?

//ある要素の高さをある要素と同じ高さにする-768以下 $(window).load(function(){ var parentHeight = $('.slide__item').height(); if($(window).width() < 768) { $("#slide").height(parentHeight); } //ある要素の高さをある要素と同じ高さにする-768以上 var parentHeight = $('.split-screen-inner-secondly').height(); if($(window).width() > 768) { $(".slide__item").height(parentHeight); } })

下記stackoverflowの情報を見ると式の区切りに基本的につけるが下記だけは例外で書かないということが書いてありました。
例外
if-else、for、while、switchなどのブロックを利用する制御構造


if($(window).width() < 768) {
$("#slide").height(parentHeight);
}
上記の最後にセミコロンがないのはまさにifなので必要ない。

今回は.loadメソッドの値の終了がさいごなので、if-else、for、while、switchなどのブロックを利用する制御構造に該当しない式の敷居なので必要だがすべてのセミコロンは省略もできるという認識でよいでしょうか?

また、式の区切がどこかということも複雑だとよくわからなくなるのですが、
}が来たら必ず式の区切など、文法上の決まりはないのでしょうか?

*セミコロンについてstackoverflow
http://ja.stackoverflow.com/questions/8189/javascript-function%E6%96%87%E3%81%A7%E3%82%BB%E3%83%9F%E3%82%B3%E3%83%AD%E3%83%B3

・式の区切

if-else、for、while、switchなどのブロックを利用する制御構造の末尾にセミコロンは必要ありません。(しかしdo-whileの末尾にはセミコロン付ける)
それ以外の式の区切りには、全てセミコロンが必要だとお考え下さい。
functionの末尾にもセミコロンは必要ありませんが、var func = function(){};のような、変数に関数を代入するような書き方をした場合には演算子を利用した式になりますので、末尾にセミコロンが必要になります。
セミコロンを省略しても問題なく動作することはありますが、ブラウザの種類によっては動作しなくなることもございますので、セミコロンを省略するよりは、必要ない箇所にセミコロンがあるほうが、プログラムの動作的には安心です。(むかしセミコロンを省略したらChromeやSafariでは動作するのにIEでは動かなかったことがありました。)
しかし、個人的に以下のようなセミコロンが必要無い箇所にセミコロンが書いてあるコードを見つけたら、取り除きたいなあという気持ちになってしまいまいますので、周りの共同開発者の皆様と相談して決めていくのがよろしいかと思われます。
if( home ){
x = y + z;}; // ←ここ

あまりコードの中で使われているのを見る機会が少ないですが、Javascriptにはループを一気に抜けたり進めたりすることが出来るラベルという制御構造も用意されており、ややこしいことにこのラベルにはコロンを利用してセミコロンは必要ありません。

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

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

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

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

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

guest

回答2

0

JavaScriptのルール上、セミコロンの自動挿入といって、セミコロンなしで書いた場合にどのような箇所に補われるかは決まっています。

  • (基本的な前提として)セミコロンなしでつなげた場合に、文法的に成り立たなくなってしまう場所で、そこに改行があれば挿入される
  • for文の2つのセミコロンは挿入の対象とならない
  • 中括弧の直前についてはセミコロンがなければ補われる
  • 例外1)「return・break・throw・continueの直後」については、文法云々に関係なくセミコロンがあるものと扱われる
  • 例外2)「変数(改行)++」のようになっている場合、後置インクリメントとは解釈してくれない(デクリメントも同じ)

つまり、基本的には前の行と繋いで文法違反にならなければそっち優先です。

よく行頭に置かれるもので、前の行とつながりうるものには以下の様なものがあります。

  • 単項のプラス、マイナス(前とつながった場合に、二項の演算子とみなされます)
  • 開き丸括弧(前の行に対して、関数呼び出しと解釈される)
  • 開き角カッコ(前の行に対して、プロパティ参照と解釈される)

これら以外の「変数や関数名」「var」「制御構文」「単項しかない演算子」などで始まる行が、前の行と繋がって解釈されることはありません。ただ、ルールを正しく把握するのが面倒なので、四季の終わりにはセミコロンを打ちましょう。

投稿2016/10/31 07:00

maisumakun

総合スコア145121

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

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

退会済みユーザー

退会済みユーザー

2016/11/01 06:33

仕事でも;のルールを完璧に理解する必要はないのですね。 sublimeのいうことに適当にしたがってつけておけば、なぜつけるかつけないかがわかっていなくても問題ないということでしょうか?
maisumakun

2016/11/01 08:26

いえ、覚えなくていいのは「セミコロンの自動挿入」のほうです。 「式」と「文」を区別して、式を1つの文にしたいときにはセミコロンを打つ、というルールはしっかり把握してください。
退会済みユーザー

退会済みユーザー

2016/11/01 12:03

>>> いえ、覚えなくていいのは「セミコロンの自動挿入」のほうです。 こちらは、文の終了以外につくセミコロンは人間がつけることがないので、無視しても自動に任せておけばいいということですね。 >>> 「式」と「文」を区別して、式を1つの文にしたいときにはセミコロンを打つ、というルールはしっかり把握してください。 こちらは難しくてわかりませんが、人間が打たないといけないセミコロンということなのでしょうね。
maisumakun

2016/11/01 23:06

「セミコロンの自動挿入に頼るとバグを生みがちなので、打つべきところにはきっちりセミコロンを打って書くようにしましょう」ということです。
guest

0

javascriptの場合、改行文字をもって文の終了とみなします。
また改行文字がない場合でもセミコロンが文の終了です
したがってセミコロンを書かずにつなげてもエラーにならなければ
セミコロンは記載しなくても構いませんがユーザーが見たときに
セミコロンさえつけてあればその箇所で文が終わっていると理解できるので
極力書いておいたほうがコードの保守性があがります。

javascript

1if(1){console.log(1)}else{console.log(2)}console.log(3) 2console.log(4)

とするより

javascript

1if(1){ 2console.log(1); 3}else{ 4console.log(2); 5}; 6console.log(3); 7console.log(4);

の方が理解がし易いのでベターでしょう

投稿2016/10/31 06:50

yambejp

総合スコア114583

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

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

退会済みユーザー

退会済みユーザー

2016/10/31 07:04

ありがとうございました。 >>> 下記stackoverflowの情報を見ると式の区切りに基本的につけるが下記だけは例外で書かないということが書いてありました。 ifなども最後にセミコロンをつけてもいいのですね。 上記にはつけないとありましたがつけてはいけないというルールもないのでしょうか? つまりよくわからなければ ) と } があったらとりあえずすべてセミコロンをつけてしまえばいいということでしょうか? 下記のように $(window).load(function(){ var parentHeight = $('.slide__item').height(); if($(window).width() < 768) { $("#slide").height(parentHeight); }; //ある要素の高さをある要素と同じ高さにする-768以上 var parentHeight = $('.split-screen-inner-secondly').height(); if($(window).width() > 768) { $(".slide__item").height(parentHeight); }; }); たださすがに$(window).load(function();とはしないのでしょうね。 文法的理由はわかりませんが見たことがありません
maisumakun

2016/10/31 07:13

$(window).load(function();は文法的に成立しません。
退会済みユーザー

退会済みユーザー

2016/10/31 07:47

初心者なので難しいです。 $(window).load(function();は文法的に成立しませんとは、どんなルールからわかるのでしょうか? functionがメソッドで()が空のfunctionの値ですよね。値が来たら終了というわけではないのですね。{}がある場合はまだこちらが続いているということなのでしょうね。
maisumakun

2016/10/31 07:50

いえ、functionはメソッドではなくて、関数を作るための予約語です。function(引数リスト){本体}の形で1つものです。
退会済みユーザー

退会済みユーザー

2016/10/31 07:56

functionはメソッドないしは関数と某掲示板で教わったのですが、間違えだったのですね!! function(引数リスト){本体}の形で1つものと覚えるしかないですね。 必ずこの形になるのでfunctionが来たら}の最後が終了でこちらに;をつけると暗記しておけばよいということですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問